vimで2行を同時に一致させる方法

vimで2行を同時に一致させる方法

タブで区切られた形式のレコードを2行含むファイルがありますが、vimエディタのパターンマッチングを使用して、タブで区切られた値を持つレコードを1行にソートしたいと思います。

前任者。

Abc     PQR     XYZ     NMW
    XYX     PQR     LMW
PLX     PXQ     LPN     PWF
    XYQ     PLP     PMQ    LWP

レコードの最初の行にレコードの2番目の行を追加したいと思います。私が望む出力形式は次のとおりです。

Abc     PQR     XYZ     NMW    XYX     PQR     LMW
PLX     PXQ     LPN     PWF    XYQ     PLP     PMQ     LWP

私の問題を解決するために、次のコマンドを試しました。

:%s/\n(\w\+.*)/\t\1/cgi

これにより、データの各行が最初の行を除いて前のタブ文字に置き換えられます。

この問題を解決するために、vimパターンマッチングと置換をどのように使用できますか?

答え1

どうですか?

:%s/\n\s\+/\t/gc

これにより、空白が続く改行文字が見つかり、[すべて]タブに置き換えて行を結合します。

答え2

最初の行は常に文字で始まり、2番目の行は常にタブで始まることがわかっている場合、最も簡単な方法はおそらく:g(正規表現に一致するすべての行でexコマンドを実行する)とj!(スペースを削除せずに結合)を使用するです。 )。help :gそしてを見てくださいhelp :j。これを組み合わせれば得られます。

:%g/^\w/j!

答え3

以下を使用して簡単に実行できますpaste

paste -sd'\0\n' file

存在するvim

:%!paste -sd'\0\n' -

関連情報