当我不得不输入大量文本shift时,在写句子的第一个字母时,我常常会按住手指,这通常会给出:
[...]end of sentence. NEw sentence[...]
这里E
的NEw
应该是小写。然后,我试图创建一个函数来检测我键入的句子的第一个单词的第二个字母是否为大写字母,而将其为小写字母。重要的部分是,当我键入句子的结尾时,更正应自动完成。
到目前为止,我已经尝试过使用autocommand事件,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>
似乎很有趣,因为它减少了函数的调用次数。我也会尝试以这种方式工作!