2012-03-15 20 views
4

私はwikiファイルを編集中です。私は2つの列の間に新しい列を追加したいと思います。vimの行のn番目の一致を検索する

| *No* | *Issue* | *File* | *Status* | 
| 1 | blah | foo | open | 
| 2 | blah1 | foo1 | close | 

第3列目と第4列目の間に、「|」の4番目の一致を検索できたら、私はそれを "| |"に置き換えることができます。 vimを使ってどのようにすることができますか?

:%!sed 's/|/| |/3' 
+0

マクロ( 'q')を使ってそれを行う方法はありますか? – Kent

答えて

0

ようなものになるだろう。 (ESCは、Escキーを押すことを意味します)コマンドモードでqq3f|a|<ESC>qを入力することにより、レジスタqに、マクロの記録についてどのように

:%s/\%(.\{-}|\)\{4}\zs/ |/ 
1

は、次の置換コマンドを考えてみましょう:

最終的な結果は、あなたがフィルタとしてvimsedを呼び出すことができます

| *No* | *Issue* | *File* | | *Status* | 
| 1 | blah | foo | | open | 
| 2 | blah1 | foo1 | | close | 
3

。今度はこのマクロを:%[email protected]で各行に適用することができます。

追加ボーナス:あなたが列3のように、最初の列を複製例えば、より複雑なアクションを追加することができ、このパターンで

(カーソルが最初の列にある場合):

qqf yf|;;;p0q 

ああ、あなたの質問に対する答え:の行での4番目の出現は、3f|によって行われます(カーソルが0の位置にあり、例のように|の文字にある場合)。意味

+0

'0、$'の代わりに '%'を使うことができます。非常に良い。 –

+0

ああ、右固定。 – hochl

0
:%s/\(|[^|]*\)\{3\}/&|/

:各ライン(%)に、で始まる文字列の3つの出現(\{3\})を見つけます|それに続く任意の数の非| ([^|]*)、それ自体を(&)に置き換え、その後に|と置き換えます。

関連する問題