为什么这种不常见的VIM点连接语法有效,而我的常见VIM语法却没有?

时间:2012-03-12 01:16:17

标签: vim

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

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

此非电子通配符版本产生错误:

: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"

我的普通版本有什么问题,为什么其他版本有效(我在其他vim脚本中看不到这样的引用)。

1 个答案:

答案 0 :(得分: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脚本非常漂亮。