Como posso fazer com que o vim toque a campainha do terminal quando escrevo incorretamente uma palavra?

17

Eu faço uma quantidade razoável de transcrição na qual digito a mais de 100 wpm sem olhar para a tela. Eu acho que seria útil se o vim pudesse me dar algum tipo de sugestão audível se o verificador ortográfico tivesse marcado a última palavra (provavelmente indicando que eu cometi um erro de digitação e verifique novamente o que escrevi).

O corretor ortográfico pode definitivamente destacar as palavras-chave com erros de ortografia, assim que pressiono a barra de espaço. Como é que isso funciona? Existe uma maneira de executar algum tipo de comando ao mesmo tempo?

Eu sempre uso o vim no terminal; Eu não tenho o som da campainha do terminal configurado agora, mas se essa é a maneira mais fácil de fazer isso, provavelmente posso fazê-lo funcionar.

Soren Bjornstad
fonte
A questão em si, você realmente deseja interromper a digitação para corrigir uma palavra? Você não seria mais rápido se concluir a escrita primeiro e depois repassar os erros, por exemplo, com o comando "pular para a próxima palavra incorreta"?
Shahbaz
Minha motivação é mais assim: da maneira que eu normalmente digito, posso dizer quando digito claramente uma palavra corretamente, mas às vezes digito uma palavra e sei que me atrapalhei um pouco, mas ainda há uma chance de eu ter certo. Se não emitir um sinal sonoro, sei que entendi direito e posso continuar sem me preocupar com isso; caso contrário, eu sobre e tente novamente. Porém, essa é uma pergunta perfeitamente justa - provavelmente vale a pena cronometrar algumas abordagens diferentes e ver o que acontece.
Soren Bjornstad
2
Ok, do jeito que você faz, provavelmente seria mais eficiente. Se o sinal sonoro "fez você parecer", isso provavelmente o atrasou, mas se você responder a um sinal sonoro com um ^ W automático, sem sequer olhar para a tela, deve ser o mais rápido possível. Mas tenha cuidado, se o seu cérebro perceber o bipe audível depois de começar a digitar a próxima palavra, ^ W excluirá a palavra errada. Nesse caso, você pode até mesmo jogar fora todos os caracteres inseridos após um sinal sonoro até ^ W ser pressionado, para que você possa saber com segurança que ^ W excluiu a palavra incorreta e você deve continuar a partir daí.
Shahbaz

Respostas:

15

A última palavra incorreta não pode ser acessada diretamente, nem o realce pode ser consultado. Você deve recuperar a palavra antes do cursor e verificar a ortografia separadamente. Felizmente, existe essa spellbadword()função. A seguir, um gatilho é ativado em cada chave inserida que verifica a última palavra:

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

Em vez de emitir um sinal sonoro (via :normal! <Esc>), você também pode chamar uma ferramenta externa system()que reproduz um som breve. Isso também evitaria problemas em <Esc>parar o movimento do cursor, o que eu vi acontecer algumas vezes.

Ingo Karkat
fonte
Isto é perfeito! Isso adiciona um pequeno atraso ao pressionar a barra de espaço (quando depois de uma palavra), mas não é o suficiente para ser um grande negócio, e é claro que só acontece quando a verificação ortográfica está ativada. Para o sinal sonoro, criei um script que é executado mplayer -really-quiet $SOUNDFILE >/dev/null 2>&1 &e o coloco como ação.
Soren Bjornstad
Obrigado! Você pode adicionar mais if &spell && spellbadword(...)para desativar até a recuperação de palavras, caso a verificação ortográfica esteja desativada.
Ingo Karkat