Ubuntu Weekly Recipe

第518回Ubuntu標準のテキストエディタ「GNU nano」

GNU nanoはほとんどのUbuntuマシンにインストールされている、Ubuntu標準のテキストエディタです。 今回はUbuntu 16.04 LTSからUbuntu 18.04 LTSにアップグレードした人に向けてGNU nanoの新機能を紹介します。

Ubuntuで2番目にインストールされているテキストエディタ

GNU nanoは直感的な操作が可能なCUIで利用できるテキストエディタです。UbuntuのDesktopやServerに最初からインストールされており、なおかつeditorコマンドを実行するとnanoが起動するように設定されているため、Ubuntu標準のテキストエディタとも言えるでしょう。実際、ほぼすべてのUbuntuユーザーが一度はnanoを起動したことがあるはずです[1]⁠。

Ubuntuパッケージのインストール情報を収集しているpopconの統計を見てみるとnanoは全体で125位とeditorsセクションとしては2番目にインストールされているテキストエディタであることがわかります。つまりそれだけユーザーから愛されているソフトウェアということです[2]⁠。

実際のところnanoはstandardタスクに分類されているため、DesktopやServerをインストールするともれなく付いてきます[3]⁠。つまり「インストールされた」ことを換算する限りnanoは非常に有利です。ちなみに最もインストールされているエディタは75位のedです。3番目が137位のvim-tinyとなっています。それに対して「最近使われた」ことを示すvoteフィールドだと、LibreOffice、vimに続いてnanoは3位になるようです。

さらにsed派の名誉のために追記しておくと、sedはutilsセクションだったために除外しています。実際はインストールベースで3位、voteベースで20位なのでsedをエディタとして考えた場合はダントツの1位になります。

Ubuntuの標準エディタになっているのは、純粋に「初心者向けだから」が理由です。何がどう初心者向けかというと、間違って何かのファイルをエディタで開いたときにとりあえず「終了方法がわかる」ことがポイントです。その点nanoは、常に画面の下に操作方法を表示しているため、比較的初心者向けと言えます。

図1 nanoのヘルプメッセージ
画像

ところでnanoのメニューは「^X 終了」のような表示になっています。この「^X」「Ctrlを押しながらX」もしくは「ESCを2回押してX」ということは、Ubutnuをターミナルで使う程度のリテラシーは持っている初心者にとって類推可能な常識なのでしょうか。もちろんこの連載の読者にとっては「常識」なのはわかります。ただし結局のところ初心者がここの類推ができないとvimやEmacsと同程度には詰んでしまう気がしています。ちなみに「-m」オプションを付けてマウスモードを有効化して起動した場合(もしくは起動中にAlt-Mでマウス機能を有効化した場合)は、このヘルプメッセージをクリックして操作できます。

そのnanoですが、次のような機能を持っている十分に高機能なテキストエディタです。

  • マルチバッファ
  • 正規表現に対応した検索・置換機能
  • シンタックスハイライト
  • 自動インデント
  • UnDo/ReDo機能
  • 組み込みのディレクトリブラウザー
  • キーバインディングのカスタマイズ
  • マウスサポート
  • Unicode入力対応

詳しい機能の使い方については「Ctrl-G」で表示されるヘルプを参照するのが一番でしょう。ほぼすべて日本語化されています。またnanoコマンドや設定ファイルであるnanorcのmanもカスタマイズの参考になるはずです。

Ubuntu 18.04 LTSのnanoの新機能

Ubuntu 18.04 LTSのnanoは2.9.3ベースとなっています。16.04の2.5.3に対して22回のリリースが行われ、その間に順当に進化してきました。バイナリファイルサイズも203KiBから240KiBと2割近く増加しています。Ubuntuの一番最初のリリースである4.10に同梱された1.2.3に比べると2倍以上に膨らんでいるのです。まぁ、最初の頃はマルチバイト文字を含む行をwrapすると無限ループでハングアップしたり、UnDo/ReDo機能が有効になったのもここ数年のことだったりと、当時としては機能的にシンプルすぎたというのもあるかもしれません。

ここからは16.04のnanoユーザーのために、18.04までに実装された主な新機能を紹介しましょう。

折り返し関連機能の充実

nanoは画面サイズに対して長い行の折り返し表示機能(soft wrap)に対応しています。折り返し表示はAlt-$で有効・無効を切り替えられます。

これまで折り返し表示を有効化した際のカーソルの移動は、常に論理行単位で行われていました。つまり折り返し機能によって「見た目上」2行表示されている最初の行で下矢印キーを押した場合、⁠見た目の上の2行目」ではなく「実際の次の行」にカーソルが移動していたのです。つまりユーザーから見ると1行飛ばされたことになります。

この動作は直感的ではないということで、折り返し表示機能が有効化されている場合、カーソルの移動は見た目の行にあわせて移動するようになりました。具体的には次のような操作が変わっています。

  • Up/Downキーで見た目上の行を移動する。
  • Home/Endキーを押した時はまず表示上の行頭・行末に移動する。表示上の行頭・行末でHome/Endを押した時は、実際の行頭・行末に移動する。
  • 1行スクロール(Alt--/Alt-+)は見た目上の行をスクロールさせる。

折り返し表示有効化時に、折り返し行の末尾と先頭にまたいで全角幅の文字が存在するとき、その文字が表示されない問題も合わせて修正されています。

さらにnanorcで「set atblanks」を指定しておくと、行末ではなく空白文字で折り返されるようになります。

新しい機能とショートカットキーの追加

新しい機能の実装に合わせて、主に以下のようなショートカットキーが追加されています。

Ctrl-] 単語の補完
Ctrl-S 問い合わせなしに現在のファイルを上書き保存
Alt-: キーストロークの記録開始・終了(マクロ機能)
Alt-; 記録したキーストロークの再生
Alt-3 カーソル行のコメントアウト・コメントアウト解除
Alt-# 画面左端に行番号の表示
Tab インデント(Alt-}と同じ⁠⁠、Ctrl-6で指定したマーク領域に対するインデントも可能
Shift-Tab インデント解除(Alt-{と同じ⁠⁠、Ctrl-6で指定したマーク領域に対するインデント解除も可能
Ctrl-Home ファイル先頭に移動
Ctrl-End ファイル末尾に移動
Ctrl-Up 前の段落に移動
Ctrl-Down 次の段落に移動
Alt-Up 次を検索(Byobu上では動作しない)
Alt-Down 前を検索(Byobu上では動作しない)
Shift-カーソル テキストの選択(Byobu上では動作しない)

特に上書き保存やマクロ機能は、nanoのヘビーユーザーにとっては待望していた機能と言えるでしょう。

「Byobu上では動作しない」のはByobuがキーイベントを奪ってしまうからです。必要に応じてByobuかnanoのキーバインディングを変更してください。

Unicode直接入力のサポート

Alt-Vを使うことで、Unicodeを直接入力できるようになりました。

図2 Unicodeの直接入力
画像

実際にはAlt-Vを入力したあとに0から始まる6桁の英数字を入力します。たとえば🍣(U+1F363)の場合は「01f363」を、🍻(U+1F37B)の場合は「01f37b」を入力します。

InputMethodがうまく動かないけどUnicode番号なら覚えているような状況において便利です。どんな状況かはいまひとつよくわかりませんが、きっとそんな状況があるはずです。異体字に対応している端末上なら、使い手があるかもしれません。

既存の機能の改善

nanoにおけるカットアンドペーストはCtrl-K/Ctrl-Uの組み合わせでした。またコピーはAlt-6でした。このカットもしくはコピーした行を、本文だけでなくステータスバー領域にもペーストできるようになりました。ステータスバーとは検索時やファイル保存時に表示される入力可能な領域です。

これまでもAlt-Gにより行番号を指定した移動ができていましたが、行番号として負の値を指定できるようになりました。たとえば-1を指定するとファイル末尾に移動します。

複数のバッファーにファイルを読み込んでいるとき、開いているバッファーの数と現在のバッファー番号を画面左上に表示するようになりました。複数のファイルを切り替えながら編集している時に参考になるでしょう。

図3 バッファー番号と行番号の表示
画像

あまり使わないかもしれませんが、改行文字を含むファイル名を正しく保存できるようになりました。

狭いターミナルのサポート

人生にはどうしても横45文字、縦2行といった狭いターミナルを使わなくてはならない時があるかもしれません。以前のnanoは縦6行未満だと「広いウィンドウが必要です」とツレナイことを言って終了していたのですが、最新のnanoはそのような環境でも問題なく使えるようになりました。

まず縦1行でも起動します。この場合ヘルプメッセージやタイトルバーは一切表示されません。ステータスバーは必要に応じて縮退表示されます。

図4 1行状態でのnanoの保存画面。ここまでくるとラインエディタと呼んでも差し支えないのではなかろうか
画像

また、ファイル名に対して横幅が狭い環境でもできるだけタイトルバーにファイル名を表示するようになりました。以前はバージョンや「ファイル名:」部分が優先されていたので、長いファイル名を開くときに便利です。

おすすめ記事

記事・ニュース一覧