2011-02-07 10 views
3

私は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) 

また、何百もの名前があるスケーラビリティが重要なソリューションを探しています。

+3

名前で何をしたいですか?あなたがしたいことに応じて、「カット」や「セード」のようなものがうまくいくかもしれません。 –

+0

ハッシュのキーとして別のvimエディタに貼り付けてください:) - 名前は常に空白のない英数字です –

+0

最長の名前の長さを知っていますか? –

答えて

8

これを行う簡単な方法は、外部プログラムをシェルすることです。例:現在のバッファの内容にそのawkコマンドの実行結果であなたの全体の編集バッファを交換します

:%!awk '{ print $3 }' 

。その結果を別のファイルなどにコピーすることができます。uは元のバッファを簡単に元の状態に戻します。

+0

こんにちは、応答のおかげで、これは私の最初の質問によく答えますが、より具体的にすべきでした - 項目は他のテキストに埋め込まれています。私はちょうど同じ列に固定されている単語の列をヤンクするための速い方法を探していますが、異なる長さを持っています –

+0

更新:私は愚かですこれは本当に良いです、thx –

3

あなたの名前が16文字より長くならないことを考えれば、正規表現検索を使用して置き換えて、各名前の後に16個のスペースを追加してからブロックビジュアルモードを使用してコピーを行います。まず、do(コマンドラインで):

:%s/: [^ ]*/&    /

空白の領域は16スペースです。次に、最初の名前の先頭に移動してControl-Vを押し、15文字を名前のリストの最後と最後に移動し、Yを押してコピーし、宛先バッファにPを押して貼り付けます。

+0

ありがとう、これは素晴らしい - 私は本当に望んでいた私はブロックビジュアルのような何かを行うことができます各名前の最初の文字を選択してすべての単語をコピーするywを行う:) –

1

https://github.com/godlygeek/tabularから入手できるTabularizeというプラグインを使用できます。

user 1: chris (05/04/1984) 
user 2: robert (11/12/1991) 
user 3: ben (5/25/1993) 

その後、あなたは、単にテキストを引っ張って、視覚ブロックを使用することができます場合は、あなたが

:Tabularize /(.* 

を行うことができ、それはこのように見えるようにテキストファイルが変更されます記載されています。信じられないほどの時間を節約する素晴らしいプラグインです。ここで

0

は変わらず、元のバッファを残し純粋VIMLソリューションです:

:let names= [] 
:g/^user \d/let names+= matchstr(getline('.'), 'user \d\+:\s*\zs\S\+') 
:new 
:put=names 
0

私はマクロを使用します。

  1. qeq
  2. qa03w"Eywjq
  3. [email protected](マクロの時間の多くを繰り返す)

そして(名前をヤンクマクロを登録する)( "E" レジスタをクリアします)あなたの名前は "e"レジスタにあります。 「それらを表示するために、EPを入力

注:!。

  • 多分ywが名前に応じて、多分YT(か何か正しくない
  • :set lazyredrawすることは、マクロのパフォーマンスを支援することができます!
関連する問題