[英]Why does this uncommon VIM dot concatenation syntax work, while my common VIM syntax doesn't?
自定义我的.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脚本中看不到任何引用)。
引用或连接与此无关。
原始命令很可能不执行任何操作,因为您忘记了声明Or
命令。 我显然不知道您所指的书用的是什么,但它很可能看起来像:command -nargs=1 Or read
例如:command -nargs=1 Or read
。
您的第二条命令失败,因为您还删除了silent!
。 该语句将消除所有错误。 自从您删除它以来,Vim现在会警告您编辑器不知道Or <argument>
,因此缺少的%:e
与它无关。
如果您想了解有关%:e
更多信息,请阅读http://vimdoc.sourceforge.net/htmldoc/cmdline.html#%:e-它会被当前文件的扩展名代替。
编辑:我看到您也对感到困惑.
可以用于字符串连接的运算符 ,正确的是。
.
简单地表示“将第一个字符串与第二个字符串连接”,例如let val2 = 'value ' . val1
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脚本非常漂亮。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.