Bagaimana saya bisa vim membunyikan bel terminal ketika saya salah mengeja kata?

17

Saya melakukan cukup banyak transkripsi di mana saya mengetik pada 100+ wpm tanpa melihat layar. Saya pikir itu akan berguna jika vim dapat memberi saya semacam isyarat suara jika pemeriksa ejaan baru saja menandai kata terakhir (kemungkinan menunjukkan bahwa saya membuat kesalahan ketik dan harus memeriksa ulang apa yang saya tulis).

Pemeriksa ejaan pasti dapat sintaks-sorot kata-kata yang salah eja begitu saya menekan bilah spasi. Bagaimana cara kerjanya? Apakah ada cara untuk menjalankan semacam perintah pada saat yang sama?

Saya selalu menggunakan vim di terminal; Saya tidak memiliki bunyi bel terminal yang diatur sekarang, tetapi jika itu adalah cara termudah untuk melakukannya, saya mungkin bisa membuatnya bekerja.

Soren Bjornstad
sumber
Selain pertanyaan itu, apakah Anda benar-benar ingin pengetikan Anda terputus untuk memperbaiki kata? Tidakkah Anda akan lebih cepat jika Anda menyelesaikan penulisan terlebih dahulu, kemudian melewati kesalahan, misalnya dengan perintah "lompat ke kata salah eja berikutnya"?
Shahbaz
Motivasi saya lebih seperti ini: cara saya biasanya mengetik, saya bisa tahu kapan saya mengetik kata dengan benar, tapi kadang-kadang saya mengetik kata dan tahu bahwa saya sedikit meraba-raba, tapi masih ada peluang yang saya dapatkan itu benar. Jika tidak berbunyi bip, maka saya tahu saya sudah benar dan saya bisa melanjutkan tanpa khawatir; jika tidak, saya akan melakukannya dan coba lagi. Ini adalah pertanyaan yang sangat adil - mungkin perlu menghitung waktu beberapa pendekatan yang berbeda dan melihat apa yang terjadi.
Soren Bjornstad
2
Ok, cara Anda melakukannya, mungkin akan lebih efisien. Jika bunyi bip "membuat Anda melihat", itu mungkin akan memperlambat Anda, tetapi jika Anda merespons bunyi bip dengan tanda ^ W otomatis, tanpa melihat layar, itu seharusnya sama cepatnya. Namun berhati-hatilah, jika otak Anda merasakan bunyi bip yang terdengar setelah Anda mulai mengetik kata berikutnya, ^ W akan menghapus kata yang salah. Dalam kasus seperti itu, Anda bahkan mungkin berpikir untuk membuang semua karakter yang dimasukkan setelah bunyi bip hingga ^ W ditekan, sehingga Anda dapat dengan aman tahu bahwa ^ W menghapus kata yang salah eja dan Anda harus melanjutkan dari sana.
Shahbaz

Jawaban:

15

Kata yang salah eja terakhir tidak dapat diakses secara langsung, dan penyorotan juga tidak dapat ditanyakan. Anda harus mengambil kata sebelum kursor sendiri, dan periksa ejaan yang terpisah. Untungnya, ada spellbadword()fungsi seperti itu . Berikut ini mengatur pemicu pada setiap kunci yang dimasukkan yang memeriksa kata terakhir:

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

Alih-alih berbunyi bip (melalui :normal! <Esc>), Anda juga bisa menggunakan alat eksternal system()yang memutar suara singkat. Itu juga akan menghindari masalah dengan <Esc>menghentikan gerakan kursor, yang kadang-kadang saya lihat terjadi.

Ingo Karkat
sumber
Ini sempurna! Itu memang menambah sedikit keterlambatan menekan bilah spasi (saat setelah kata), tapi itu tidak cukup menjadi masalah besar, dan tentu saja itu hanya terjadi ketika periksa ejaan diaktifkan. Untuk bunyi bip, saya membuat skrip yang menjalankan mplayer -really-quiet $SOUNDFILE >/dev/null 2>&1 &dan menjadikannya sebagai tindakan.
Soren Bjornstad
1
Terima kasih! Anda dapat menambahkan tambahan if &spell && spellbadword(...)untuk menonaktifkan bahkan pencarian kata jika spell check tidak aktif.
Ingo Karkat