例:%y+
洋基到外部+剪貼板。現在我想要使用正則表達式的結果,例如^\S\+
到外部+剪貼板。怎麼樣?Vim的:正則表達式猛拉匹配+剪貼板
試用1失敗]:[email protected]^\S\[email protected]+
試用2失敗]:^\S\+y+
例:%y+
洋基到外部+剪貼板。現在我想要使用正則表達式的結果,例如^\S\+
到外部+剪貼板。怎麼樣?Vim的:正則表達式猛拉匹配+剪貼板
試用1失敗]:[email protected]^\S\[email protected]+
試用2失敗]:^\S\+y+
看一看這裏http://vim.wikia.com/wiki/Copy_the_search_results_into_clipboard, '複製包含搜索命中行' 的部分。
這爲我工作(清除寄存器a
,猛拉pattern
結果進去,拷貝過來到剪貼板):
qaq
:g/pattern/y A
:let @+ = @a
當我試圖:g/pattern/y+
它只是複製了第一道防線。
鏈接上的這一部分也給出了一個可以寫入來複制所有行的函數,但它仍然看起來像一個2步過程(執行/pattern
然後調用該函數):但是您可以編寫自己的宏/按順序執行兩個快捷方式。
嘗試以下。首先定義一個函數,用於將您的 匹配的正則表達式保存到列表(:幫助列表)中。
:fun Add(list, item)
: call add(a:list, a:item)
: return a:item
:endfun
請注意,它也會返回添加的項目。這並非必要, 但您在此處返回的內容將成爲 替代文本:下面的後續替代文本。
接下來,創建一個空列表。
:let list=[]
然後運行你的正則表達式。
:%s/^\S\+/\=Add(list, submatch(0))/
注意更換開始\ =(見:幫助 子取代特)。結果是我們用自己替換了匹配表達式 ,但是同時在列表中捕獲結果。
匹配的部件的子匹配()函數返回:代替 命令。 submatch(0)返回整個匹配。
注意,作爲副作用的緩衝器被標記爲已改變。 如果您執行替代之前,那麼你可以 只需按ü撤銷,或附加「解決這個保存在緩衝區|你'到你的 命令。 (如果你要撤消操作,它並不重要 我們從我們的添加函數返回。)
您可以
:echo list
查看自己的比賽,也可以附加到您的緩衝區與
:$put=list
我希望這可以幫助。一旦你知道如何,它很簡單,但是在那裏有很多需要消化的 。
哦,我差點忘了!您可以將您的匹配添加到剪貼板
:let @+ = join(list, '^@')
然後您的匹配將位於剪貼板中,每個位於單獨的行中。
^@表示NUL字符,並且與< C-V > <Ç-J >生成,這意味着 壓力機控制-V,接着控制-J。 (爲什麼你必須使用^ @這裏是 本身就是一個整體的話題。)
也許你可以找到在以下一些啓示:
:saveas %.tmp
開始在副本上工作
:v//d
:exec '%s/^.\{-\}\(' . @/ . '\).*$/\1/g'
因此,例如做在下面的文本搜索/word\d
:
Tincidunt。 Proin sagittis2。 Curabitur auctor metus非mauris。 Nunc調味品 nisl非augue。 Donec leo urna,dignissim vitae,porttitor ut,iaculis坐 amet,sem。
類aptent taciti sociosqu3廣告litora torquent每conubia諾斯特拉,每 inceptos himenaeos。暫停的潛力。 Quisque augue metus,hendrerit坐在一起,商品,scelerisque ut,ante。 Praesent euismod euismod risus。 Mauris ut metus坐amet mi cursus commodo。 Morbi認爲mauris ac sapien。 Donec justo。 sed congue nunc vel mauris0。 Pellentesque vehicula orci id libero。在hac habitasse platea dictumst。 Nulla sollicitudin,purus1 id elementum dictum,dolor augue hendrerit ante,vel semper metus enim et dolor。 Pellentesque molestie9。
將突出顯示所示的字樣。做
:v//d|exec '%s/^.\{-\}\(' . @/ . '\).*$/\1/g'
結果在以下緩衝液:
sagittis2
sociosqu3
mauris0
purus1
molestie9
追加所有搜索結果以由換行分隔reg X
(大寫):
:g/^/call setreg('X', matchstr(getline('.'), '^\S\+') . "\n")
清除reg x
:
qxq
這個直接回答覆制包含正則表達式的整行。但是在上面給出的鏈接中,有一個名爲CopyMatches的腳本只複製匹配的部分。 – squid 2014-08-22 06:56:24