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 2015年

1
我使用gVim并拥有iskeyword=@,48-57,_,192-255。它现在可以在新的Vim实例中神奇地工作了。真奇怪,我必须仔细观察一下。
马丁·乌丁

Answers:


5

中的@字符iskeyword包括isalpha()(C函数)为TRUE的所有字符;在现代(最近20年)的libc实现中,这也寻找Unicode字符。

您的第二个iskeyword用法是97-122(az)和64-90(AZ),其中不包括带有各种变音符号的所有变体(例如变音符/音调/变调)。

因此,解决办法是更换97-12264-90使用@

这个时髦iskeyword来自LISP语法文件。该rst语法文件包括用于突出显示的代码块一堆其他语法文件。

幸运的是,您可以设置g:rst_syntax_code_list变量要包含的语言。默认值为:

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

由于您不太可能需要在reStructuredText文件中突出显示LISP语法,因此可以将其删除。只要将其添加到vimrc文件中的任何位置(如果已定义),语法文件将使用该值而不是定义自己的值。

我认为您可能要使用:

let g:rst_syntax_code_list = []

因为谁知道其他语法文件会导致什么时髦的副作用...


太好了,谢谢!到目前为止,这在我的Ubuntu上还没有发生过,仅在Fedora 22上才发生过。可能它们的语法文件有些不同。现在可以使用了。
马丁·乌丁

带有@字母数字字符的提示确实很有帮助。
Zelphir Kaltstahl '16

1

如果一个内联语法来自其他语言(例如markdown文件),则这些语言的设置似乎会覆盖markdown语法的设置。可以使用以下方法检查是否是这种情况:

:verbose set iskeyword?

为了解决这个问题,可以定义一个自动命令,每次输入markdown文件(可能还有其他语言)时运行:

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

把这个放在我.vimrc身上为我解决了这个问题。我使用vim-pandoc的语法和内联的语言,包括racketpythonsh以及一些。我认为没有必要为保留降价文件定义自动命令,因为如果您正确理解,当您输入其他语言的文件时,其语法文件应设置其关键字。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.