Vimの改行コマンドと改行コードの操作
投稿日:2022年4月14日 更新日:
テキストエディターVimでも、挿入モードに入ってEnterキーを押せば改行され、BackSpaceキーを押せば改行を削除できます。
しかしノーマルモードでカーソル操作を行っているときにも改行の挿入・消去をしたいときがあるかと思います。
そんなとき使えるコマンドがあります。
また異なるOS間でファイルの受け渡しをしたときにみられることがある、謎の記号「^M」(改行コード)の修正方法もメモしておきます。
改行コマンド(ノーマルモード)
改行の挿入
操作 | コマンド |
---|---|
カーソル下に新規の行を挿入 | o <Esc> |
カーソル上に新規の行を挿入 | O <Esc> |
ノーマルモードのときにo
またはO
を押すと、カーソルの下または上に新しい行を作って挿入モードに移行します。
そこからEscキーでノーマルモードに戻ることで、改行を行うという方法になります。
残念ながらキー1つで改行を挿入するコマンドは存在しないため、
どうしてもほしい場合はキーマップを変更するしかありません。
またコマンドモードの置換コマンドを使った改行方法もあり、
そちらでは特定の文字を改行コードに置き換えることができます(後述)。
改行の消去(行の連結)
操作 | コマンド |
---|---|
下の行と連結 (間にスペースあり) | J |
下の行と連結 (間にスペースなし) | gJ |
ノーマルモードで J
(Shift-j
)を押すことでカーソル行とその下の行を連結させ、改行を消去できます。
このとき、行の連結した位置にスペースが入りますが、
J
の前にg
を入力しておくとスペースが入らなくなります。
コマンドモードを使って、ファイル内すべての改行を消去することもできます(後述)。
改行コードの制御(コマンドモード)
コマンドモードの置換コマンドで改行を意味する記号(改行コード)を挿入、消去することでも、改行の制御を行うことができます。
またOSによって改行コードが異なることから生じる、謎の記号も同様のコマンドで修正可能です。
改行コードの挿入・消去
下記は、ファイル全体の*{テキスト}*の後に改行を挿入するコマンドと
ファイル全体の改行を削除するコマンドになります。
操作 | コマンド |
---|---|
挿入 | :%s/ {テキスト}/ {テキスト}\r/g <Enter> |
消去 | :%s/\n//g <Enter> |
置換コマンドを使って、任意の {テキスト} の前後に改行コードを入れることで改行の挿入が、
また改行コードを空文字に置き換えることで改行の消去が行えます。
置換コマンドは
:%s/{置換前}/{置換後}/g<Enter>
で実行でき、
{置換前} に改行コードを入れるときは \n を、
{置換後} に改行コードを入れるときは \r を入れます
(¥ と \ は同じ意味です)。
なぜ置換前後で改行コードの文字が変わるのかはよくわかりません。
もっと詳しい置換コマンドの使い方は下記に書きました。
>> Vimでサクッと置換する方法と置換コマンドの構成
OS毎の改行コード
OS | 改行コード | 正規表現 |
---|---|---|
Unix系システム(Linux)、MacOS | LF (Line Feed) | \n |
MacOS | CR (Carriage Return) | \n |
Windows | CR + LF | \r\n |
OS毎に改行コードが異なっています[1]。
これが原因で、OS間でファイルのやり取りを行うときに文字化けのようなことが起こることもあります。
修正する方法は下記の通りです。
改行コードの修正・置換
Windowsで作成したファイルをLinuxで編集すると「^M」と表示されることがあります。
これは改行コードCR+LFの中のLFのみが改行コードとして認識され、もう一方のCRが ^M と表現されていることが原因です。
修正するにはCRを置換コマンドで消去し、LRのみにします。
:%s/\r//g<Enter>
\rがCR (^M)を意味しています。
まとめ
- ノーマルモードのとき
- 改行の挿入:
o
<Esc>,O
<Esc> - 改行の消去:
J
,gJ
- 改行の挿入:
- コマンドモードのとき
- 改行の挿入:
:%s/
{テキスト}/
{テキスト}\r/g
<Enter> - 改行の消去:
:%s/\n//g
<Enter> - 改行コードの文字化け ^M の修正:
:%s/\r//g
<Enter>
- 改行の挿入:
今回コマンドモードのコマンドとして紹介した置換コマンドでは、正規表現を使用して柔軟な文字指定ができます。
下記記事で置換コマンドについて取り扱っています。
>> Vimでサクッと置換する方法と置換コマンドの構成
下記ではVimコマンドをまとめましたので、一覧を見たい方はどうぞ。
>>【動画あり】Vimのコマンドを一覧にまとめてみた