¿Cómo puedo hacer que vim haga sonar la campana del terminal cuando escribo mal una palabra?

17

Realizo una buena cantidad de transcripción en la que escribo a más de 100 palabras por minuto sin mirar la pantalla. Creo que sería útil si vim me pudiera dar algún tipo de señal audible si el corrector ortográfico acaba de marcar la última palabra (probablemente indicando que cometí un error tipográfico y debería verificar dos veces lo que escribí).

El corrector ortográfico definitivamente puede resaltar la sintaxis de las palabras que están mal escritas tan pronto como presiono la barra espaciadora. ¿Como funciona esto? ¿Hay alguna manera de ejecutar algún tipo de comando al mismo tiempo?

Siempre uso vim en la terminal; No tengo configurado el sonido de la campana del terminal en este momento, pero si esa es la forma más fácil de hacerlo, probablemente pueda hacerlo funcionar.

Soren Bjornstad
fuente
Dejando a un lado la pregunta, ¿realmente quieres que tu mecanografía sea interrumpida para arreglar una palabra? ¿No sería más rápido si completa la escritura primero y luego revisa los errores, por ejemplo, con un comando "saltar a la siguiente palabra mal escrita"?
Shahbaz
Mi motivación es más o menos así: de la forma en que normalmente escribo, puedo decir cuándo escribí una palabra correctamente, pero a veces escribo una palabra y sé que la busqué un poco, pero aún existe la posibilidad de que tenga bien. Si no suena, entonces sé que lo entendí bien y puedo continuar sin preocuparme por eso; de lo contrario, lo paso por encima e intento nuevamente. Sin embargo, esta es una pregunta perfectamente justa: probablemente valga la pena programar algunos enfoques diferentes y ver qué sucede.
Soren Bjornstad
2
Ok, la forma en que lo haces, probablemente sería más eficiente. Si el pitido "te hizo mirar", eso probablemente te habría frenado, pero si respondes a un pitido con un ^ W automático, sin siquiera mirar la pantalla, eso debería ser tan rápido. Sin embargo, tenga cuidado, si su cerebro percibe el pitido audible después de haber comenzado a escribir la siguiente palabra, ^ W eliminaría la palabra incorrecta. En tal caso, incluso puede pensar en tirar todos los caracteres insertados después de un pitido hasta que se presione ^ W, por lo que puede saber con seguridad que ^ W eliminó la palabra mal escrita y debe continuar desde allí.
Shahbaz

Respuestas:

15

No se puede acceder directamente a la última palabra mal escrita, ni se puede consultar el resaltado. Tienes que recuperar la palabra antes del cursor tú mismo y revisar la ortografía por separado. Afortunadamente, hay tal spellbadword()función. Lo siguiente configura un disparador en cada tecla insertada que verifica la última palabra:

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

En lugar de pitidos (a través de :normal! <Esc>), también puede invocar una herramienta externa system()que reproduce un breve sonido. Eso también evitaría problemas al <Esc>detener el movimiento del cursor, lo que he visto suceder a veces.

Ingo Karkat
fuente
¡Esto es perfecto! Agrega un ligero retraso al presionar la barra espaciadora (después de una palabra), pero no es suficiente para ser un gran problema, y ​​por supuesto solo ocurre cuando el corrector ortográfico está habilitado. Para el pitido, hice un script que se ejecuta mplayer -really-quiet $SOUNDFILE >/dev/null 2>&1 &y lo puse como acción.
Soren Bjornstad
1
¡Gracias! Puede agregar más if &spell && spellbadword(...)para deshabilitar incluso la recuperación de palabras en caso de que la revisión ortográfica esté desactivada.
Ingo Karkat