Bagaimana saya bisa membuat vim berhenti memecah kata-kata saya menjadi potongan-potongan?

8

Pengguna bahasa Inggris mungkin tidak memiliki masalah ini, tetapi vim cukup bodoh dalam hal ekspresi reguler. Dalam kasus saya sebagian besar huruf dalam alfabet Turki di luar alfabet EN tampaknya tidak memenuhi syarat sebagai karakter kata.

Diberikan dokumen yang mengandung kata Turki:

gerçekleşiyor

Ekspresi pencarian

/ger\wek

... tidak akan cocok dengan awal kata. Untuk alasan apa pun ç bukan karakter kata.

Ini menjadi menjengkelkan ketika plugin digunakan \wsebagai bagian dari repertoar ekspresi reguler mereka. Contohnya adalah neocompcache(yang saya gunakan bukan neocompletekarena itu kompatibel dengan Neovim). Jika tidak ada aturan pencocokan tambahan untuk beberapa sintaks bahasa, autocomplete hanya terjadi pada potongan berukuran kata. Ketika saya sedang menulis prosa Turki dalam jumlah besar, sebenarnya akan berguna untuk memiliki autocomplete fungsional, tetapi dengan sebagian besar kata dipecah menjadi potongan-potongan kecil dengan karakter Turki yang ditinggalkan itu tidak ada gunanya.

Bagaimana saya bisa meyakinkan vim (sebaiknya neovim jika penting) untuk menerima rentang karakter yang lebih besar sebagai karakter "kata"?

Caleb
sumber
Encoding dan fileencoding apa yang Anda gunakan?
cxw
@ cxw utf-8di seluruh papan. Dan ya sudah diatur di kedua pengaturan tersebut.
Caleb
1
Anda telah menandai pertanyaan ini sebagai neovim . Saya sarankan Anda membuka masalah di pelacak masalah NeoVim, jika belum ada. Ini mungkin tidak akan diperbaiki dalam jangka pendek, tetapi akan berakhir ... Anda juga dapat mencoba memposting pesan ke vim_dev tentang ini, tetapi saya curiga semua orang akan setuju bahwa sesuatu perlu dilakukan, setelah itu tidak ada yang dilakukan. perubahan.
Martin Tournoij
Isu @Carpetsmoker Neovim dibuka .
Caleb

Jawaban:

5

\wadalah eksplisit pendek tangan untuk [0-9A-Za-z_]. Gunakan \ksebaliknya jika Anda ingin mencocokkan karakter Unicode di luar rentang itu. Misalnya, /ger\kekcocok gerçekleşiyor.

Ngomong-ngomong, neocomplete menyadari hal ini tetapi sengaja tidak menggunakan \k(secara default) karena masalah kinerja. Anda dapat mengubah g:neocomplete#keyword_patternspengaturan neocomplete . Lihat juga:

https://github.com/Shougo/neocomplete.vim/issues/207

Justin M. Keyes
sumber
4

Sepertinya tidak ada cara mudah untuk mendefinisikan ulang \w. Lihat, misalnya, Vim regex cocok dengan karakter unicode adalah sebagai non-kata dan kata Cocok berisi karakter di luar a-zA-Z .

Namun, Anda mungkin dapat menggunakan berbagai kustom jika Anda tidak keberatan mengetik ulang secara teratur (ha): [a-zA-Z\%u00c7-\%u015f]. Sayangnya itu akan cocok dengan banyak karakter non-Turki juga, tetapi jika karakter tersebut tidak muncul dalam teks Anda, itu mungkin OK.

cxw
sumber
1
Sayangnya saya tidak bisa mengendalikan semua tempat ekspresi reguler seperti itu digunakan. Sejumlah plugin menggunakan \wdan karenanya mereka semua jatuh ketika datang ke ini. Daripada menambal setiap sejak satu (jika saya bahkan dapat melacak pelakunya) akan lebih mudah bagi saya untuk menambal vim sehingga \wberfungsi. Bah
Caleb