Когда мне приходится набирать много текста, я часто держу палец нажатым, 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>
кажется довольно интересной, поскольку она уменьшает количество вызовов функций. Я тоже постараюсь работать таким образом!