gpt4 book ai didi

vim - 如何停止 vim 以默认语法读取?

转载 作者:行者123 更新时间:2023-12-04 07:53:50 25 4
gpt4 key购买 nike

我定义了自己的javascript语法文件,在~/.vim/syntax/after/

问题是/usr/share/vim/vim82/syntax 中存在的默认语法文件与我的自定义语法文件一起加载(它似乎在我的自定义语法之前加载)。

结果是和我自定义的语法冲突。

如何只加载我的自定义语法文件?不是默认的。

当然,我可以只删除默认的(有效),但考虑到它会在 vim 更新时被放回原处,这似乎不是解决问题的有力方法。

我的自定义文件顶部有“syntax clear”,但它没有帮助。

我还注意到默认语法文件的顶部有以下内容:

  if !exists("main_syntax")
" quit when a syntax file was already loaded
if exists("b:current_syntax")
finish
endif
let main_syntax = 'javascript'
elseif exists("b:current_syntax") && b:current_syntax == "javascript"
finish
endif

但这也没有任何作用。

我也试过将语法文件夹放在 .vim/syntax 中,正如 vim 官方页面上所建议的那样,但这似乎根本没有做任何事情(因为它根本没有被读取)。

谢谢。

最佳答案

原则上,语法脚本的来源顺序如下:

~/.vim/syntax/foo.vim
$VIMRUNTIME/syntax/foo.vim
~/.vim/after/syntax/foo.vim

~/.vim/after/syntax/ 排在最后。如果您正在编写一个内置语法脚本的完整替代品,那么这不是一个好地方,因为您至少有一个语法脚本在您之前就已采购。另一方面,如果您想做的是添加您自己的内容或有选择地覆盖之前设置的内容,那么这是一个好地方。

$VIMRUNTIME/syntax/ 也不是一个好地方,因为它是一个系统范围的位置。 您的 定制应该发生在您的 $HOME 中,对吗?

~/.vim/syntax/ 排在第一位,因此它是自定义语法脚本的理想位置,如果您添加以下行:

let b:current_syntax = "javascript"

这是因为 $VIMRUNTIME/syntax/javascript.vim 以以下样板开头:

if !exists("main_syntax")
" quit when a syntax file was already loaded
if exists("b:current_syntax")
finish
endif
let main_syntax = 'javascript'
elseif exists("b:current_syntax") && b:current_syntax == "javascript"
finish
endif

如果 b:current_syntax 被设置,它基本上会认输,并结束于:

let b:current_syntax = "javascript"

“标记其领土”,如果你愿意的话。

你不必检查任何东西,因为你是第一位的,但你仍然必须告诉其他语法脚本管好自己的事。

请注意,不礼貌的语法脚本可能不会检查该缓冲区局部变量,因此完全有可能仍然存在冲突即使您做的是正确的。但这就是 Vim 的本质。

关于vim - 如何停止 vim 以默认语法读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66806618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com