Vimscript:& filetype和&语法总是一个空字符串

时间:2018-03-29 00:42:39

标签: vim

我觉得我想做的事情并不容易。我有这个文件after/syntax/custom.vim。它概述了我想要应用于所有文件类型的一些非常简单的语法突出显示规则。突出显示规则有效。将f_type硬编码到python或其他东西并强制使用文件类型将会很有效!我试图在我的.vimrc中执行以下操作:

let f_type = &syntax
execute printf("autocmd BufNewFile,BufRead * set syntax=%s.custom", f_type)

我也尝试过&filetype但是这个和&syntax总是返回一个空字符串。任何帮助都很可爱。

我遵循了Vimscript: how to get current filetype as a variable

某些原因这不起作用......

更新: 我找到了一个有效的解决方案,但它很......很傻。

command APPLYCUSTOM execute printf("set syntax=%s.custom", &syntax)
autocmd VimEnter * APPLYCUSTOM

这似乎有效,但如果我将其合并到一行,则在尝试Syntax事件时会抛出错误(但仍然有效)。

1 个答案:

答案 0 :(得分:0)

不,您的解决方案并不愚蠢,它与执行时间有关。第一个将f_type的值'syntax'赋给~/.vimrc,就像初始化期间一样。。来源为&syntax时,尚未加载缓冲区,因此没有文件类型或语法!

第二个命令将APPLYCUSTOM的求值移到自定义VimEnter命令的运行时,该命令在autocmd BufNewFile,BufRead * execute 'setlocal syntax=' . &syntax . '.custom' 上运行,这很晚(但仍然仅适用于首先打开的文件!)

为避免使用定制命令,您需要在autocmd执行期间进行评估:

:let

可以使用autocmd BufNewFile,BufRead * let &l:syntax .= '.custom' 以更好的方式编写:

Syntax

替代

但是,我将受益于内置的custom事件,并直接获取语法脚本,而不是通过复合名称来扩展语法。 (插件可能对此感到困惑,而且我也认为在所有语法名称中都包含autocmd Syntax * runtime after/syntax/custom.vim 并没有帮助(例如,在状态行中包含语法时))

:syntax on

您只需要确保它在~/.vimrc中的const firstObj = { info: "john", display: function (logger) { logger(); } } const secondObj = { info: "mike", logger: function () { console.log(this.info); // logs undefind . but i expected to log john } }; firstObj.display(secondObj.logger); 之后,以便在原始语法脚本之后 之后执行。