VIM替换:使用当前行作为搜索字符串

VIM替换:使用当前行作为搜索字符串,vim,substitution,Vim,Substitution,假设以下文本文件实际上是资金和价格统计数据的数据转储: PBCPDF 05/01/2006 0.0000 0.0000 PBCPDF 0.0000 06/01/2006 0.0000 0.0000 PBCPDF 0.0082 [… lines repeat …] 我想要实现的是删除PBCPDF的所有实例,但第一个实例除外,我可以将替换命令写成:.+1,$s/PBCPDF\n//g 然而,因为我想编写一个宏来处理多个基金名称,所以我需要一种方法来使用某种模式,将当前行检索为搜索模式,

假设以下文本文件实际上是资金和价格统计数据的数据转储:

PBCPDF
05/01/2006
 0.0000
 0.0000
PBCPDF
 0.0000
06/01/2006
 0.0000
 0.0000
PBCPDF
 0.0082
[… lines repeat …]
我想要实现的是删除
PBCPDF
的所有实例,但第一个实例除外,我可以将替换命令写成
:.+1,$s/PBCPDF\n//g

然而,因为我想编写一个宏来处理多个基金名称,所以我需要一种方法来使用某种模式,将当前行检索为搜索模式,而无需手动操作


有什么方法可以做到这一点吗?

如果您在宏中执行此操作(使用q命令),那么当您执行一些更为深奥的击键命令时,它足够聪明,可以捕捉到这些命令—我特别想到的是CTRL-R、CTRL-W,它将在光标下插入单词到命令行中。例如,如果你这样做了

ESC qw /[CTRL-R, CTRL-W] (you should see the word under the cursor enter the command line) [enter] q 电子稳定控制系统 量子阱 /[CTRL-R,CTRL-W](您应该看到光标下的单词进入命令行) [输入] Q 然后你创建了一个宏来搜索缓冲区中的下一个和这个词相同的词,明白吗?作为宏的一部分,它将动态地将光标下的单词拉入命令。上面的命令中可能有类似于CTRL-W的东西可以对整行执行此操作,但我现在还不知道

ggyy:+1,$s/<Ctrl-R>"<BS>//g
拔掉整个绳子

yy
开始换人

:+1,$s/
从将其拖动到的寄存器中获取当前行:

<Ctrl-R>"

你可以通过qq/q或其他方式将其记录在宏中。

在研究了sykora和Matt的答案后,我提出了一个更好的改进方案,该方案在逐行而非逐字的基础上运行(根据)

将光标定位在要进行删除的行上后,将执行此命令:

:.+1,$s/<CTRL-R>=getline(".")<CR>\n//g
从当前行(
+1
)后面的行和文件结尾(
$
)开始替换

然后替换为“无”。

这与。
//g
//g
:.+1,$s/<CTRL-R>=getline(".")<CR>\n//g
:.+1,$s/
<CTRL-R>=getline(".")<CR>\n
//g