Vim-1つの新しい行\ nを2つの\ nに置き換える方法


34

vimエディターで、vimコマンドモードを使用して、改行文字(\ n)を2つの改行文字(\ n \ n)に置き換えます。

入力ファイルの内容:

This is my first line.
This is second line.

私が試したコマンド:

:%s/\n/\n\n/g

文字列を不要な文字に置き換えます

This is my first line.^@^@This is second line.^@^@

次に、次のコマンドを試しました

:%s/\n/\r\r/g

正常に動作しています。2番目のコマンドで問題なく動作する理由を説明できますか?




2
サイドノート、/セパレーターとして使用する必要はありません。これは読みやすいです::%s;\n;\n\n;g
DJMcMayhem

1
検索\n、置換\r\r:% s/\n/\r\r/gstackoverflow.com/a/71334/911945
アントンタラセンコ

回答:


47

奇妙なことに\n、vimの置換は改行を意味するのではなく、nullを意味します。ASCIIヌルは^@control@)です。

歴史的に、viは^McontrolM)を改行である改行文字として置き換えます。vimは拡張機能\r(C言語など)を追加^Mしてを\n意味しますが、開発者はテキストを置き換えるとき null を意味することを選択しました。これは、改行を見つける検索での使用と矛盾します。

参考文献:


7

これを試してみてください:%s/$/^V^M/(ここ^VCtrl-V^MあるCtrl-M-あなたが入力したとき^V、それが印刷され^、それ以上のバックスペースをチャー、あなたが入力したときに、その後^Mのようにそれが表示されます^MCtrl + Vキーを標準のttyです... 文字通り、次の文字-コマンドを実行stty -aしますttyの特殊文字を表示します)。


確かに、非常に経験豊富な人は、dos2unixなどをドロップアウトして使用する代わりに、CRLFからのこれまでに必要な変換のためにこれを知っています。Ctrl-Vの使用法は、1日目のviレッスンです。
mckenzm

5

vimメモリ内の\nヌル文字を表すために使用し\0ます。vimハンドルファイルにヌル文字が含まれる方法(viできません)。

使用\nバッファ内の行の唯一の一致端ではなく、式で使用して、文字列で改行。

詳細については、:h NL-used-for-Nullおよび:h CR-used-for-NLを参照してください。


1

Neovim(nvim)およびVimバージョンでテスト済み

NVIM v0.3.0
VIM - Vi IMproved 8.1

改行を削除します。

cell
allele
rs2981578
fgfr2

ここでは、\n改行に一致します(ただし、改行を挿入するにはを使用します\r)。

:'<,'>s/\n/|/g

cell|allele|rs2981578|fgfr2

改行を追加します。

いいえ:

cell|allele|rs2981578|fgfr2

:'<,'>s/\n/|/g

cell^@allele^@rs2981578^@fgfr2

^@はLFの発音区別符号です(改行; http://vimhelp.appspot.com/digraph.txt.html#digraphs-defaultを参照 )

はい:

cell|allele|rs2981578|fgfr2

:'<,'>s/|/\r/g

cell
allele
rs2981578
fgfr2

OPの質問(1つ\nを2つに置き換える方法)に対処するには、\n\n別のものを追加するだけ\rです:

cell
allele
rs2981578
fgfr2

:'<,'>s/\n/\r\r/g

cell

allele

rs2981578

fgfr2

...つまり、元の改行(\n)に一致し、それを2つの改行/キャリッジリターン(\r\r)に置き換えます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.