내가 쓴 첫 글자를 대문자로 삽입 모드로 들어가는 방법은 무엇입니까?

내가 쓴 첫 글자를 대문자로 삽입 모드로 들어가는 방법은 무엇입니까?

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'의 약자) 함수를 정의하는 것입니다. 첫 번째 자동 명령은 삽입 모드로 들어가기 직전에 수행됩니다.

그런 다음 foo를 호출한 후 삽입 모드를 종료한 직후 다음과 같은 일이 발생합니다.

  • Vim 유형 <C-o>gUl. 그러면 점프 목록의 이전 위치로 이동하고 커서 아래의 문자가 대문자로 변환됩니다. 그런 다음 vim은 gi<esc>. 이는 커서를 이전 위치로 되돌리는 해킹 방법입니다. 이론적으로는 <C-i>작동해야 하지만 테스트하는 동안 이상한 문제에 부딪혔습니다.

  • Vim은 이 함수에 속하는 모든 자동 명령을 삭제합니다. 이는 향후 삽입 모드 변경으로 인해 원하지 않는 이상한 편집이 이루어지는 것을 방지하기 위한 것입니다.

다음과 같이 매핑을 수행할 수도 있습니다.

nnoremap <leader>i :call Icap()<cr>

c그러면 다른 명령을 사용하여 삽입 모드( , a, I, o, 등) 로 들어가고 s여전히 대문자 사용 부작용이 발생할 수 있습니다.

관련 정보