[英]How to copy all hlsearch text to clipboard in Vim
文件.txt
abc123
456efg
hi789j
命令
:set hlsearch
/\d\+
我想將下面突出顯示的文本復制到剪貼板(或注冊):
123
456
789
就像
egrep -o '[0-9]+' file.txt
謝謝。
可以按照以下程序進行。
清空一個寄存器(例如, "a
)。
qaq
或者
:let @a = ''
運行命令1
:g/\d\+/norm?//e^Mv??^M"Ay
如果需要在每個匹配項后 append 一個換行符,請運行以下命令: 2
:g/\d\+/norm?//e^Ma^M^[??^Mv$"Ayu
鍵入^M
作為Ctrl + V然后Enter (或Ctrl + M ),鍵入^[
作為Ctrl + V然后Esc (或Ctrl + [ )。 為了不重新鍵入剛剛用於搜索的模式,可以按Ctrl + R , /自動插入最后一個搜索模式。
也可以將要在匹配行(遵循norm!
)上執行的命令記錄為宏。 這允許立即查看示例行上的操作並確保它們是正確的。 然后,可以使用:global
應用宏:
:g/\d\+/norm!@z
1在頂層,命令是:global
執行 Ex 命令norm?//e^Mv??^M"Ay
在與模式\d\+
匹配的每一行上。 Ex 命令以norm!
開頭norm!
命令執行普通模式命令//e^Mv??^M"Ay
。 這些是由回車符號^M
分隔的三個命令。 第一個//e
查找搜索模式(設置為全局命令中使用的模式)並將 cursor 放在匹配的最后一個符號(因為標志e
,請參閱:help search-offset
)。 然后v
命令啟動可視模式。 命令??
向后查找最后一個搜索模式(並將 cursor 放在匹配的第一個字符),從而選擇與最后一個搜索模式匹配的文本。 最后一個命令"Ay
將選定的文本拉到a
寄存器中。
2第二個全局命令與第一個全局命令相似。 在每個匹配的行中,它將 cursor 移動到匹配的最后一個符號,並在該符號后插入換行符。 然后它將 cursor 放在匹配的開頭並選擇(在可視模式下)直到行尾的所有內容(包括剛剛插入的換行符)。 最后,該命令將所選文本附加到寄存器,並撤消換行插入。
3例如,通過使用:di z
或"zp
來檢查相應寄存器的內容,始終可以看到記錄在特定宏中的動作。
如果您的文本遵循您發布的模式,您可以使用Ctrl + V和 select 從第一行的1
到最后一行的9
逐塊啟動視覺模式。 然后,您只需鍵入"+y
即可復制到系統剪貼板的+
寄存器。
編輯:
我已經為文本測試了這個新的解決方案:
abc123
456efg
hi789j
用:%s/\D//g
替換所有非數字,結果將是:
123
456
789
將其復制到剪貼板,鍵入"+y%
,然后使用u
還原更改,您就完成了。
使用此命令提取所有 URL,並將 append 提取到文件末尾:
:let urls = [] | %s/http:[^"]*/\=add(urls, submatch(0))[-1]/g | call setline(line('$')+1, urls)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.