
F 키 중 하나에 매크로를 정의하는 반복 작업을 수행하고 있지만 해당 매크로를 실행할 때마다 첫 번째 문자를 입력하려면 여전히 Shift 키를 누르고 있어야 합니다. 그것이 매크로에도 포함될 수 있는지 궁금했지만 그렇게 하는 방법을 찾아보았지만 성과가 없었습니다.
텍스트에서 커서의 위치와 관련하여 삽입 모드로 들어가는 방법은 여러 가지가 있습니다. 그런데 삽입 모드에 들어간 후 작성한 첫 글자만 대문자로 바꾸는 매크로를 정의할 수 있나요?
답변1
글쎄, 이것은 다소 해킹된 솔루션이지만 작동하는 것 같습니다. 어떻게 매핑하고 싶은지 정확히 알 수 없으므로 <leader>i
제 예에서는 매핑했습니다. 이것을 원하는 대로 자유롭게 변경해 보세요.
function! Icap()
augroup icap
au InsertLeave * exec "normal! \<C-o>gUlgi\<esc>:augroup icap | au! | augroup END\<cr>"
au InsertEnter * exec "normal! m`"
augroup END
endfunction
nnoremap <leader>i :call Icap()<cr>i
이것이 하는 일은 두 개의 자동 명령을 설정하는 "Icap"('insert capitalize'의 약자) 함수를 정의하는 것입니다. 첫 번째 자동 명령은 삽입 모드로 들어가기 직전에 수행됩니다.
- Vim은 커서의 현재 위치를점프리스트.
그런 다음 foo를 호출한 후 삽입 모드를 종료한 직후 다음과 같은 일이 발생합니다.
Vim 유형
<C-o>gUl
. 그러면 점프 목록의 이전 위치로 이동하고 커서 아래의 문자가 대문자로 변환됩니다. 그런 다음 vim은gi<esc>
. 이는 커서를 이전 위치로 되돌리는 해킹 방법입니다. 이론적으로는<C-i>
작동해야 하지만 테스트하는 동안 이상한 문제에 부딪혔습니다.Vim은 이 함수에 속하는 모든 자동 명령을 삭제합니다. 이는 향후 삽입 모드 변경으로 인해 원하지 않는 이상한 편집이 이루어지는 것을 방지하기 위한 것입니다.
다음과 같이 매핑을 수행할 수도 있습니다.
nnoremap <leader>i :call Icap()<cr>
c
그러면 다른 명령을 사용하여 삽입 모드( , a
, I
, o
, 등) 로 들어가고 s
여전히 대문자 사용 부작용이 발생할 수 있습니다.