設定やスクリプト編集を効率化するCLIテキストエディタ「nano」「vi」「emacs」「msedit」を使いこなそう

- 1 はじめに
- 2 Ubuntuの標準エディタ「nano」
- 2.1 nanoの基本操作
- 3 Linuxの定番エディタ「Vim」
- 3.1 Vimの基本操作
- 4 Vimと人気を二分する「Emacs」
- 4.1 Emacsのインストールと起動
- 4.2 Emacsの基本操作
- 5 Microsoft製の新型エディタ「msedit」
- 5.1 mseditのインストール
- 5.2 mseditの基本操作
- 6 Ubuntuの標準エディタを変更する
- 6.1 環境変数による設定
- 6.2 update-alternativesによるシステムワイドな設定
- 7 エディタが存在しない時の対処法
- 7.1 edを使った編集
- 7.2 sedによるファイル編集
- 7.3 catによるファイルの作成と追記
- 8 おわりに
はじめに
LinuxをはじめとしたUnixライクなOSは、システムの様々な設定をテキストファイルの形で記述するのが基本です。今でこそ、本番環境であればOS設定の自動化やイミュータブル化も一般的になってきましたが、個人向けの作業環境やテスト環境などでは、まだまだ人間が設定ファイルを手作業で編集することも多いでしょう。
そこで必須となるのが、対話的にテキストファイルを編集できる「テキストエディタ」です。テキストエディタと言えば開発者の方はVS Codeのような開発ツールを思い浮かべるかもしれませんが、OSの設定においてはテキストの作成と簡単な編集のみができれば十分です。VS Codeのような高機能なツールは、まさに鶏を割くに牛刀を用いるが如しと言えるでしょう。
また、サーバーOSでは不要なアプリケーションやGUI環境はインストールしないのが鉄則です。そのため、こうした重量級のGUIアプリケーションを設定目的で使うことは通常ありません。
このような背景から、テキストのみのターミナル内で動く軽量なCLIエディタが用いられます。今回はLinuxを触るのであれば避けては通れない、CLIのテキストエディタについて詳しく解説していきます。
Ubuntuの標準エディタ「nano」
「nano」はUbuntuにおける標準のテキストエディタです。最近ではUbuntuだけでなく、Fedoraなどのディストリビューションでも後述する「Vim」に代わってnanoが標準エディタとして採用されています。
従来、UnixライクなOSの標準エディタと言えば「vi」でした。このviに代わってnanoが採用された最大の理由は、その「直感性」にあります。viは強力なエディタですが、非常に独特な操作体系を持っており、初心者には敷居が高いという問題があります。
例えば、viはカーソルキーを押してもカーソルは動きませんし、キーボードをタイプしても、そのままでは文字が入力できません。エディタを終了するにも特殊なコマンドが必要です。対してnanoは一般的なテキストエディタに近い操作感を持ち、常に画面下部に基本的なキーバインドが表示されるため、初めて使うユーザーでも迷わずに操作できます。
nanoの基本操作
nanoを起動するには、ターミナルで以下のコマンドを実行します。
$ nano [ファイル名]
これでnanoが起動し、指定したファイルが開かれます。また、指定したファイルが存在しない場合はファイルが作成されます。ファイル名を指定せずに起動した場合は空の新規バッファが開かれます。Windowsで「メモ帳」を初めて起動した際と同じ挙動だと考えれば分かりやすいでしょう。
nanoの画面は非常にシンプルで、上部にファイルの編集領域、下部にヘルプとなるキーバインド一覧が常に表示されています。カーソルキーでカーソルを自由に動かし、キーボードをタイプすることで文字を入力できます。まさに説明するまでもなく、普通のテキストエディタだと言えるでしょう。
nanoにおける主要なキー操作とその機能は、以下の通りです。
キー操作 | 機能 |
---|---|
Ctrl+G | ヘルプを表示 |
Ctrl+W | 文字列を検索 |
Ctrl+K | 行をカット |
Ctrl+\ | 置換 |
Ctrl+U | ペースト |
Ctrl+O | ファイルを保存 |
Ctrl+R | ファイルの内容を挿入 |
Ctrl+X | nanoを終了 |
nanoにはヘルプも完備されています。「Ctrl」+「G」キーを押すとヘルプ画面が表示され、すべてのキーバインドと機能を確認できます。また、画面下部には常に主要なコマンドが表示されているため、操作に迷ったときでもすぐに確認できます。
Linuxの定番エディタ「Vim」
もともとUnixの世界で長年親しまれ、標準エディタの地位を確立していた存在がviでした。viは1976年に開発された歴史あるエディタで、現在でも多くのUnix系システムで利用されています。ただし、正確に言うと現在はオリジナルのviではなく、より進化した実装である「Vim」(「Vi IMproved」)が代わりにインストールされていることがほとんどです。
UbuntuでもデフォルトでVim(正確には機能限定版のvim.tiny)がインストールされており、viコマンドを実行すると実際には「vim.tiny」が起動します。nanoと同様に編集するファイル名を指定して起動もできます。
$ vi [ファイル名]
なお、vim.tinyは最小限の機能のみを持つ軽量版のため、プログラミング目的などで本格的にVimを使いたい場合は、以下のコマンドで高機能版(「vim.basic」)をインストールすることをお勧めします。
$ sudo apt -U -y install vim
Vimの基本操作
nanoやWindowsのメモ帳といったエディタはカーソルキーでカーソルを動かし、キーボードを押せばその場に直接文字を入力できますが、Vimはそうではありません。Vimは複数の「モード」を切り替えるという、非常に特殊な操作体系を持っています。
・ノーマルモード
Vim起動時のデフォルトが「ノーマルモード」です。ここでは文字を入力できず、カーソル移動やテキストの削除、コピーといった編集作業を行います。
コマンド | 機能 |
---|---|
h、j、k、l | カーソルを左、下、上、右へ移動 |
x | カーソル位置の文字を削除 |
dd | 行全体を削除 |
yy | 行全体をコピー |
p | 貼り付け |
・インサートモード
ノーマルモードで「i」や「a」キーを押すと、文字を入力するインサートモードに遷移します。「ESC」キーを押すとノーマルモードに戻れます。
キー操作 | 機能 |
---|---|
i | カーソル位置からインサートモードに遷移 |
I | 行頭にカーソルを移動してインサートモードに遷移 |
a | カーソルの次の位置からインサートモードに遷移 |
A | 行末にカーソルを移動してインサートモードに遷移 |
o | カーソルの次の行に新しい行を挿入してインサートモードに遷移 |
O | カーソルの前に新しい行を挿入してインサートモードに遷移 |
[ESC] | ノーマルモードに戻る |
・コマンドラインモード
ファイルの保存、検索、置換などを行うモードです。ノーマルモードで「:」や「/」に続いてコマンドを入力します。
コマンド | 機能 |
---|---|
:w | ファイルを保存 |
:q | Vimを終了 |
:wq | ファイルを保存してVimを終了 |
:q! | 保存せずに強制終了 |
/文字列 | 文字列を検索 |
Vimと人気を二分する「Emacs」
「Emacs」は、Vimと並んでUnix系システムで長年愛用されている高機能テキストエディタです。1976年に初版が登場して以来、現在でも活発に開発が続けられている歴史あるエディタです。
Emacsの最大の特徴は、その「拡張性」にあります。Emacsはテキストエディタの顔をしていますが、その実体は「Emacs Lisp」と呼ばれるプログラミング言語の実行環境です。この言語で書かれた任意のプログラムをエディタ上で実行可能なため、まさに無限の拡張性を持っているのです。世界中の開発者によって開発された膨大な数の拡張機能(パッケージ)が利用可能で、VS Codeに匹敵する統合開発環境としても使用できます。そのため「Emacsはテキストエディタではなく環境である」とも言われます。
なお、EmacsはVimとは異なり「非モーダルエディタ」であるため、一般的なテキストエディタと同様に起動後すぐに文字入力が可能です。筆者は本記事を含め、ここ17年ほどの間のすべての原稿をEmacsで執筆しています。
Emacsのインストールと起動
UbuntuでEmacsをインストールする方法は複数ありますが、最新版を利用したい場合はSnapパッケージの利用をお勧めします。ユーザーが使うアプリケーションは進化が速く、より新しいバージョンを使いたいと考える人が多いでしょう。Snapであればバージョンアップに追従しやすいです。
# APTでのインストール $ sudo apt -U -y install emacs # Snapでのインストール(推奨) $ sudo snap install emacs --classic
SnapからインストールしたEmacsは、GUIでも動作します。そのままemacsコマンドを実行するとWindowsのデスクトップ上でEmacsが起動してしまうため、ターミナル内で起動する場合は以下のように「-nw」オプションを付けて実行してください。
$ emacs -nw
Emacsの基本操作
Emacsの操作は、主に「Ctrl」キー(Cと表記)や「Alt」キー(Mと表記)と別のキーの組み合わせで行います。例えば、カーソルを右に動かすには「Ctrl」キーと「f」キーを同時に押しますが、これは「C-f」と表記します。カーソル移動をはじめとした編集系のキーバインドは、シェルをはじめEmacs以外の様々な環境でも一般的に採用されています。
VS Codeなどもそうですが「キー操作をEmacs風にする」設定や拡張機能が用意されているアプリも珍しくありません。Emacsそのものは使わなくても、この「Emacsキーバインド」に慣れておくと非常に便利です。
・カーソル操作キー操作 | 機能 |
---|---|
C-f | カーソルを右に移動 |
C-b | カーソルを左に移動 |
C-n | カーソルを下に移動 |
C-p | カーソルを上に移動 |
C-a | カーソルを行頭に移動 |
C-e | カーソルを行末に移動 |
キー操作 | 機能 |
---|---|
C-x C-f | ファイルを開く |
C-x C-s | ファイルを保存 |
C-x C-w | ファイルを別名保存 |
C-x C-c | Emacsを終了する |
キー操作 | 機能 |
---|---|
C-k | カーソル位置から行末まで削除 |
C-Space | 範囲選択の開始 |
C-w | 選択範囲のカット |
M-w | 選択範囲のコピー |
C-y | 貼り付け |
C-s | 前方検索 |
C-r | 後方検索 |
キー操作 | 機能 |
---|---|
C-x 2 | ウィンドウを水平分割 |
C-x 3 | ウィンドウを垂直分割 |
C-x o | 次のウィンドウに移動 |
C-x 0 | 現在のウィンドウを閉じる |
Microsoft製の新型エディタ「msedit」
「msedit」は、Microsoftが2025年に新たにリリースしたオープンソースのCLI向けテキストエディタです。CLIに不慣れなユーザーでも使いやすいエディタを提供することを目標に開発された、期待のニューフェイスです。
Ubuntuは「viが使いにくい」という理由でnanoを標準エディタとして採用したのは前述の通りですが、正直な話nanoも「一般的なエディタ」と呼ぶには特殊すぎる操作体系を持っており、お世辞にも使いやすいとは言えません。また、VimやEmacsは非常に高機能ですが、学習コストが高く初心者には敷居が高いという問題がありました。
そこでMicrosoftが開発した「現代的で直感的」なCLIエディタがmseditです。最近のMicrosoftとしては珍しくない話ですが、Windows版の他にLinux版も同時にリリースされています。
mseditのインストール
Ubuntuにmseditをインストールするには、Snapパッケージを使用します:
$ sudo snap install msedit
mseditは、現代的なGUIエディタに慣れたユーザーでも違和感なく使えるように設計されています。引数にファイルを指定した場合や、ファイル名を指定しないで起動した場合の挙動はnanoと同じです。
$ msedit [ファイル名]
mseditの基本操作
キー操作 | 機能 |
---|---|
Ctrl+n | 新規バッファを開く |
Ctrl+O | ファイルを開く |
Ctrl+S | ファイルを保存 |
Ctrl+Z | 元に戻す |
Ctrl+Y | やり直し |
Ctrl+c | コピー |
Ctrl+x | 切り取り |
Ctrl+v | 貼り付け |
Ctrl+a | すべてを選択 |
Ctrl+q | エディタを終了 |
見ての通り、一般的なGUIのアプリケーションと共通したキーバインドが採用されています。既存のエディタを使い慣れたユーザーならすぐに使いこなせるでしょう。また、mseditはターミナル内でもマウス操作が可能です。GUIアプリと同じように、マウスでメニューをクリックして操作できます。まさに、mseditは従来のCLIエディタとモダンなGUIエディタの良いところを組み合わせた、新世代のテキストエディタと言えるでしょう。
Ubuntuの標準エディタを変更する
Linuxにおいて、自動的にエディタが起動する瞬間というものがあります。具体的にはシステムのスケジューラーである「crontab」の編集時、バージョン管理システムに変更をコミットする「git commit」時、systemdのユニットファイルを編集する「systemctl edit」の実行時などです。このタイミングでUbuntuが標準エディタのnanoを自動的に起動します。しかし、慣れ親しんだエディタがある場合は「標準エディタを変更したい」と思うこともあるのではないでしょうか。
環境変数による設定
システムが起動するエディタは、環境変数「VISUAL」と「EDITOR」で制御できます。標準のエディタをVimにしたい場合は、以下のように環境変数を設定してください。
$ export VISUAL=/usr/bin/vim $ export EDITOR=/usr/bin/vim
exportコマンドでの設定は、シェルを終了すると失われてしまいます。恒久的に設定する場合は、シェルの設定ファイルに記述してしまうと良いでしょう。
$ echo 'export EDITOR=vim' >> ~/.bashrc $ echo 'export VISUAL=vim' >> ~/.bashrc
なぜ環境変数が2つあるのかと、疑問に思った方もいるでしょう。実は大昔のUnixでは、全画面を占有して動くスクリーンエディタと、そうした機能がないラインエディタ(後述)を区別していたためです。現在ではこうした問題はほとんどないのですが、歴史的な事情によりどちらか片方しか参照しないコマンドも存在するため、意図しない事故を防止する意味でも両方の環境変数に同じ値を設定することを推奨します。
update-alternativesによる
システムワイドな設定
Ubuntuでは「ある機能」に対して「実装」が複数存在するケースがあります。例えば、Vimの例であればviという機能に対して機能限定版のvim.tinyと、より高機能なvim.basicという2つの実装がありました。そして、インストールされているパッケージなどの状態により、viコマンドを実行したときにどちらの実装が呼び出されるかが決定されます。この実装の切り替えを実現しているのが「Alternatives」という機能です。
システムの標準エディタもまた、Alternativesで変更できます。「update-alternatives」コマンドを、以下のように実行してください。
$ sudo update-alternatives --config editor
インストールされているエディタのリストと、選択肢の番号を入力するプロンプトが表示されます。デフォルトではnanoが選択されていますが、ここで「3」を入力すれば、デフォルトのエディタをvim.basicに変更できます。
なお、Snapからインストールしたmseditは、デフォルトではAlternativesの選択肢として表示されません。そこで以下のコマンドを実行すると、mseditを優先度50で選択肢として登録できます。
$ sudo update-alternatives --install /usr/bin/editor editor /snap/bin/msedit 50
再度「update-alternatives --config」を実行してみると、mseditが追加されていることが分かります。mseditを標準エディタにしたい場合は参考にしてください。
エディタが存在しない時の対処法
最近では、IoT向けやコンテナなど、人間が対話的に操作しないことが前提のLinux環境も増えてきました。こうした環境では、無駄なソフトウェアを一切削ぎ落として軽量化するのがセキュリティ面においても鉄則です。そのため、昔は「どの環境にも存在する」と言われたviすらインストールされていないことも当たり前になってきています。
こうした環境にデバッグ目的などで接続した際に、設定ファイルが編集できず困った経験がある方もいるのではないでしょうか。ここでは、対話的なスクリーンエディタがない場合の回避策を紹介します。
edを使った編集
これまで紹介したnano、Vim、Emacs、mseditは、いわゆる「スクリーンエディタ」と呼ばれる種類のエディタです。スクリーンエディタはターミナル画面全体を使ってファイルの内容を表示し、カーソルを自由に移動させて編集を行います。
これに対して「ed」は「ラインエディタ」と呼ばれる、より古い形式のエディタです。ラインエディタは画面全体を使わず、1行ずつコマンドを入力してファイルを編集します。お世辞にも使いやすいエディタではなく常用するようなものではありませんが、nanoやviがない環境ではedが最後の砦となることもあります。
・edの基本操作
edでファイルを編集する例を示します。まずedコマンドでedを起動します。
$ ed
edではアルファベット1文字のコマンドで操作します。aを入力するとテキストの追加モードに入るので、文字列を入力してください。入力を終了するには「.(ドット)」を入力します。
a ← aを入力して追加モードに入る This is sample text. ← 文字列を入力する . ← ドットを入力して、追加モードを終了する
入力した内容をファイルに保存するには「w」とファイル名を入力します。また、edを終了するには「q」を入力します。
w example.txt ← 入力した内容をexample.txtに保存する q ← edを終了する
より詳細な編集コマンドについては、マニュアルを参照してください。
sedによるファイル編集
「sed」は「ストリームエディタ」の略で、人間が対話的に操作するのではなく、主にスクリプトの中などで文字列を加工するために使われるコマンドです。命令はすべてコマンドラインから引数の形で与えます。こうした特徴を持つため、人間が対話的に操作しないコンテナなどでもインストールされていることの多いツールです。
・sedの基本操作# example.txtの2行目を表示 $ sed -n '2p' example.txt # example.txtの3行目を削除して上書き保存 $ sed -i '3d' example.txt # example.txt中の「old」を「new」に置換して上書き保存 $ sed -i 's/old/new/g' example.txt # example.txtの2行目の後ろ(3行目)に「new line」という新しい行を追加 $ sed -i '2a\new line' example.txt
sedは普段からもよく使うLinuxの超定番ツールなので、これらの使い方を覚えておいて損はありません。
catによるファイルの作成と追記
「cat」はファイルの中身を表示する目的でよく使用されますが、その実態は標準入力を標準出力にそのまま出力するコマンドです。つまり、標準入力をキーボードとし、標準出力をファイルにリダイレクトすれば、キーボードからの入力をそのままファイルに保存できます。既存ファイルの編集こそできませんが、新規ファイルの作成やファイル末尾への追記であれば、エディタやsedを使わずともcatだけで実現可能です。
・catの基本操作
catコマンドを引数なしで実行すると、標準入力から入力を受け付けます。これをファイルにリダイレクトすることで簡易的なテキストエディタのように利用できます。複数行の入力も可能で、終了したい場合は「Ctrl」+「D」キーを押してください。
# example.txtを新規作成して文字を入力する例 $ cat > example.txt ここに文字列を入力する Enterを押すと改行する 複数行の入力も可能 (Ctrl+Dを押すと終了する)
リダイレクトを「>>」と指定することで、既存ファイルの末尾に文字列を追記できます。使い方は前述の新規ファイル作成と同じで、任意の文字列を入力した後に「Ctrl」+「D」キーを押して終了してください。
# 既存ファイルの末尾に追記する例 $ cat >> example.txt
スクリプトの中では、人間が直接キーボードから入力することはできません。こうした場合は「ヒアドキュメント」を使うと便利です。ヒアドキュメントとは、シェルにおいて複数行のテキストをコマンドに渡すための仕組みです。例えば、以下のようにcatコマンドを実行すれば、複数行からなるconfig.confという設定ファイルを自動的に生成できます。
$ cat > config.conf << EOF server_name=example.com port=8080 debug=true EOF
この方法は、サーバーを自動的に初期化するような際に便利です。
おわりに
Linuxシステムを操作する上で、CLIのテキストエディタへの習熟は避けて通れません。どのエディタを選ぶかは個人の好みや用途によりますが、少なくとも1つを習熟しておけば、Linux上で効率良く作業を進められるようになるでしょう。
普段使いのエディタにどれを選ぶかは個人の好みですが、いざ本番環境を触れる際に「この環境にはEmacsがインストールされていないので、私には設定できません」というのでは困ります。nanoやviといった、システムに標準でインストールされているツールも一通りは動かせるようになっておきましょう。また、エディタが利用できない環境も昨今では珍しくありません。sedやcatなどのコマンドも基本的な使い方を把握しておきましょう。