header image
  • プログラム・ソフト
  • 物理学・工学
  • ガジェット
  • 当サイトについて
  • お問い合わせ
  • プログラム・ソフト
  • 物理学・工学
  • ガジェット
  • 当サイトについて
  • お問い合わせ
  • HOME
  • プログラム・ソフト
  • Vim
  • Vimの改行コマンドと改行コードの操作

Vimの改行コマンドと改行コードの操作

投稿日:2022年4月14日 更新日:2022年6月15日

  • Tags: [コマンド集], [テキストエディター], [使い方],

サムネイル

テキストエディターVimでも、挿入モードに入ってEnterキーを押せば改行され、BackSpaceキーを押せば改行を削除できます。
しかしノーマルモードでカーソル操作を行っているときにも改行の挿入・消去をしたいときがあるかと思います。
そんなとき使えるコマンドがあります。

また異なるOS間でファイルの受け渡しをしたときにみられることがある、謎の記号「^M」(改行コード)の修正方法もメモしておきます。

  • 改行コマンド(ノーマルモード)
    • 改行の挿入
    • 改行の消去(行の連結)
  • 改行コードの制御(コマンドモード)
    • 改行コードの挿入・消去
    • OS毎の改行コード
    • 改行コードの修正・置換
  • まとめ
  • 参考文献
  • メモ

改行コマンド(ノーマルモード)

改行の挿入

ノーマルモードからの改行挿入
Fig.1. ノーマルモードからの改行挿入

操作コマンド
カーソル下に新規の行を挿入o<Esc>
カーソル上に新規の行を挿入O<Esc>

ノーマルモードのときにoまたはOを押すと、カーソルの下または上に新しい行を作って挿入モードに移行します。
そこからEscキーでノーマルモードに戻ることで、改行を行うという方法になります。

残念ながらキー1つで改行を挿入するコマンドは存在しないため、
どうしてもほしい場合はキーマップを変更するしかありません。

またコマンドモードの置換コマンドを使った改行方法もあり、
そちらでは特定の文字を改行コードに置き換えることができます(後述)。

改行の消去(行の連結)

ノーマルモードでの改行削除
Fig.2. ノーマルモードでの改行削除

操作コマンド
下の行と連結 (間にスペースあり)J
下の行と連結 (間にスペースなし)gJ

ノーマルモードで J(Shift-j)を押すことでカーソル行とその下の行を連結させ、改行を消去できます。
このとき、行の連結した位置にスペースが入りますが、
Jの前にgを入力しておくとスペースが入らなくなります。

コマンドモードを使って、ファイル内すべての改行を消去することもできます(後述)。

改行コードの制御(コマンドモード)

コマンドモードの置換コマンドで改行を意味する記号(改行コード)を挿入、消去することでも、改行の制御を行うことができます。

またOSによって改行コードが異なることから生じる、謎の記号も同様のコマンドで修正可能です。

改行コードの挿入・消去

コマンドモードでの改行の挿入と削除
Fig.3. コマンドモードでの改行の挿入と削除

下記は、ファイル全体の*{テキスト}*の後に改行を挿入するコマンドと
ファイル全体の改行を削除するコマンドになります。

操作コマンド
挿入:%s/{テキスト}/{テキスト}\r/g<Enter>
消去:%s/\n//g<Enter>

置換コマンドを使って、任意の {テキスト} の前後に改行コードを入れることで改行の挿入が、
また改行コードを空文字に置き換えることで改行の消去が行えます。

置換コマンドは

:%s/{置換前}/{置換後}/g<Enter>

で実行でき、
{置換前} に改行コードを入れるときは \n を、
{置換後} に改行コードを入れるときは \r を入れます
(¥ と \ は同じ意味です)。

なぜ置換前後で改行コードの文字が変わるのかはよくわかりません。

もっと詳しい置換コマンドの使い方は下記に書きました。
>> Vimでサクッと置換する方法と置換コマンドの構成

OS毎の改行コード

OS改行コード正規表現
Unix系システム(Linux)、MacOSLF (Line Feed)\n
MacOSCR (Carriage Return)\n
WindowsCR + LF\r\n

OS毎に改行コードが異なっています[1]。
これが原因で、OS間でファイルのやり取りを行うときに文字化けのようなことが起こることもあります。
修正する方法は下記の通りです。

改行コードの修正・置換

改行コード^Mの削除
Fig.4. 改行コード^Mの削除

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のコマンドを一覧にまとめてみた

参考文献

  1. 正規表現:改行コードの表現方法。置換による削除 ↩︎

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


WSL+VSCode上でJupyter(Python)を使う

Vimでサクッと置換する方法と置換コマンドの構成

自作ラズパイゼロケースを3Dプリンター用にモデリング【FreeCAD】

Windows上のVSCodeでWSLのgitを使う

【動画あり】Vimのコマンドを一覧にまとめてみた

Vimのレジスタの種類とコマンドの使い方・構造

Vim (Vi)でコピー&ペーストするコマンドまとめとエディタ外部間で行う方法

【超初心者向け】Vim(Vi)でなんとかファイル編集する方法

  • プロフィール

  • Yoshiharu

  • 現在、ひよっこ光学系エンジニアをやっている一般人です。我流でプログラムをいじったりしています。備忘録、知識整理を兼ねてアウトプットをしていく予定です。

    • 【ラズパイ】格安な抵抗式・静電容量式の土壌湿度センサーを実際に使って比較

      2022.11.23

      【ラズパイ】格安な抵抗式・静電容量式の土壌湿度センサーを実際に使って比較


    • ELEGOO Neptune 2Sをレビュー!2万円台3Dプリンターの実力を実際に使って評価!

      2022.11.03

      ELEGOO Neptune 2Sをレビュー!2万円台3Dプリンターの実力を実際に使って評価!


    • 自作ラズパイゼロケースを3Dプリンター用にモデリング【FreeCAD】

      2022.10.13

      自作ラズパイゼロケースを3Dプリンター用にモデリング【FreeCAD】


    • 【初心者向け】FreeCADの基本的な使い方と手順の流れ

      2022.10.11

      【初心者向け】FreeCADの基本的な使い方と手順の流れ


    • 【Python】ラズパイでLチカ:LEDの取り扱い~抵抗値の計算

      2022.09.07

      【Python】ラズパイでLチカ:LEDの取り扱い~抵抗値の計算


  • アーカイブ

    • 2022年11月
    • 2022年10月
    • 2022年9月
    • 2022年8月
    • 2022年5月
    • 2022年4月
    • 2022年3月
    • 2022年1月
    • 2021年11月
    • 2021年9月
    • 2021年8月
    • 2021年7月
    • 2021年2月
    • 2021年1月
    • 2020年12月
    • 2020年10月
    • 2020年9月
    • 2020年8月
    • 2020年7月
    • 2020年3月
    • 2020年2月
    • 2020年1月
  • カテゴリー

    • Vim
    • ガジェット
    • プログラム・ソフト
    • 光学
    • 情報処理
    • 物理学・工学
    • プログラム・ソフト
    • 物理学・工学
    • ガジェット
    • 当サイトについて
    • お問い合わせ
    Y Lab Desk

    Copyright © Y Lab Desk, 2022 All Rights Reserved.