我需要设置一个自动命令,该命令将在vim的&packpath
(及其子目录(中写入任何文件后执行。考虑到&packpath
是一个包含许多目录的列表,我该如何进行此操作?我不太懂vimscript,所以如果这是一个简单的问题,请原谅我。
我试过:
autocmd BufWritePost &packpath/* [command here]
但这并不奏效。
一个人会怎么做?
您的问题有两部分。
第一部分是关于在Ex命令中使用表达式,第二部分是关于构造正确的自动命令模式。
在Vim中,表达式是任何必须进行求值才能生成值的东西。在这种情况下,&packpath
是一个表达式,它的求值生成一个形式为的字符串
dirA,dirB,dirC
不过,大多数Ex命令都期望字符串,而不是表达式,而这个"表达式"的经典解决方案是;"问题";是使用:help :execute
:
execute 'autocmd BufWritePost ' .. &packpath .. ' echomsg "Hello."'
它将这些字符串和评估的表达式连接到一个适当的自动命令:
autocmd BufWritePost dirA,dirB,dirC echomsg "Hello."
那…什么都没做,因为我们还有第二部分要处理。
如:help file-pattern
所示;图案";非常像您在shell中习惯的globbing模式,只添加了一些正则表达式。就像在你的壳里一样;图案";对于";直接在CCD_ 6"中的任何目录下的任何Vim文件;将是:
{dirA,dirB,dirC}/*.vim
而用于";&runtimepath
中任何目录下的任何Vim文件;将是:
{dirA,dirB,dirC}/**/*.vim
让我们调整我们的命令:
execute 'autocmd BufWritePost {' .. &packpath .. '}/**/*.vim echomsg "Hello."'
事实上,每当我们在&runtimepath
中的某个地方写文件时,它都会令人恼火地打印Hello.
。