2012-11-12 57 views
1

我正試圖用一個腳本使用vim ex模式對一組文件進行一些簡單的修改。我想要做的是搜索一個模式,將它從當前位置(只是模式,而不是整行)中刪除,並將其粘貼到文檔的末尾。vim ex模式:複製圖案並粘貼到文件末尾?

在下面的URL有一些有用的建議,但我覺得應該有一種方法做到這一點,而不需要定義一個特殊的功能。 http://vim.wikia.com/wiki/Copy_the_search_results_into_clipboard

建議?

回答

5

Ex命令通常在整條線上工作。但是,我們可以使用命令:s將所有匹配「捕獲」到寄存器中,然後將它們粘貼到文檔的末尾。

:let @a="" 
:%s//\=matchstr(setreg('A',submatch(0),'l'),'')/g 
:$put a 

說明:%s//...

經由 let @a=""
  • 替代最近使用的搜索圖案
    • 空白出a寄存器。
    • 使用表達式,\=,作爲置換
    • submatch(0)表示匹配的模式
    • 附加到經由a寄存器面向行的匹配圖案:setreg('A',submatch(0),'l')
    • 由於setreg()返回零我們使用matchstr()來基本上將其轉換爲空字符串
    • 使用/g標誌來匹配每行多次
    • 粘貼匹配收集在a通過$pu a

    寄存器文件的末尾如需更多幫助,請參閱:

    :h :let 
    :h :s 
    :h range 
    :h :s\= 
    :h submatch(
    :h setreg(
    :h matchstr(
    :h :pu 
    :h registers 
    
  • +0

    謝謝你,彼得Rincker。 這個命令序列完全符合我在vi中輸入時的要求,但由於某種原因,當我將它合併到腳本中時,我收到一條錯誤消息「put:Undefined variable」。你有什麼想法可能是什麼問題? – user1521655

    +0

    它看起來像在$固定的東西前放\ – user1521655