如何让 vim 真正地将文件重新打开为 cpp 文件?

如何让 vim 真正地将文件重新打开为 cpp 文件?

我有一个包含类似 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<'

相关内容