web-dev-qa-db-ja.com

Vimの改行を削除する

次の行が現在の行に追加されるように、Vimの行末で改行を削除する方法はありますか?

例えば:

Evaluator<T>():
    _bestPos(){
}

行をコピーして前の行に貼り付けることなく、これを1行にまとめたいと思います。カーソルを各行の終わりに置いてキーを押すと、カーソルがある行と同じ行に次の行をジャンプできるはずです。

最終結果:

Evaluator<T>(): _bestPos(){ }

これはVimで可能ですか?

245
derekerdmann

最初の行にいる場合は、(大文字)を押す J 改行を削除して、その行と次の行を結合します。これをカウントと組み合わせることもできます。そのため3Jを押すと3行すべてが結合されます。

534
Xhantar

もちろんです。 Vimは\ n文字を改行として認識しますので、あなたはただ検索して置き換えることができます。コマンドモードでは:

:%s/\n/
73
TinkerTank

通常モードで上の行にいる間に、ヒット Shift+j

カウントを追加することもできますので、一番上の行の3Jはそれらすべての行を結合します。

48
Alligator

Jは、余分な先行スペース(ある場合)を削除し、行を単一のスペースで結合します。 (いくつかの例外を除いて:/[.!?]$/の後には、2つのスペースを挿入することができます。/^\s*)/の前には、スペースは挿入されません。)

そのような振る舞いを望まないのであれば、gJは単に改行を削除し、スペースを使って賢いことはしません。

32
ephemient

他の回答が述べたように、(大文字)Jおよび\nの検索+置換は、一般に改行文字を取り除き、行を連結するために使用できます。

しかし、最後の改行文字最後の行のを取り除くためには、Vimでこれを行う必要があります。

:set noendofline binary
:w
23
Nestor Waldyd

以下のすべては、カーソルが最初の行にあると仮定しています。

通常のマッピングを使う:

3Shift+J

Exコマンドを使う:

:,+2j

これはの略語です

:.,.+2 join

次のショートカットでも入力できます。

3:j

さらに短いExコマンド:

:j3
10
kzh
set backspace=indent,eol,start

あなたの.vimrcに挿入モードで\n(newline)のbackspacedeleteを使うことを可能にします。

set whichwrap+=<,>,h,l,[,]

(col 1の場合)Xを使用して、通常モードで前のLFを削除できます。

4
laktak

それはおそらくあなたの設定に依存しますが、私は通常A<delete>でこれを行います

Aは行の末尾に追加されます。おそらくnocompatibleモードが必要です:)

2
Wolph
<CURSOR>Evaluator<T>():
    _bestPos(){
}

最初の行にカーソル

さて、ノーマルモードでは

shift+v
2j
shift+j

または

V2jJ

:通常V2jJ

2
Ivan Lopes

改行を削除したい行でA(最後に追加して挿入モードにします)を押してからdeleteを押します。

1
David Watson

他のシェルツールを使用しても構わない場合は、

tr -d "\n" < file >t && mv -f t file

sed -i.bak -e :a -e 'N;s/\n//;ba' file

awk '{printf "%s",$0 }' file >t && mv -f t file
1
ghostdog74

問題は、目に見えない倍数のchar 0A(\ n)が累積することです。 100行目から最後まで整理したい場合は、次のようにします。

ESCと:(ターミナルコマンダー)を入力

:110,$s/^\n//

Vimスクリプトでは:

execute '110,$s/^\n//'

説明:110から終わりまで新しい行で始まる(ブランクの)行を探し、それらを削除します

1
Sergio Abreu