file.txt的
abc123
456efg
hi789j
命令
:set hlsearch
/\d\+
我想将突出显示的文本复制到剪贴板(或注册):
123
456
789
就像
一样egrep -o '[0-9]+' file.txt
感谢。
答案 0 :(得分:5)
可以按照以下程序进行操作。
清空一个寄存器(例如,"a
)。
qaq
或
:let @a = ''
运行命令 1
:g/\d\+/norm!//e^Mv??^M"Ay
如果需要在每个后面附加一个新的行字符 匹配,改为运行此命令: 2
:g/\d\+/norm!//e^Ma^M^[??^Mv$"Ayu
键入^M
为 Ctrl + V 然后输入(或
Ctrl + M ),键入^[
为
Ctrl + V 然后 Esc (或
控制 + [)。为了不重新键入模式
只是用于搜索,人们可以按
Ctrl + R , / 自动插入
最后的搜索模式。
还可以记录命令在匹配的行上执行(该部分
跟随norm!
)作为宏。这允许查看操作
立即在样品线上并确保它们是正确的。然后,
可以使用:global
:
:g/\d\+/norm!@z
1 在顶层,命令是执行Ex的:global
在与模式匹配的每一行上命令norm!//e^Mv??^M"Ay
\d\+
。 Ex命令以norm!
命令开始执行Normal
模式命令//e^Mv??^M"Ay
。这是由三个命令分隔的命令
回车符号^M
。第一个//e
查找搜索
模式(设置为全局命令中使用的模式)并放入
将光标移动到匹配的最后一个符号(由于标记e
,请参阅:help
search-offset
)。然后v
命令启动可视模式。命令??
看起来
最后一个搜索模式向后(并将光标放在第一个
匹配的字符),从而选择与上次搜索匹配的文本
图案。最后一个命令"Ay
将所选文本附加到其中
a
注册。
2 第二个全局命令类似于第一个全局命令。 在每个匹配的行中,它将光标移动到匹配的最后一个符号 并在该符号后插入换行符。然后它将光标放在开头 匹配并选择(在可视模式下)一切直到行尾 (包括刚刚插入的换行符)。最后,该命令附加所选的 文本到寄存器,并撤消换行插入。
3 人们总能看到特定宏中记录的动作
使用:di z
或"zp
检查相应寄存器的内容,
例如。
答案 1 :(得分:2)
如果您的文字服从您发布的模式,您可以使用 Ctrl + V 以块状方式启动视觉模式,并从1
中选择第一行9
1}}在最后一行。然后,您只需键入+
即可复制到"+y
寄存器,即系统剪贴板。
编辑:
我已经为文本测试了这个新解决方案:
abc123
456efg
hi789j
将所有非数字替换为:%s/\D//g
,结果将为:
123
456
789
将其复制到剪贴板,键入"+y%
,然后使用u
还原更改,您就完成了。
答案 2 :(得分:-1)
使用此命令提取所有URL,并附加到文件末尾:
:let urls = [] | %s/http:[^"]*/\=add(urls, submatch(0))[-1]/g | call setline(line('$')+1, urls)