2009-03-07 4 views
5

検索結果の一致を1つのレジスタに連結することができるかどうかは誰にも分かりますか?一致するテキストを登録する

aaa :xxx 123 
bb :y 8 
ccccc :zzzzz 1923 

は、今私が欲しいもので始まる列をコピーすることである「:」どこか例えば、私は、次の内容のファイルを持っています。不幸にも、最初の列は幅が固定されていないため、ビジュアルブロックモードは使用できません。 私は2番目の列(:\ w +)を検索し、マッチェをレジスタに格納できると考えました。

答えて

8

別の方法::h quote_alphaパー

:g/:/norm f:"Aye 

あなたは大文字のレジスタ名を使用している場合、それは追加ではなく、レジスタの内容を置き換えます。これを実行すると、レジスタ"aの内容を確認した場合、あなたは(あなたがcpoptionsセットを持っているかに応じて、おそらく改行付き。)

:xxx:y:zzzzz 

が表示されます

+0

本当にかわいいです。 –

0

まず、ファイルの解析から始めます。この使用TextFieldReaderではなく、独自のCSVパーサを発明するために:

using Microsoft.VisualBasic.FileIO; 

TextFieldParser reader = new TextFieldReader("C:\MyFile.txt"); 
reader.Delimiters = new string[] { " " }; 
string[] currentRow = null; 
while (!reader.EndOfData) 
{ 
    try 
    { 
     currentRow = reader.ReadFields(); 
     foreach(string field in currentRow) 
     { 
      //save this field... 
     } 
    } 
    catch (MalformedLineException ex) 
    { 
     //handle exception the way you want 
    } 
} 

私は私が私が興味を持ってちょうど列を抽出しますデータを持っていたら、あなたは、各行が同じパターンをあなたができる持っていると仮定することができます。最初の行を解析する際に右の列を探し出し、残りの行を解析する際には、適切な列を保存するだけで済みます。ファイル全体をメモリに保存する必要はありません。

編集:私は大変申し訳ありませんが、私はC#プログラミングに関する質問があったと思いました。私の間違い - すみません。

+3

世界はマイクロの$しばしば技術では終わりません;-) ;-) ;-) – kyku

+0

@MykolaGolubyev間違っていない:単純に答えではない。 :) –

2

あなたはマクロ作ることができます:

QAを(マクロを作成し、レジスタAに格納します)。

「ライ麦(単語の末尾とRを登録するためにそれを追加するヤンク - 資本手段が付加、小文字上書き。)

N(次のマッチ)

Q(エンド記録)

場合あなたが開始するときにレジスタrが空であることを確認してくださいそこに10試合は、ある @ 10を行う。

+0

追加するのを忘れた/:\ w +アルゴリズムが始まる。 –

1

あなたの.vimrcにこれを追加するか、次の内容でVimのプラグインフォルダ内のファイルを作成します。
.vimrcまたはpluginでこの行を実行した後、次のコマンドを使用します。CopyTextAfterColonコマンドを使用して、必要なテキストをシステムバッファから挿入します。

function! s:copy_after_colon() 
    let values = '' 

    let pattern = '^.*:\(\w\+\).*$' 

    for line_number in range(1, line('$')) 
     let line = getline(line_number) 
     if line =~ pattern 
      let value = substitute(line, pattern, '\1', '') 
      let values .= value."\n" 
     endif 
    endfor 

    let @* = values 
endfunction 

command! -nargs=0 CopyTextAfterColon call <SID>copy_after_colon() 

これは後でさまざまな目的で使用できます。