Как я могу сделать так, чтобы vim прозвучал в терминальном звонке, когда я неправильно написал слово?

17

Я делаю изрядное количество транскрипции, в которой я печатаю со скоростью 100+ в минуту, не глядя на экран. Я думаю, что было бы полезно, если бы vim мог дать мне какую-то слышимую реплику, если проверка орфографии только что пометила последнее слово (вероятно, указывающее, что я сделал опечатку и должен перепроверить то, что я написал).

Средство проверки правописания может определенно синтаксически выделять слова, написанные с ошибками, как только я нажму пробел. Как это работает? Есть ли способ запустить какую-то команду одновременно?

Я всегда использую vim в терминале; У меня сейчас не настроен звук звонка терминала, но если это самый простой способ сделать это, я, вероятно, смогу заставить это работать.

Сорен Бьорнстад
источник
Сам вопрос в стороне, вы действительно хотите, чтобы ваш ввод прерывался, чтобы исправить слово? Разве вы не будете быстрее, если сначала завершите запись, а затем пройдете через ошибки, например, с помощью команды «перейти к следующему слову с ошибкой»?
Шахбаз
Моя мотивация выглядит примерно так: то, как я обычно печатаю, я могу сказать, когда правильно набрал слово, но иногда я набираю слово и знаю, что немного его набрал, но есть шанс, что я получил это правильно. Если он не издает звуковых сигналов, тогда я знаю, что понял все правильно, и я могу продолжать, не беспокоясь об этом; в противном случае, я над этим и попробую еще раз. Однако это совершенно справедливый вопрос - вероятно, стоит выбрать несколько разных подходов и посмотреть, что произойдет.
Сорен Бьорнстад
2
Хорошо, то, как вы это делаете, вероятно, будет более эффективным. Если звуковой сигнал «заставляет вас смотреть», это, вероятно, замедлит вас, но если вы ответите на звуковой сигнал автоматическим ^ W, даже не глядя на экран, это должно быть так же быстро. Но будьте осторожны, если ваш мозг услышит звуковой сигнал после того, как вы начнете набирать следующее слово, ^ W удалит неправильное слово. В таком случае вы можете даже подумать о том, чтобы выбросить все вставленные символы после звукового сигнала, пока не будет нажата ^ W, так что вы можете смело знать, что ^ W удалил слово с ошибкой, и вам придется продолжить оттуда.
Шахбаз

Ответы:

15

Последнее слово с ошибкой не доступно напрямую, и не может быть запрошено выделение. Вы должны найти слово перед курсором самостоятельно и проверить его по отдельности. К счастью, есть такая spellbadword()функция. Следующее устанавливает триггер для каждого вставленного ключа, который проверяет последнее слово:

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

Вместо звукового сигнала (через :normal! <Esc>) вы также можете вызвать внешний инструмент, system()который воспроизводит короткий звук. Это также позволило бы избежать проблем с <Esc>остановкой перемещения курсора, что иногда случалось.

Инго Каркат
источник
Это потрясающе! Это добавляет очень небольшую задержку при нажатии клавиши пробела (когда после слова), но этого недостаточно, чтобы быть большим делом, и, конечно, это происходит только тогда, когда включена проверка орфографии. Для звукового сигнала я сделал скрипт, который запускается, mplayer -really-quiet $SOUNDFILE >/dev/null 2>&1 &и вставил его в действие.
Сорен Бьорнстад
1
Благодарность! Вы можете дополнительно добавить, if &spell && spellbadword(...)чтобы отключить даже поиск слова в случае, если проверка орфографии отключена.
Инго Каркат