Come posso fare in modo che vim suoni la campana del terminale quando scrivo male una parola?


17

Faccio una buona dose di trascrizione in cui scrivo a 100+ wpm senza guardare lo schermo. Penso che sarebbe utile se Vim potesse darmi una sorta di segnale acustico se il controllo ortografico ha appena segnato l'ultima parola (probabilmente indicando che ho fatto un refuso e dovrei ricontrollare ciò che ho scritto).

Il correttore ortografico può sicuramente evidenziare la sintassi delle parole che sono errate non appena premo la barra spaziatrice. Come funziona? C'è un modo per eseguire una sorta di comando allo stesso tempo?

Uso sempre vim nel terminale; Non ho impostato il suono della campana del terminale in questo momento, ma se questo è il modo più semplice per farlo, probabilmente posso farlo funzionare.


A parte la domanda, vuoi davvero interrompere la digitazione per correggere una parola? Non saresti più veloce se completi prima la scrittura, quindi controlli gli errori, ad esempio con un comando "passa alla parola errata successiva"?
Shahbaz,

La mia motivazione è più simile a questa: il modo in cui scrivo di solito, posso dire quando ho digitato chiaramente una parola correttamente, ma a volte scrivo una parola e so che l'ho armeggiata un po ', ma c'è ancora una possibilità che ho giusto. Se non emette un segnale acustico, allora so di averlo fatto bene e posso continuare senza preoccuparmene; altrimenti, I ^ W su di esso e riprovare. Questa è una domanda perfettamente giusta, tuttavia - probabilmente vale la pena programmare alcuni approcci diversi e vedere cosa succede.
Soren Bjornstad,

2
Ok, il modo in cui lo fai, probabilmente sarebbe più efficiente. Se il bip "ti facesse sembrare", probabilmente ti avrebbe rallentato, ma se rispondessi a un bip con un ^ W automatico, senza nemmeno guardare lo schermo, dovrebbe essere altrettanto veloce. Fai solo attenzione, se il tuo cervello percepisce il segnale acustico dopo aver iniziato a digitare la parola successiva, ^ W eliminerebbe la parola sbagliata. In tal caso, potresti persino pensare di buttare via tutti i caratteri inseriti dopo un segnale acustico fino a quando non viene premuto ^ W, quindi puoi sapere con certezza che ^ W ha eliminato la parola errata e devi continuare da lì.
Shahbaz,

Risposte:


15

L'ultima parola errata non è direttamente accessibile, né l'evidenziazione può essere interrogata. Devi recuperare tu stesso la parola prima del cursore e verificarla separatamente. Fortunatamente, c'è una tale spellbadword()funzione. Quanto segue imposta un trigger su ogni chiave inserita che controlla l'ultima parola:

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

Invece di emettere un segnale acustico (tramite il :normal! <Esc>), è anche possibile richiamare uno strumento esterno system()che riproduce un breve suono. Ciò eviterebbe anche problemi con l' <Esc>arresto del movimento del cursore, che ho visto accadere a volte.


Questo è perfetto! Aggiunge un leggero ritardo alla pressione della barra spaziatrice (dopo una parola), ma non è abbastanza per essere un grosso problema, e ovviamente succede solo quando il controllo ortografico è abilitato. Per il segnale acustico, ho creato uno script che viene eseguito mplayer -really-quiet $SOUNDFILE >/dev/null 2>&1 &e inserito come azione.
Soren Bjornstad,

1
Grazie! È possibile aggiungere ulteriori if &spell && spellbadword(...)per disabilitare anche il recupero delle parole nel caso in cui il controllo ortografico sia disattivato.
Ingo Karkat,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.