【问题标题】:Why does this uncommon VIM dot concatenation syntax work, while my common VIM syntax doesn't?为什么这种不常见的 VIM 点连接语法有效,而我常见的 VIM 语法却不行?
【发布时间】:2014-08-04 20:50:59
【问题描述】:

自定义我的 .vimrc 我添加了模板(骨架)文件支持。书中的这个自动命令规则没有做任何事情(没有错误也没有模板):

:autocmd BufNewFile * silent! Or $HOME/.vim/templates/%:e.tpl

这个非 %e 通配符版本产生了一个错误:

:autocmd BufNewFile *.html Or $HOME/.vim/templates/html.tpl

"test.html" [New File]
Error detected while processing BufNewFile Auto commands for "*.html":
E492: Not an editor command: Or $HOME/.vim/templates/html.tpl

在另一篇帖子中,用户orftz (+1) 向我们展示了一种使用串联和双引号的不常见语法(我认为是 PHP)。

:autocmd BufNewFile * :silent! :exec ":0r " . $HOME . "/.vim/templates/" . &ft . ".tpl"

我的 common 版本有什么问题以及为什么其他版本可以工作(我在其他 vim 脚本中没有看到任何这样的引用)。

【问题讨论】:

    标签: vim


    【解决方案1】:

    引用或连接与此无关。

    原来的命令很可能没有做任何事情,因为您忘记声明Or 命令。我显然不知道你指的这本书是用什么的,但它很可能看起来像:command -nargs=1 Or read

    您的第二个命令失败,因为您还删除了silent!。此语句将抑制所有错误。由于您删除了它,Vim 现在会警告您 Or <argument> 不为编辑器所知,因此缺少的 %:e 与它无关。

    如果您想了解更多关于%:e 的信息,请阅读http://vimdoc.sourceforge.net/htmldoc/cmdline.html#%:e - 它将被当前文件的扩展名取代。


    编辑: 我看到您也对可用于字符串连接的. operator 感到困惑,这是正确的。

    . 仅表示“将第一个字符串与第二个字符串连接”,例如let val2 = 'value ' . val1.

    令人毛骨悚然的是,Vim 有一些命令可以自己进行连接,:execute:echo:echomsg 仅举几例。如果您向其传递多个表达式,此类命令将自动添加空格字符。以下命令应该都是等价的:

    :exec ":0r" $HOME . "/.vim/templates/" . &ft . ".tpl" :exec ":0r " . $HOME . "/.vim/templates/" . &ft . ".tpl" :exec (":0r " . $HOME . "/.vim/templates/" . &ft . ".tpl") :exec ":0r" ($HOME . "/.vim/templates/" . &ft . ".tpl")

    这只是说 Vim 脚本非常漂亮。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多