Vimの2行ごとに参加する方法は?


28

多くの行(〜1000)に参加したいのですが、次の行とは奇妙なことだけです。手でできる

Jj

500回とそれをしました。しかし、1つのコマンドでこれら2つのステートメントを500回実行するにはどうすればよいですか?タイピング

500Jj

次の500行に参加します、その後 1行下に移動。

例:

私が持っています:

a
b
c
d
e
f
g
h

が欲しいです:

a b
c d
e f
g h

編集:マッピングを試みました:

:map X Jj
500X

しかし、どうやらマッピングのドキュメントをもう一度読む必要があります。動作しません。

回答:


30

私はこれをします:

  1. マクロ「q」の記録を開始します。 qqJjq

  2. マクロ 'q'を500回再生します。 500@q

(実際には「q」というマクロではなく、「q」という名前のレジスタです。1のようにレジスタを対話式に埋める代わりに、:let @q = "Jj"2を実行してから実行することもできます。)


かっこいい、マクロを覚えてくれてありがとう!
ボルデウィン

:%normal Jは非常に迅速かつ簡単でした(下の2番目のソリューションを参照)... 50,000行以上で実行するこのマクロソリューションと比較して
-ihightower

@ihightowerですから、その答えも支持しました。6年前:)
アキラ

@akiraあなたのマクロは、今日私が別の目的のためにこのマクロソリューションだけを必要としていたので、私の一日を節約しました。
ihightower

24

ファイルのすべての行でこれを行うには:

:%normal J

または、より短い:

:%norm J

ファイルの一部だけでこれを行うには、行を選択するVか、他の方法で範囲を取得します。

:'<,'>global/^/normal J

または、より短い:

:'<,'>g/^/norm J

ケビンは、1つのファイルだけでなく、すべてのファイルに対して2つのコマンドを実行しようとしています。
JNK

1
:gOPが必要とする回答の使用。
リュックエルミット

2
これは実際に2行ごとに参加します。それを試してみてください!
ケビンパンコ

globalトリックをありがとう。ただし、私の場合、マクロの記録は簡単で高速でした。
ボルデウィン

2
推測に過ぎません-各行でコマンドを順番に実行し、1行目を実行した後、2行目がなくなって(1行目と結合されているため)、3行目に移動するように強制されます。
ケビンパンコ

9

これはどうですか:

:g/$/j  

または

:g/$/j!  

そして3行ごとにグループ化します

:g/$/j3 

1
これは、Miroの非常に優れたソリューションです。奇妙なことに、j3で3列を作成する代わりにSVR4.0 vi(Solarisなど)で末尾の数字を使用すると、4になるため、これを標準viでも使用できるという点でさらに優れています。 3行ごとにグループ化するためのj2)
JohnGH


-1

私はVimのユーザーではありませんが、オンラインドキュメントを確認すると次のようになります

500(Jj) 

括弧内の項目を1つの単位として解析するため、動作する可能性があります。


うーん、試してくれてありがとう、しかし私のバージョンではVimは括弧を無視します。この構文を見つけたリンクを教えてください。
ボルデウィン

1
vimdoc.sourceforge.net/htmldoc/syntax.html-申し訳ありませんが助けにはなりませんでした!
JNK

実際にこのリンクをチェックしてください:vim.org/scripts/script.php?script_id=2136 それがあなたが望んでいることをするかどうか確かめてください。
JNK
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.