Dance with Agents

vi、vim、nano——ターミナルのエディタを1つ覚えるなら

知らない画面が開いて、出られない

いちばん有名なつまずき方から始めます。

git commitを-m "メッセージ"を付けずに実行すると、ターミナルの画面がいきなり切り替わります。見慣れない画面。文字を打っても入力されない。Ctrl+Cを押しても終わらない。閉じ方が分からない。

これがvim(またはvi)です。Escキーを押してから:q!と打ってEnter——これで、何も保存せずに脱出できます。まずこれだけ覚えて帰ってもらっても、この記事の元は取れます。

エージェントがいるのに、なぜ自分で編集するのか

正直なところ、ファイルの中身を書き換える作業のほとんどは、エージェントに任せたほうが速いです。それでも最低限のエディタ操作が要る場面は残ります。

  1. 使う人が頼まなくても勝手に開く。 上のGitの例がそれです。Gitは「メッセージを書いてもらう」ためにエディタを起動する作りになっていて、その既定がviです
  2. 1行だけ直したいときに、いちいち頼むほどでもない。 設定ファイルのひと文字を削除する、みたいな作業です
  3. リモート先では手元のアプリが使えない。 SSHで別のマシンに接続しているとき、目の前のパソコンのエディタでその向こう側のファイルは開けません

なお、中身を見るだけならcatで十分です。エディタが要るのは書き換えるときだけ。

viとvimの違い

  • vi:1976年生まれ。UNIX系のOSにほぼ必ず備わっている、古典的なエディタ
  • vim:Vi IMproved(=viの改良版)という名前のとおり、viを大幅に強化したもの。1991年生まれ

では両方使い分けるのかというと、そんなことはありません。今どきのMacでviと打つと、起動するのは実はvimです。 管理人のMac(macOS 26.2)では、/usr/bin/viはvim本体へのショートカット(シンボリックリンク)になっていて、viと打ってもバージョン表示は「VIM - Vi IMproved 9.1」でした。

なので、ネットの解説記事に「vi」と書いてあっても、だいたいvimのことだと読み替えて構いません。 ここから先はvimで通します。

nanoという、もっと簡単な選択肢

もうひとつ、nanoというエディタがあります。こちらはvimと違って、開いたらそのまま文字が打てます。 画面のいちばん下に「^O 保存」「^X 終了」のようなキー一覧がずっと表示されているので、抜け出せなくなることもありません(^はCtrlのことです)。

nano memo.txt

「ターミナルのエディタで消耗したくないだけ」という人は、正直nanoで足ります。

ひとつ小ネタを。Macのnanoは、実はnanoではありません。 macOS 12.3でGNU nanoが同梱から外され、今はnanoと打つと、その祖先にあたるpicoという古いエディタが起動します(管理人のMacでの表示は「UW PICO 5.09」でした)。基本の使い勝手は同じなので普段は困りませんが、ネットのnano解説にある機能が見当たらない、ということは起こります。

それでもvimを推す理由

nanoで足りるのに、なぜvimを勧めるのか。理由は4つあります。

  1. どこにでもある。 SSHで接続した先のサーバ、コンテナの中、借り物のマシン。そういう「自分で好きに環境を整えられない場所」に、viはたいてい備わっています
  2. Gitが既定で使うのがvi。 Git公式ドキュメント(git-var)によると、GitはエディタをGIT_EDITOR → core.editorの設定 → VISUAL → EDITOR → コンパイル時の既定(原文は「usually vi」)の順で探します。つまり何も設定していない人のところには、必ずviが来ます
  3. 指が覚える。 マウスに手を伸ばさず、ホームポジションから動かずに編集が終わります
  4. vim風のキー操作は他の道具にも波及している。 manでマニュアルを読むときや、長い出力をページ送りで眺めるときなど、jで下・kで上・/で検索、が通じる場面はかなり多いです

正直な但し書きも書いておきます。vimは最初がしんどいです。 理由はほぼひとつ、モードという仕組みにあります。

最大の関門は「モード」

普通のエディタは、開いたら文字が打てます。vimは違います。

  • ノーマルモード:開いた直後はこちら。キーはすべて「命令」として解釈される。xを押すとxが入力されるのではなく、1文字消える
  • 挿入モード:iを押すと入る。ここで初めて、普通のエディタのように文字が打てる
  • 戻るのはEsc

「文字を打っても入力されない」の正体はこれです。ノーマルモードのまま打っていたわけですね。

覚えるべき合言葉は迷ったらEsc。何をしている途中でも、Escを何回か押せばノーマルモードに戻ってこられます。そこからなら:q!で脱出もできます。

なぜこんな面倒な作りなのかというと、キー1つに命令を割り当てられるからです。CtrlやCommandを押しながら…という組み合わせがほとんど要らない。慣れた人がvimを速いと言うのは、この設計のおかげです。

まず、この4つだけ

vim memo.txt   ファイルを開く(無ければ新規作成)
i              挿入モードに入る(ここから文字が打てる)
Esc            ノーマルモードに戻る
:wq            保存して終了する

保存せずに出たいときだけ:q!。実質、覚えるのはi・Esc・:wq・:q!の4つです。

ここから先、カーソル移動や削除・コピーはvimコマンド一覧・基本編にまとめました。検索・置換や画面分割まで行きたくなったら応用編へ。

なお、vimにはvimtutorという対話型の練習コースが最初から付いています。ターミナルでvimtutorと打つだけで始められるので、腰を据えて覚えるならこれがいちばん早いです。

Windowsの場合

Windowsそのものには、vimもnanoも備わっていません。ただ、このサイトの手順どおりに進んでいれば、Gitをインストールした時点でvimも一緒にインストールされます。 Git for Windowsに同梱されているGit Bashの中にvimが含まれているためです。

Gitのインストーラを進めていくと、途中で「Gitが既定で使うエディタを選んでください」という画面が出ます。歴史的な事情でVimが最初から選ばれていますが、そのドロップダウンからNanoやVS Codeを選ぶこともできます。ここで選んだものが、git commitのときに開くエディタになります。

PowerShellでもvimを使いたい場合は、単体でインストールできます。

winget install vim.vim

もうひとつの大物、Emacs

vimの話をすると、必ずもう一つの名前が挙がります。Emacsです。

こちらはエディタというより、その中でメールを読んだりファイルを管理したり、果ては別のプログラムを動かしたりできてしまう巨大な環境で、使い込んでいる人はとことん使い込んでいます。ただ、最初の一歩としては明らかに荷が重いので、このサイトでは扱いません。

「世の中には『vim派 vs Emacs派』という、それはそれは長い論争がある」——今のところは、それだけ知っていれば十分です。

まとめ

  • 知らない画面が開いたら、それはたぶんvim。Esc→:q!で必ず出られる
  • viとvimの違いは実用上ほぼ無い。今のMacでviと打つと起動するのはvim
  • nanoは簡単。それで足りる人はそれでいい
  • 覚えるならvim。どこにでもあって、Gitの既定で、指が覚える
  • とっかかりはi・Esc・:wq・:q!の4つだけ

設定ファイルをよく開くようになったら、aliasでvim ~/.zshrcのような長い指定に短い名前を付けてしまうのがおすすめです(aliasという救世主)。

ターミナル / UNIXコマンドの記事

ターミナル / UNIXコマンドのページへ →