Vim не сприймає умлаутів як символів слова


9

Коли я напишу німецький текст, що містить щось на зразок, abücdнаприклад, dwспереду, він видалить лише те, що abвін не інтерпретується üяк символ слова.

Коли я редагую reStructuredText, у мене є

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

Це пояснює, чому умлаути не позначені, але я не розумію, звідки це походить. Коли я просто відкриваю gVim, це встановлено на

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

Звідки це могло взятись?


3
Покладіть set encoding=utf-8у своє .vimrc.
cuonglm

Це вже є в мене .vim/vimrcі :set enc?дає мені utf-8. Те саме з fenc. Досі це не працює.
Мартін Удінг

Після :set iskeyword&все üще не визнається частиною слова?
ryuichiro

Показати як своє iskeyword ( set iskeyword). Це повинно бути щось на кшталт "@,48-57,_,128-167,224-235"або "@,48-57,_,192-255". Ви використовуєте Vim чи Vi? (значення за замовчуванням у Vi ( "@,48-57,_") не розпізнає ü; значення за замовчуванням у Vim нормально)
JJoao

1
Я використовую gVim і є iskeyword=@,48-57,_,192-255. Це чарівно працює зараз у свіжому екземплярі Vim. Це дивно, я мушу це спостерігати уважніше.
Мартін Удінг

Відповіді:


5

@Персонаж iskeywordвключає всі символи , для яких isalpha()(функція С) вірно; в сучасних (останні 20 років) libc-реалізаціях це також шукає символів unicode.

Ваша друга iskeywordвикористовує 97-122(az) і 64-90(AZ), що не включає всі варіанти з різними діакритичними засобами (наприклад, umlaut / diaeresis / trema).

Тож рішення - замінити 97-122і 64-90на @.

Цей фанк iskeywordпоходить з файлу синтаксису LISP; rstфайл синтаксис включає в себе купу інших файлів синтаксис для виділення кодових блоків.

На щастя, ви можете встановити, які мови включати до g:rst_syntax_code_listзмінної. За замовчуванням:

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

Оскільки навряд чи вам потрібне виділення синтаксису LISP у вашому файлі reStructuredText, ви, ймовірно, можете просто видалити його. Просто додайте його будь-де у вашому файлі vimrc, якщо він визначений, файл синтаксису буде використовувати це значення, а не визначати його власне.

На мою думку, ви, мабуть, хочете використовувати:

let g:rst_syntax_code_list = []

Бо хто знає, які прикольні побічні ефекти викликають інші файли синтаксису ...


Класно, дякую! Досі цього не траплялося зі мною на Ubuntu, це сталося лише тут на Fedora 22. Напевно, їхні файли синтаксису дещо інші. Це працює зараз.
Мартін Удінг

Підказка щодо @стояння буквено-цифрових символів була справді корисною.
Зельфір Кальтшталь

1

Якщо ви вказуєте граматики з інших мов, наприклад, файли розмітки, то параметри цих мов, схоже, переважають налаштування синтаксису розмітки. Можна перевірити, чи це так, використовуючи:

:verbose set iskeyword?

Для того, щоб виправити це, можна визначити автоматичну команду, яку потрібно запускати щоразу, коли ви вводите файл розмітки (і, мабуть, і інші мови):

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

Поставивши це у своєму .vimrcвирішеному для мене питанні. Я використовую vim-pandocсинтаксис і вбудовані мови , включаючи racket, python, shі деякі з них . Я думаю, не потрібно визначати автоматичну команду для залишення файлів розмітки, тому що, коли ви вводите файли інших мов, їх синтаксичні файли повинні встановлювати свої ключові слова, якщо я правильно розумію.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.