Jak sprawić, by vim wybrzmiał dzwonkiem terminala, gdy źle napisałem słowo?

17

Wykonuję sporo transkrypcji, w których piszę na poziomie 100+ wpm bez patrzenia na ekran. Myślę, że byłoby użyteczne, gdyby vim mógł dać mi jakąś słyszalną wskazówkę, jeśli moduł sprawdzania pisowni właśnie zaznaczył ostatnie słowo (prawdopodobnie wskazując, że popełniłem literówkę i powinienem dokładnie sprawdzić, co napisałem).

Narzędzie do sprawdzania pisowni może zdecydowanie wyróżnić składnię słów, które są błędnie napisane, gdy tylko naciśniesz spację. Jak to działa? Czy istnieje sposób na uruchomienie polecenia w tym samym czasie?

Zawsze używam vima w terminalu; Nie mam teraz ustawionego dźwięku dzwonka na terminalu, ale jeśli jest to najłatwiejszy sposób, prawdopodobnie uda mi się go uruchomić.

Soren Bjornstad
źródło
Poza samym pytaniem, czy naprawdę chcesz, aby twoje pisanie zostało przerwane, aby naprawić słowo? Czy nie byłbyś szybszy, jeśli najpierw ukończyłeś pisanie, a następnie przejrzałeś błędy, na przykład za pomocą polecenia „przejdź do następnego błędnie napisanego słowa”?
Shahbaz
Moja motywacja wygląda mniej więcej tak: jak zwykle piszę, potrafię powiedzieć, kiedy wyraźnie wpisałem słowo poprawnie, ale czasami piszę słowo i wiem, że trochę go pomieszałem, ale wciąż mam szansę dobrze. Jeśli nie emituje sygnału dźwiękowego, wiem, że mam rację i mogę kontynuować bez obaw; w przeciwnym razie I ^ W nad tym i spróbuj ponownie. Jest to jednak całkowicie uczciwe pytanie - prawdopodobnie warto zaplanować kilka różnych podejść i zobaczyć, co się stanie.
Soren Bjornstad,
2
Ok, sposób, w jaki to robisz, prawdopodobnie byłby bardziej wydajny. Jeśli sygnał dźwiękowy „zmusił cię do spojrzenia”, prawdopodobnie spowolniłby cię, ale jeśli zareagujesz na sygnał dźwiękowy automatycznie ^ W, nawet nie patrząc na ekran, powinno to być tak szybkie. Bądź jednak ostrożny, jeśli twój mózg usłyszy słyszalny dźwięk po rozpoczęciu wpisywania następnego słowa, ^ W usunie niewłaściwe słowo. W takim przypadku możesz nawet pomyśleć o wyrzuceniu wszystkich wstawionych znaków po sygnale dźwiękowym do momentu naciśnięcia klawisza ^ W, abyś mógł bezpiecznie wiedzieć, że ^ W usunął błędnie napisane słowo i musisz kontynuować.
Shahbaz

Odpowiedzi:

15

Ostatnie błędnie napisane słowo nie jest bezpośrednio dostępne, nie można również zapytać o wyróżnienie. Musisz pobrać słowo przed kursorem i sprawdzić je osobno. Na szczęście jest taka spellbadword()funkcja. Poniższe konfiguruje wyzwalacz dla każdego wstawionego klawisza, który sprawdza ostatnie słowo:

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

Zamiast sygnału dźwiękowego (za pośrednictwem :normal! <Esc>) można również wywołać zewnętrzne narzędzie, system()które odtwarza krótki dźwięk. Pozwoliłoby to również uniknąć problemów z <Esc>zatrzymaniem ruchu kursora, co czasami zdarza się.

Ingo Karkat
źródło
To jest doskonałe! Dodaje to bardzo niewielkie opóźnienie po naciśnięciu klawisza spacji (po słowie), ale nie jest to wielka sprawa i oczywiście dzieje się to tylko wtedy, gdy włączona jest funkcja sprawdzania pisowni. Dla sygnału dźwiękowego stworzyłem skrypt, który działa mplayer -really-quiet $SOUNDFILE >/dev/null 2>&1 &i umieściłem go jako akcję.
Soren Bjornstad,
1
Dzięki! Możesz dodatkowo dodać, if &spell && spellbadword(...)aby wyłączyć nawet wyszukiwanie słów w przypadku wyłączenia sprawdzania pisowni.
Ingo Karkat