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&это до üсих пор не признана как часть слова?
Рюичиро
Показать как ваше ключевое слово ( 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()(функция C) TRUE; в современных (последние 20 лет) реализациях libc это также ищет символы юникода.

Ваш второй iskeywordиспользует 97-122(az) и 64-90(AZ), который не включает в себя все варианты с различными диакритическими знаками (такими как умлаут / диарез / трема).

Таким образом, решение заключается в замене 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?

Чтобы это исправить, можно определить команду auto, которая будет запускаться каждый раз при входе в файл уценки (и, возможно, также на другие языки):

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

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

Зельфир Кальцталь
источник