簡體   English   中英

如何將所有 hlsearch 文本復制到 Vim 中的剪貼板

[英]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

謝謝。

可以按照以下程序進行。

  1. 清空一個寄存器(例如, "a )。

     qaq

    或者

    :let @a = ''
  2. 運行命令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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM