将参数传递给vim“;执行;

将参数传递给vim“;执行;,vim,arguments,parameter-passing,execute,Vim,Arguments,Parameter Passing,Execute,在Vim中,我希望逐行扫描文本,并将其内容传递给外部shell命令。 例如,我有一个名字列表,想对列表中的每个名字打招呼。 我已经做到了以下几点 鉴于这一案文: John Doe Jane Doe Baby Doe 我可以使用此命令仅查找第一个名称,并使用反向引用语法(\0或\1)在替换命令中重用令牌 这是输出: --John-- Doe --Jane-- Doe --Baby-- Doe 我现在想做的是将我的“替换”命令更改为“执行”shell命令 此命令 :%g/

在Vim中,我希望逐行扫描文本,并将其内容传递给外部shell命令。 例如,我有一个名字列表,想对列表中的每个名字打招呼。 我已经做到了以下几点

鉴于这一案文:

John Doe

    Jane Doe

Baby Doe
我可以使用此命令仅查找第一个名称,并使用反向引用语法(\0或\1)在替换命令中重用令牌

这是输出:

--John-- Doe

    --Jane-- Doe

--Baby-- Doe
我现在想做的是将我的“替换”命令更改为“执行”shell命令

此命令

:%g/\w\+/exe“!echo hello”“world”

工作正常,但如何将其参数化

到目前为止,我已经尝试过:

:%g/\w\+/exe“!echo hello”\0

这也是:

:%g/\w\+/exe“!echo hello”&

没有成功


这个问题很有价值,因为您可以从Vim扫描包含目录列表的文本并动态创建它们。

因此,以下是答案:

以下命令将扫描文本,修剪换行符和空格,对文本中的每个名称说“你好”:

%g/\/y A | exe'!回音“你好”。替换(替换(@a,“\n\+\s*”、“,”)、“\s*\n\+”、“,”)|让@a=”“

下一个将为文件的每个非空行创建一个目录。这一次,添加了shellescape()函数:

%g/\/y A | exe'!mkdir’。shellescape(替换(替换(@a,“\n\+\s*”,“,”),“\s*\n\+”,“,”))| let@a=“”

如果您需要创建“静默”目录,以下是命令:

%g/\/y A | exe'静默!mkdir’。shellescape(替换(替换(@a,“\n\+\s*”,“,”),“\s*\n\+”,“,”))| let@a=“”

p.S.:

您还可以使用几乎相同的命令将文件清理(清除空行并修剪非空行)到新文件中:

%g/\/y A | exe'静默!回音'。替换(替换(@a,“\n\+\s*”,“,”),“\s*\n\+”,“,”)。“>>new_file.txt”| let@a=”“

有一些例子。特别是这一个:
--John-- Doe

    --Jane-- Doe

--Baby-- Doe