次の行が現在の行に追加されるように、Vimの行末で改行を削除する方法はありますか?
例えば:
Evaluator<T>():
_bestPos(){
}
行をコピーして前の行に貼り付けることなく、これを1行にまとめたいと思います。カーソルを各行の終わりに置いてキーを押すと、カーソルがある行と同じ行に次の行をジャンプできるはずです。
最終結果:
Evaluator<T>(): _bestPos(){ }
これはVimで可能ですか?
最初の行にいる場合は、(大文字)を押す J 改行を削除して、その行と次の行を結合します。これをカウントと組み合わせることもできます。そのため3J
を押すと3行すべてが結合されます。
もちろんです。 Vimは\ n文字を改行として認識しますので、あなたはただ検索して置き換えることができます。コマンドモードでは:
:%s/\n/
通常モードで上の行にいる間に、ヒット Shift+j。
カウントを追加することもできますので、一番上の行の3J
はそれらすべての行を結合します。
J
は、余分な先行スペース(ある場合)を削除し、行を単一のスペースで結合します。 (いくつかの例外を除いて:/[.!?]$/
の後には、2つのスペースを挿入することができます。/^\s*)/
の前には、スペースは挿入されません。)
そのような振る舞いを望まないのであれば、gJ
は単に改行を削除し、スペースを使って賢いことはしません。
他の回答が述べたように、(大文字)J
および\n
の検索+置換は、一般に改行文字を取り除き、行を連結するために使用できます。
しかし、最後の改行文字最後の行のを取り除くためには、Vimでこれを行う必要があります。
:set noendofline binary
:w
以下のすべては、カーソルが最初の行にあると仮定しています。
通常のマッピングを使う:
3Shift+J
Exコマンドを使う:
:,+2j
これはの略語です
:.,.+2 join
次のショートカットでも入力できます。
3:j
さらに短いExコマンド:
:j3
set backspace=indent,eol,start
あなたの.vimrcに挿入モードで\n
(newline)のbackspace
とdelete
を使うことを可能にします。
set whichwrap+=<,>,h,l,[,]
(col 1の場合)X
を使用して、通常モードで前のLFを削除できます。
それはおそらくあなたの設定に依存しますが、私は通常A<delete>
でこれを行います
A
は行の末尾に追加されます。おそらくnocompatible
モードが必要です:)
<CURSOR>Evaluator<T>():
_bestPos(){
}
最初の行にカーソル
さて、ノーマルモードでは
shift+v
2j
shift+j
または
V2jJ
:通常V2jJ
改行を削除したい行でA(最後に追加して挿入モードにします)を押してからdeleteを押します。
他のシェルツールを使用しても構わない場合は、
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
問題は、目に見えない倍数のchar 0A(\ n)が累積することです。 100行目から最後まで整理したい場合は、次のようにします。
ESCと:(ターミナルコマンダー)を入力
:110,$s/^\n//
Vimスクリプトでは:
execute '110,$s/^\n//'
説明:110から終わりまで新しい行で始まる(ブランクの)行を探し、それらを削除します