我正在使用VIM 7.1.314,並想盡快在下面顯示的代碼中抽取名稱(chris, robert, ben)
- 我將如何實現這一目標?請注意名稱始終對齊(不管用戶號碼)。VIM - 最快的方法來打開一個尷尬的文本塊
user 1: chris (05/04/1984)
user 2: robert (11/12/1991)
user 3: ben (5/25/1993)
另請注意,我正在尋找一個解決方案,其中有數百個名稱,因此可擴展性非常重要。
我正在使用VIM 7.1.314,並想盡快在下面顯示的代碼中抽取名稱(chris, robert, ben)
- 我將如何實現這一目標?請注意名稱始終對齊(不管用戶號碼)。VIM - 最快的方法來打開一個尷尬的文本塊
user 1: chris (05/04/1984)
user 2: robert (11/12/1991)
user 3: ben (5/25/1993)
另請注意,我正在尋找一個解決方案,其中有數百個名稱,因此可擴展性非常重要。
一個簡單的方法來做到這一點是掏出一個外部程序來幫助。例如:
:%!awk '{ print $3 }'
將與運行結果替換整個編輯緩衝區是對當前緩衝區的內容awk
命令。然後,您可以將結果複製到另一個文件或其他文件中,並且u
可以輕鬆地將原始緩衝區恢復到之前的狀態。
由於您的名字長度不會超過16個字符,請使用正則表達式搜索並替換以在每個名稱後面添加16個空格,然後使用塊可視模式執行復制。首先,(在命令行上):
:%s/: [^ ]*/& /
該空白區域是16個空格。然後,轉到名字的開頭,然後按Control-V
,然後向右移15個字符到名單列表的最後一行,然後按Y
進行復制,然後到目標緩衝區,然後按P
進行粘貼。
您可以使用一個名爲Tabularize的插件,您可以從https://github.com/godlygeek/tabular獲得該插件。在你列出的情況下,你可以做
:Tabularize /(.*
,它會改變你的文本文件,看起來像這樣:
user 1: chris (05/04/1984)
user 2: robert (11/12/1991)
user 3: ben (5/25/1993)
然後,你可以簡單地使用視覺塊拉文本。這是一個非常棒的插件,可以節省大量的時間。
這裏是一個純viml解決方案,離開原來的緩衝區不變:
:let names= []
:g/^user \d/let names+= matchstr(getline('.'), 'user \d\+:\s*\zs\S\+')
:new
:put=names
我會用宏。
qeq
(以清除 「E」 寄存器)qa03w"Eywjq
(註冊宏唬弄名)[email protected]
(重複宏大量的時間)然後你的名字在「e」寄存器中。輸入「的EP,以查看它們
!注意:
yw
是不正確的,也許YT(或什麼的,這取決於名稱:set lazyredraw
可以用微距性能方面提供幫助!
你想對名稱做什麼?取決於你想做什麼,像'cut`或者`sed`這樣的東西可能會更好。 – 2011-02-07 02:12:50
將它們粘貼到另一個vim編輯器中作爲哈希鍵:) - 也是名稱總是字母數字且不含空格 – 2011-02-07 02:17:59
你知道最長名稱的長度(或至少是一個限制)嗎? – 2011-02-07 02:20:13