Wenn ich viel Text tippen muss, neige ich oft dazu, meinen Finger gedrückt zu halten, shiftwenn ich den ersten Buchstaben eines Satzes schreibe, der oft folgendes ergibt:
[...]end of sentence. NEw sentence[...]
Hier wird die E
von noch NEw
tiefer Fall sein. Ich versuche dann, eine Funktion zu erstellen, die erkennt, ob der zweite Buchstabe des ersten Wortes des Satzes, den ich tippe, Großbuchstaben und der zweite Buchstabe Kleinbuchstaben enthält. Der wichtige Teil wäre, dass die Korrektur automatisch durchgeführt wird, während ich das Ende meines Satzes schreibe.
Bisher habe ich versucht, mit dem Autocommand-Ereignis zu spielen, InsertCharPre
bevor mir klar wurde, dass der Text nicht durch eine von diesem Ereignis ausgelöste Funktion geändert werden kann.
Was wäre eine gute Lösung?
Beachten Sie, dass ich mich bisher nicht auf Kantenfälle wie Akronyme konzentrieren muss, die in Großbuchstaben geschrieben werden sollten, oder auf solche Dinge.
BEARBEITEN Ich habe dies gemacht, was eine nicht perfekte Problemumgehung ist:
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
Es hat ein Problem, da das erste Zeichen, das ich im Einfügemodus eingebe, an das Ende der Zeile verschoben wird, aber ich denke, das kann korrigiert werden.
Ich denke jetzt wird meine Frage eine Codeüberprüfungsfrage :
- Wie kann ich den Nebeneffekt beseitigen, der das erste eingefügte Zeichen bewegt?
- Ist es die bestmögliche Methode?
- Diese Methode scheint Vim zu verlangsamen: Wie könnte sie verbessert werden?
<Space>
scheint ziemlich interessant zu sein, da sie die Anzahl der Aufrufe der Funktionen verringert. Ich werde auch versuchen, auf diese Weise zu arbeiten!