たくさんのテキストを入力しなければならないshiftとき、私はしばしば次のような文の最初の文字を書くときに指を押し続ける傾向があります。
[...]end of sentence. NEw sentence[...]
ここで、E
of NEw
は小文字でなければなりません。次に、入力する文の最初の単語の2番目の文字が大文字かどうかを検出し、小文字にする関数を作成しようとしています。重要な部分は、文章の終わりを入力している間に修正が自動的に行われることです。
これまでのところ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>
、関数の呼び出し回数を減らすため、非常に興味深いようです。私もこの方法で作業しようとします!