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)
谢谢.
可以按照以下程序进行操作.
清空寄存器(例如"a).
qaq
Run Code Online (Sandbox Code Playgroud)
要么
:let @a = ''
Run Code Online (Sandbox Code Playgroud)运行命令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.