我有一个包含类似 C 语法内容的文件filename.fs
。Vim 将其作为 Forth 源打开,我用它:set syntax=cpp
来获得正确的突出显示。但后来当我尝试在单词之间跳转时,我发现几乎每组字符都是一个单词,所以几乎总是跳到行尾左右。我认为这与设置w
有关,并给了我iskeyword
:verbose set iskeyword?
iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
Last set from /usr/share/vim/vim74/syntax/forth.vim
因此,这似乎也是因为类似 Forth 的后缀。我尝试执行set filetype=cpp
,但这并没有给我带来isk
像 这样的通常值@,48-57,_,192-255
。似乎通常的*.cpp
-specific 是从 设置的/usr/share/vim/vim74/debian.vim
,因此它不依赖于文件cpp
。但是如果我执行例如:e newfile.cpp
,那么isk
即使在此之前我正在编辑文件,也会设置为这个默认值*.fs
。
所以,我的问题是,如何将我的文件重新打开*.fs
为非 Forth 文件,但又不破坏真实 Forth 文件的默认值,也不需要手动设置isk
为所需的值?
答案1
您应该使用:setlocal filetype=cpp
而不是:set syntax=cpp
,但这仍然对您没有帮助。
问题是'iskeyword'
在中设置了$VIMRUNTIME/syntax/forth.vim
,但是当文件类型改变(为)时,它不使用b:undo_ftplugin
撤消该机制cpp
,因此修改后的选项仍然存在。
修复A
如果你不需要*.fs
像 Forth 那样编辑文件,你可以覆盖默认的文件类型检测基本上,创建一个~/.vim/filetype.vim
包含以下内容的文件:
augroup filetypedetect
au BufNewFile,BufRead *.fs setf cpp
augroup END
:help filetype-detect
详情请参阅(及以下段落)。这是最有效的设置。
修复 B
~/.vim/ftplugin/forth.vim
或者,您可以通过包含以下内容的文件来纠正语法脚本的遗漏:
let b:undo_ftplugin = 'setlocal iskeyword<'