많은 텍스트를 입력해야 할 때 종종 다음 shift과 같은 문장의 첫 글자를 쓸 때 손가락을 계속 누르는 경향이 있습니다 .
[...]end of sentence. NEw sentence[...]
여기서 E
의 NEw
소문자한다. 그런 다음 입력하는 문장의 첫 단어의 두 번째 문자가 대문자인지 소문자인지 감지하는 함수를 만들려고합니다. 중요한 부분은 문장의 끝을 입력하는 동안 수정이 자동으로 수행되어야한다는 것입니다.
지금 InsertCharPre
까지이 명령에 의해 트리거 된 함수로 텍스트를 수정할 수 없음을 인식하기 전에 자동 명령 이벤트 를 사용해 보았습니다 .
좋은 해결책은 무엇입니까?
참고 지금까지 내가 대문자 또는 사물의 종류에 있어야 약어 같은 가장자리 사례에 초점을 맞출 필요가 없습니다.
편집 나는 이것을 완벽하게 해결하지 못했습니다 :
autocmd CursorMovedI * call RemoveUnwantedUpper()
function! RemoveUnwantedUpper()
" Get the current sentence
" Based on http://stackoverflow.com/a/23315227/4194289
let l:save_clipboard = &clipboard
set clipboard= " Avoid clobbering the selection and clipboard registers.
let l:save_reg = getreg('"')
let l:save_regmode = getregtype('"')
normal! y(
normal! ``
let l:sentence =getreg('"')
call setreg('"', l:save_reg, l:save_regmode)
let &clipboard = l:save_clipboard
" Check that we entered a new word (space inserted)
if l:sentence[len(l:sentence)-1] != " "
return
endif
" Check if the word is the first one of the sentence
let l:size = len(split(l:sentence, " "))
if l:size > 1
return
endif
" If the last char entered is a space (new word) remove the unwanted Upper case
normal! bl
normal! vu
normal! ``
endfunction
삽입 모드에서 입력 한 첫 번째 문자가 줄의 끝으로 이동했기 때문에 문제가 있지만 그 문제를 해결할 수 있다고 생각합니다.
내 질문이 코드 검토 질문이 된 것 같습니다.
- 삽입 된 첫 번째 문자를 이동시키는 부작용을 어떻게 제거 할 수 있습니까?
- 최선의 방법입니까?
- 이 방법은 Vim의 속도를 늦추는 것 같습니다. 어떻게 개선 할 수 있습니까?
<Space>
는 함수의 호출 횟수를 줄이므로 매우 흥미로워 보입니다. 나도 이런 식으로 일하려고 노력할 것입니다!