viで2つの行を結合するにはどうすればよいですか?


169

以下のようなテキストファイルに2行あります。

S<Switch_ID>_F<File type>
_ID<ID number>_T<date+time>_O<Original File name>.DAT

以下のようにviに2行追加します。

S<Switch_ID>_F<File type>_ID<ID number>_T<date+time>_O<Original File name>.DAT

2行目が削除され、2行目の内容が1行目に追加されました。

viでコマンドモードを使用してどうすればよいですか?

回答:


310

Shift+ Jは現在の行から行変更文字を削除するため、行の任意の場所で「J」を押すと、現在の行と次の行を好きなように組み合わせることができます。


9
大文字のJ

4
それは大文字のJであり、小文字のJではありませんでした。したがって、Shift-Jです。
ジョナサンレフラー、

28
「現在の行から行変更文字を削除する」は、Jが何を行っているかを説明するかなり厄介な方法であり、実際には正しくありません。Jはこの行を次の行に「結合」します。その過程で改行を削除しますが、他の方法で空白を操作します。
ローレンスゴンサルベス

5
はは。GJin vimは最後の行に移動してから次の行に結合しようとしますが、結合コマンドだけでは意味がありません。ええ、私はこれが面白いと思いました:-)
Alok Singhal

2
このエディターを使用して2つの行を結合するためにStackOverflowに行く必要があったことはまだわかりません!
Manitra Andriamitondra 2013

59

ViまたはVim?

とにかく、次のコマンドはVimの「非互換」モードで機能します。つまり、ほぼ純粋なviだと思います。

:join!

通常のコマンドを使用して実行する場合

gJ

'gJ'を使用すると、空白を追加または削除せずに、そのまま行を結合します。

S<Switch_ID>_F<File type>
_ID<ID number>_T<date+time>_O<Original File name>.DAT

結果:

S<Switch_ID>_F<File type>_ID<ID number>_T<date+time>_O<Original File name>.DAT

「J」コマンドを使用すると、次のようになります。

S<Switch_ID>_F<File type> _ID<ID number>_T<date+time>_O<Original File name>.DAT

type>との間のスペースに注意してください_ID


2
g/pattern/joinVIM で機能するが機能g/pattern/Jしないことを指摘したいだけです。一部の将来の人々を助けるかもしれません。
jisaacstone 2013年

パターンを使用した結合が好きですが、空白で2行を結合します。とにかく、空白のないパターンで2行を結合しますか?
David.Chu.ca、2015

g /パターン/参加!そうするようです。
fortboise

1
もっと複雑にできますか?:-)
ヨハネスオーバーマン2018年

22

これはそれを行うはずです:

J


6
'J'は行を結合するときに余分なスペースを与えます。
Maxim Kim、

3
@MaximKim:そして、これが理由です。:h Jその機能を無効にする方法を教えてくれることに注意してください。
ereOn、2015年

2
gJ行を結合するときにvimがスペースを追加したくない場合に使用します
qwertzguy

17

viではJShift+ですJ:join、たいていの場合は必要な処理を実行する必要があります。空白を調整することに注意してください。特に、多くの場合、2つの結合された行の間にスペースができます。2番目の行がインデントされている場合、そのインデントは結合前に削除されます。

Vim では、gJG、次にShift+ J)またはも使用できます:join!。これらは、空白の調整を行わずに行を結合します。

Vimでは、詳細については:help Jを参照してください。


使用して1つの警告gJとはJチャン接合点にカーソルが、両方のことである:join!:joinいけません。
SergioAraujo 2017

4

\n」を「」に置き換えてください。

ドキュメントのすべての行のvi / Vimで:

%s/>\n_/>_/g

すべての交換を確認する場合:

%s/>\n_/>_/gc


1

最初の行でShift+ 4( "$")を押し、次に Shift+ j( "J")を押します。

ヘルプが必要な場合は、viに移動してを押しF1ます。


3
$は行の終わりに移動しますが、Jの場合は必要ありません

1
Jが行に参加するために、行の最後にいる必要はありません。
ジョナサンレフラー、

1
$を押す必要はありません。
ローレンスゴンサルベス

1
@laurence .pressing $は、カーソルが新しいラインチャーターのすぐ横に配置されることを保証します。これは必須です。
ビジェイ


1

カーソルをその行に置かずに2つの行を結合する別の方法は、次のとおりです。

:6,6s#\n##

ここで6は、別の回線が参加する回線番号です。行番号を表示するには、を使用します:set nu

次の行を結合する必要がある場所にカーソルがある場合、次のようになります。

:s#\n##

どちらの場合も、1行に1つしか存在しないので、のgよう:s#\n##gにする必要はありません\n


Shift+V最後を除いて、結合するすべての行を選択する方が簡単です。:'<,'>s/\n/, /この例では、各行の最後にコンマとスペースを入れて行を結合します。何かを選択:して通常モードで'<,'>入力すると、コマンドラインにが自動的に表示されることに注意してください。
Evgeni Sergeev 2016年

優先デリミタを使用した選択された複数行結合に適しています。1つのタイプミスを見つけました...通常モードまたはビジュアルモードですか?
ブーサン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.