自定义我的.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脚本中看不到这样的引用)。
答案 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脚本非常漂亮。