如何为 &packpath 中的任何文件设置 Vim autocmd?
How to set a Vim autocmd for any file in &packpath?
我需要设置一个自动命令,在写入 vim 的 &packpath
(及其子目录)中的任何文件后执行。
鉴于 &packpath
是许多目录的列表,我将如何去做?我不太了解vim脚本,如果这是一个简单的问题,请原谅。
我试过:
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 中习惯使用的通配模式,带有少量正则表达式。就像在您的 shell 中一样,“&runtimepath
中任何目录下的任何 Vim 文件”的正确“模式”是:
{dirA,dirB,dirC}/*.vim
和“&runtimepath
中任何目录下的任何 Vim 文件,递归地”的那个将是:
{dirA,dirB,dirC}/**/*.vim
让我们调整我们的命令:
execute 'autocmd BufWritePost {' .. &packpath .. '}/**/*.vim echomsg "Hello."'
每次我们在 &runtimepath
.
中的某处写入文件时,确实会令人讨厌地打印 Hello.
我需要设置一个自动命令,在写入 vim 的 &packpath
(及其子目录)中的任何文件后执行。
鉴于 &packpath
是许多目录的列表,我将如何去做?我不太了解vim脚本,如果这是一个简单的问题,请原谅。
我试过:
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 中习惯使用的通配模式,带有少量正则表达式。就像在您的 shell 中一样,“&runtimepath
中任何目录下的任何 Vim 文件”的正确“模式”是:
{dirA,dirB,dirC}/*.vim
和“&runtimepath
中任何目录下的任何 Vim 文件,递归地”的那个将是:
{dirA,dirB,dirC}/**/*.vim
让我们调整我们的命令:
execute 'autocmd BufWritePost {' .. &packpath .. '}/**/*.vim echomsg "Hello."'
每次我们在 &runtimepath
.
Hello.