如何将所有hlsearch文本复制到Vim中的剪贴板

kev*_*kev 2 vim

file.txt的

abc123
456efg
hi789j
Run Code Online (Sandbox Code Playgroud)

命令

:set hlsearch
/\d\+
Run Code Online (Sandbox Code Playgroud)

我想将突出显示的文本复制到剪贴板(或注册):

123
456
789
Run Code Online (Sandbox Code Playgroud)

就像

egrep -o '[0-9]+' file.txt
Run Code Online (Sandbox Code Playgroud)

谢谢.

ib.*_*ib. 5

可以按照以下程序进行操作.

  1. 清空寄存器(例如"a).

    qaq
    
    Run Code Online (Sandbox Code Playgroud)

    要么

    :let @a = ''
    
    Run Code Online (Sandbox Code Playgroud)
  2. 运行命令1

    :g/\d\+/norm!//e^Mv??^M"Ay
    
    Run Code Online (Sandbox Code Playgroud)

    如果需要在每个匹配项后添加换行符,请改为运行此命令:2

    :g/\d\+/norm!//e^Ma^M^[??^Mv$"Ayu
    
    Run Code Online (Sandbox Code Playgroud)

    键入^M作为Ctrl+ V然后Enter(或 Ctrl+ M),输入^[作为 Ctrl+ V然后Esc(或 Ctrl+ [).为了不重新键入刚刚在搜索中使用的模式,可以按 Ctrl+ R,/以自动插入最后的搜索模式.

    还可以将命令记录在匹配的行(后面的部分norm!)上作为宏.这允许立即在样品线上查看操作并确保它们是正确的.然后,可以使用:global以下方法应用宏:

    :g/\d\+/norm!@z
    
    Run Code Online (Sandbox Code Playgroud)

1 在顶层,该命令是在与模式匹配的每一行上 :global执行Ex命令.Ex命令以执行Normal模式命令的命令开头.这些是由回车符号分隔的三个命令.第一个,查找搜索模式(设置为全局命令中使用的模式)并将光标放到匹配的最后一个符号(由于标志,请参阅).然后命令启动可视模式.该命令向后查找最后一个搜索模式(并将光标放到匹配的第一个字符),从而选择与上一个搜索模式匹配的文本.最后一个命令将所选文本附加到 寄存器中.norm!//e^Mv??^M"Ay\d\+norm!//e^Mv??^M"Ay^M//ee:help search-offsetv??"Aya

2 第二个全局命令类似于第一个全局命令.在每个匹配的行中,它将光标移动到匹配的最后一个符号,并在该符号后插入换行符.然后它将光标置于匹配的开始并选择(在可视模式下)一直到行尾(包括刚刚插入的换行符).最后,该命令将所选文本附加到寄存器,并撤消换行插入.

3例如, 通过使用:di z或检查相应寄存器的内容,可以始终看到记录在特定宏中的动作"zp.