Коли мені доводиться вводити багато тексту, я часто прагну натискати на палець, shiftколи пишу першу букву речення, яке часто дають:
[...]end of sentence. NEw sentence[...]
Тут E
з NEw
повинна бути в нижньому регістрі. Тоді я намагаюся створити функцію, яка б виявила, якби друга літера першого слова речення, яке я вводя, є великим регістром, і яка мала би малою літерою. Важливою частиною було б те, що виправлення потрібно робити автоматично, коли я набираю кінець свого речення.
Поки я намагався грати з події автокоманди, InsertCharPre
перш ніж зрозумів, що текст не може бути змінений функцією, викликаною цією подією.
Що було б хорошим рішенням?
Зауважте, що поки що мені не потрібно зосереджуватись на кращих випадках, таких як абревіатури, які мають бути у верхньому регістрі або подібні речі.
EDIT Я зробив це, що є не ідеальним рішенням:
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>
видається досить цікавою, оскільки зменшує кількість викликів функцій. Я також спробую працювати таким чином!