Wie kann ich vim die Terminalglocke ertönen lassen, wenn ich ein Wort falsch schreibe?

17

Ich schreibe eine ganze Menge Transkriptionen, bei denen ich mit 100+ wpm tippe, ohne auf den Bildschirm zu schauen. Ich denke, es wäre nützlich, wenn vim mir einen hörbaren Hinweis geben könnte, wenn die Rechtschreibprüfung gerade das letzte Wort markiert hat (was wahrscheinlich darauf hindeutet, dass ich einen Tippfehler gemacht habe und überprüfen sollte, was ich geschrieben habe).

Die Rechtschreibprüfung kann Wörter, die falsch geschrieben sind, definitiv syntaktisch hervorheben, sobald ich die Leertaste drücke. Wie funktioniert das? Gibt es eine Möglichkeit, gleichzeitig einen Befehl auszuführen?

Ich benutze immer vim im Terminal; Ich habe momentan keinen Klingelton für das Terminal eingestellt, aber wenn dies der einfachste Weg ist, kann ich das wahrscheinlich zum Laufen bringen.

Soren Bjornstad
quelle
Abgesehen von der Frage, möchten Sie wirklich die Eingabe unterbrechen, um ein Wort zu korrigieren? Wären Sie nicht schneller, wenn Sie zuerst das Schreiben abschließen und dann die Fehler durchgehen, beispielsweise mit dem Befehl "Zum nächsten falsch geschriebenen Wort springen"?
Shahbaz
Meine Motivation sieht eher so aus: Wie ich es normalerweise tippe, kann ich erkennen, wenn ich ein Wort richtig geschrieben habe, aber manchmal tippe ich ein Wort und weiß, dass ich es ein bisschen durcheinandergebracht habe, aber es besteht immer noch die Möglichkeit, dass ich es habe es richtig. Wenn es nicht piept, weiß ich, dass ich es richtig verstanden habe und ich kann weitermachen, ohne mich darum zu kümmern. ansonsten hab ich ^ w drüber nachgedacht und es nochmal versucht. Dies ist jedoch eine vollkommen faire Frage - es lohnt sich wahrscheinlich, ein paar verschiedene Ansätze zu planen und zu sehen, was passiert.
Soren Bjornstad
2
Ok, so wie du es machst, wäre es wahrscheinlich effizienter. Wenn der Piepton "Sie zum Schauen gebracht" hätte, hätte das Sie wahrscheinlich verlangsamt, aber wenn Sie auf einen Piepton mit einem automatischen ^ W reagieren, ohne auf den Bildschirm zu schauen, sollte das genauso schnell sein. Seien Sie jedoch vorsichtig, wenn Ihr Gehirn den Signalton wahrnimmt, nachdem Sie mit der Eingabe des nächsten Wortes begonnen haben. ^ W würde das falsche Wort löschen. In einem solchen Fall können Sie sogar daran denken, alle eingegebenen Zeichen nach einem Piepton wegzuwerfen, bis ^ W gedrückt wird, damit Sie sicher wissen, dass ^ W das falsch geschriebene Wort gelöscht hat und Sie von dort aus fortfahren müssen.
Shahbaz,

Antworten:

15

Das letzte falsch geschriebene Wort ist weder direkt zugänglich, noch kann die Hervorhebung abgefragt werden. Sie müssen das Wort vor dem Cursor selbst abrufen und die Rechtschreibprüfung separat durchführen. Zum Glück gibt es eine solche spellbadword()Funktion. Das Folgende richtet einen Auslöser für jeden eingefügten Schlüssel ein, der das letzte Wort prüft:

autocmd CursorMovedI * if &spell && spellbadword(matchstr(strpart(getline('.'), 0, col('.') - 1), '\S\+\s$') )[1] ==# 'bad' | execute "normal! \<C-\>\<C-n>\<Esc>" | endif

Anstatt zu piepen (über :normal! <Esc>), können Sie auch ein externes Tool aufrufen, über system()das ein kurzer Ton abgespielt wird. Das würde auch Probleme mit dem <Esc>Anhalten der Cursorbewegung vermeiden , die ich manchmal gesehen habe.

Ingo Karkat
quelle
Dies ist perfekt! Das Drücken der Leertaste (nach einem Wort) verzögert sich zwar geringfügig, aber es reicht nicht aus, eine große Sache zu sein, und dies geschieht natürlich nur, wenn die Rechtschreibprüfung aktiviert ist. Für den Piepton habe ich ein Skript erstellt, das ausgeführt mplayer -really-quiet $SOUNDFILE >/dev/null 2>&1 &und als Aktion eingefügt wird.
Soren Bjornstad
Vielen Dank! Sie können zusätzlich hinzufügen if &spell && spellbadword(...), um auch das Abrufen von Wörtern zu deaktivieren, falls die Rechtschreibprüfung deaktiviert ist.
Ingo Karkat