如何为 &packpath 中的任何文件设置 Vim autocmd?



我需要设置一个自动命令,该命令将在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.

最新更新