2230

,現在のファイルのそれぞれを新しい行に置き換えようとしています:

:%s/,/\n/g 

^@ただし、実際の改行ではなく、のように見えるものが挿入されます。ファイルはDOSモードなどではありません。

私は何をすべきか?

私のように興味がある場合は、質問を確認してください同じように。

4

11 に答える 11

2895

\rの代わりに使用し\nます。

で置き換えると\n、テキストにヌル文字が挿入されます。改行を取得するには、 を使用します\r。ただし、改行を検索するときは\n、引き続き を使用します。この非対称性は、とがわずかに異なること\nを行うという事実によるものです。\r

\n行末 (改行) に\r一致しますが、キャリッジ リターンに一致します。一方、 in \nreplacements はヌル文字を\r挿入しますが、 は改行を挿入します (より正確には、 input として扱われますCR)。これを説明するための小さな非対話型の例を次に示します。これは、Vim コマンド ライン機能を使用したものです (つまり、以下をコピーしてターミナルに貼り付けて実行できます)。xxd結果のファイルの 16 進ダンプを示します。

echo bar > test
(echo 'Before:'; xxd test) > output.txt
vim test '+s/b/\n/' '+s/a/\r/' +wq
(echo 'After:'; xxd test) >> output.txt
more output.txt
Before:
0000000: 6261 720a                                bar.
After:
0000000: 000a 720a                                ..r.

つまり、\nバイト 0x00 をテキストに挿入しました。\rバイト 0x0a を挿入しました。

于 2008-09-16T11:21:03.300 に答える
223

トリックは次のとおりです。

最初に、Vi(m) セッションを特殊文字 (改行など) とのパターン マッチングを許可するように設定します。おそらく、次の行を .vimrc または .exrc ファイルに追加する価値があります。

:set magic

次に、次のことを行います。

:s/,/,^M/g

^M文字を取得するには、 Ctrl+Vを入力して を押しEnterます。Windows では、Ctrl+ Q, Enter. これらを思い出す唯一の方法は、それらがどれほど意味をなさないかを思い出すことです。

A:改行を表すために使用する最悪の制御文字は何ですか?

B: (通常は「Quit」を意味するため) または、誤って+を入力してエディターを強制終了しやすいためです。qvCtrlC

A:そうしてください。

于 2008-09-25T23:40:19.023 に答える
115

構文s/foo/bar\r\nは、コンテキストに応じて異なる意味を持ちます。


短い:

の場合foo:

\r== 「改行」 ( CR/ ^M) == Linux/Mac およびWindows では
\n「改行」 ( ) に一致します。LFCRLF

の場合bar:

\r== LFLinux/Mac では生成、 CRLFWindows では
\n== "null byte" ( NUL/ ^@)

最初に Windows 環境で作成され、アップロードされたファイル (つまり、Web サーバー上) を Linux で編集する場合 (つまり、FTP/SFTP) - ^Mvim で表示されるすべての は、CRLinux でのみ使用されるため変換されない です。LFは改行を表します。


より長い (ASCII 番号を使用):

NUL== 0x00 == 0 == Ctrl+ @== ^@vim で表示
LF== 0x0A == 10 == Ctrl+ J
CR== 0x0D == 13 == Ctrl+ M== ^Mvim で表示

以下は、ASCII 制御文字のリストです。Ctrl+ VCtrl+を介して Vim に挿入します---key---

Bash またはその他の Unix/Linux シェルでは、Ctrl+と入力するだけ---key---です。

Bash でCtrl+を試してください。Linux システムでは行区切りに改行が使用されますが、シェルは意味を理解するため、 をM押すのと同じです。Enter

リテラルを bash に挿入するには、先頭にCtrl+Vを付けることもできます。

Bashで試してください:

echo ^[[33;1mcolored.^[[0mnot colored.

これはANSI エスケープ シーケンスを使用します。^[2をCtrl+ V, で挿入しEscます。

Ctrl+ VCtrl+ M、を試すこともEnterできます。これにより、次のようになります。

bash: $'\r': command not found

上から覚えてい\rますか?:>

このASCII 制御文字リストは、完全なASCII シンボル テーブルCtrlとは異なります。キー (笑)を介してコンソール/疑似端末/Vim に挿入される制御文字がそこにあるという点です。

C やその他のほとんどの言語では、通常、これらの「文字」を表すために 8 進コードを使用します。

これらすべてがどこから来たのかを本当に知りたい場合: TTY の謎を解き明かす. これは、このトピックについて遭遇する最良のリンクですが、注意してください: ドラゴンがいます.


TL;DR

通常foo= \n、およびbar= \r

于 2013-09-23T14:00:45.340 に答える
63

以下を使用する必要があります。

:%s/,/^M/g

文字を取得するには、 +に続いて^Mを押します。CtrlvEnter

于 2008-09-16T11:30:32.093 に答える
44

\rあなたのためにここで仕事をすることができます。

于 2008-09-16T11:21:34.640 に答える
25

Windows 上の Vim では、Ctrl+Qの代わりにCtrl+を使用しますV

于 2008-09-16T11:45:40.760 に答える
18

これが私の考える最良の答えですが、表にするともっと良かったでしょう。

Vim の \ra 改行はなぜですか?

したがって、言い換えると:

正規表現の置換で改行\r(ASCII 、Unix の改行)を使用する必要がありますが、これは置換に特有のものです。0x0A\n\r

これは、Vim\nが代わりに NIL 文字 (ASCII 0x00) を意味するために使用したためです。代わりにNIL があり、改行の通常の使用のため\0に解放されていると予想していたかもしれませんが、正規表現の置換ではすでに意味があるため、にシフトされました。したがって、さらに改行を からにシフトします(これは、正規表現パターンではキャリッジリターン文字 ASCIIです)。\n\0\n\n\r0x0D

キャラクター | アスキーコード | C表現 | 正規表現一致 | 正規表現の置き換え
--------------+------------+----------------------- -------+-------------+------------------------
なし | 0x00 | \0 | \0 | \n
改行 (Unix 改行) | 0x0a | \n | \n | \r
キャリッジリターン | 0x0d | \r | \r | <不明>

NB: ^M( Linux ではCtrl+ V Ctrl+ M) は、他の人がアドバイスしているように、キャリッジ リターンではなく、正規表現の置換で使用すると改行を挿入します (試してみました)。

また、Vim はファイル形式の設定に基づいてファイルに保存するときに改行文字を変換するため、問題が混乱する可能性があることに注意してください。

于 2015-04-08T12:15:22.903 に答える
11

Eclipseから、^M文字を行に埋め込むことができ、それらを改行に変換したいと考えています。

:s/\r/\r/g
于 2011-09-06T17:53:05.970 に答える
9

しかし、代用する必要がある場合は、次のことが機能します。

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

上記では、次のすべての行が次の行に置き換えられ、さらに|-新しい行に置き換えられます。これは wiki テーブルで使用されます。

テキストが次のような場合:

line1
line2
line3

に変更されます

line1
|-
line2
|-
line3
于 2012-02-07T08:09:42.303 に答える
5

これが私のために働いた答えです。この男 より:

----quoting vi エディターを使用して、replace に改行文字を挿入します。


私がしなければならない他の何かが思い出せず、調べなければなりません。

vi で、検索と置換に改行文字を挿入するには、次の手順を実行します。

:%s/look_for/replace_with^M/g

上記のコマンドは、「look_for」のすべてのインスタンスを「replace_with\n」に置き換えます (\n は改行を意味します)。

「^M」を取得するには、キーの組み合わせCtrl+Vを入力し、その後 (すべてのキーを放して) キーを押しEnterます。


于 2012-02-03T19:31:15.163 に答える
5

ファイル全体に対してそれを行う必要がある場合は、コマンドラインから試すことも提案されました。

sed 's/\\n/\n/g' file > newfile
于 2012-02-09T23:01:29.297 に答える