繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM