Vim tidak menganggap umlaut sebagai karakter kata

9

Ketika saya menulis teks bahasa Jerman yang berisi sesuatu seperti abücdmisalnya dan ke dwdepan, itu hanya akan menghapus abkarena tidak menafsirkan üsebagai karakter kata.

Ketika saya mengedit reStructuredText, saya punya

iskeyword=38,42,43,45,47-58,60-62,64-90,97-122,_

Itu menjelaskan mengapa umlaut tidak ditandai, tetapi saya tidak mengerti dari mana asalnya. Ketika saya baru saja membuka gVim ini diatur ke

iskeyword=@,48-57,_,192-255

Dari mana datangnya ini?

Martin Ueding
sumber
3
Masukan set encoding=utf-8dalam Anda .vimrc.
cuonglm
Itu sudah ada di saya .vim/vimrcdan :set enc?memberi saya utf-8. Sama dengan fenc. Tetap saja tidak berhasil.
Martin Ueding 6-15
Setelah :set iskeyword&itu ümasih belum dikenali sebagai bagian dari sebuah kata?
ryuichiro
Tampilkan sebagai kata kunci Anda ( set iskeyword). Itu harus seperti "@,48-57,_,128-167,224-235"atau "@,48-57,_,192-255". Apakah Anda menggunakan Vim atau Vi? (nilai default di Vi ( "@,48-57,_") tidak mengenali ü; nilai default di Vim baik-baik saja)
JJoao
1
Saya menggunakan gVim dan miliki iskeyword=@,48-57,_,192-255. Ini secara ajaib bekerja dalam contoh Vim segar sekarang. Itu aneh, saya harus memperhatikannya lebih hati-hati.
Martin Ueding

Jawaban:

5

The @karakter dalam iskeywordmeliputi semua karakter yang isalpha()(C fungsi) adalah TRUE; dalam implementasi libc modern (20 tahun terakhir) ini juga mencari karakter unicode.

iskeywordPenggunaan kedua Anda 97-122(az) dan 64-90(AZ), yang tidak mencakup semua varian dengan berbagai diakritik (seperti umlaut / diaeresis / trema).

Jadi solusinya adalah mengganti 97-122dan 64-90dengan @.

Funky ini iskeywordberasal dari file sintaks LISP; yang rstfile sintaks mencakup sekelompok file sintaks lainnya untuk menyoroti blok kode.

Untungnya Anda dapat mengatur bahasa mana yang akan dimasukkan dengan g:rst_syntax_code_listvariabel. Standarnya adalah:

let g:rst_syntax_code_list = ['vim', 'java', 'cpp', 'lisp', 'php', 'python', 'perl']

Karena tidak mungkin Anda memerlukan penyorotan sintaksis LISP dalam file reStructuredText Anda, Anda mungkin bisa menghapusnya. Cukup tambahkan di mana saja di file vimrc Anda, jika sudah ditentukan, file sintaks akan menggunakan nilai itu alih-alih mendefinisikan sendiri.

Menurut pendapat saya, Anda mungkin ingin menggunakan:

let g:rst_syntax_code_list = []

Karena siapa yang tahu apa efek samping yang funky yang disebabkan oleh file sintaks lainnya ...

Martin Tournoij
sumber
Keren terima kasih Ini tidak terjadi pada saya di Ubuntu sejauh ini, itu hanya terjadi di sini di Fedora 22. Mungkin file sintaks mereka sedikit berbeda. Ini berfungsi sekarang.
Martin Ueding
Petunjuk dengan @berdiri untuk karakter alfanumerik sangat membantu.
Zelphir Kaltstahl
1

Jika seseorang menyejajarkan tata bahasa dari bahasa lain dalam misalnya file penurunan harga, maka pengaturan bahasa tersebut tampaknya menimpa pengaturan untuk sintaks penurunan harga. Satu dapat memeriksa apakah itu yang terjadi menggunakan:

:verbose set iskeyword?

Untuk memperbaikinya, seseorang dapat mendefinisikan perintah otomatis untuk dijalankan setiap kali seseorang memasukkan file penurunan harga (dan mungkin juga bahasa lain):

autocmd BufEnter,BufNewFile *.md set iskeyword=38,42,43,45,47-58,60-62,_,@

Menempatkan ini di masalah saya .vimrcdiperbaiki untuk saya. Saya menggunakan vim-pandocsintaks dan bahasa inline termasuk racket, python, shdan beberapa. Saya pikir itu tidak perlu untuk mendefinisikan perintah otomatis untuk meninggalkan file penurunan harga, karena ketika Anda memasukkan file dari bahasa lain, file sintaks mereka harus mengatur kata kunci mereka, jika saya mengerti dengan benar.

Zelphir Kaltstahl
sumber