nanoをカスタマイズ

前回、Linuxで利用できるシンプルなエディタとしてnanoを紹介した。nanoはWindowsのメモ帳のようにモードという概念を持たないエディタで、比較的学習コストが低い。Ctrl-Xで編集したファイルの保存と終了ができるということだけ覚えておけばそのまま使い出すことができる。

nanoははVimのように機能がたくさん存在するエディタではないのだが、カスタマイズが可能だ。Linuxで使うエディタはnanoで十分という場合、どのような設定をすると使い勝手がよくなるか、覚えておくとよいだろう。

Ubuntu 18.04 LTSの場合、/etc/nanorcというファイルにデフォルトの設定ファイルが置いてあるので、これを見てみてほしい。

Ubuntu 18.04 LTSの/etc/nanorc

## Sample initialization file for GNU nano.
##
## Please note that you must have configured nano with --enable-nanorc
## for this file to be read!  Also note that this file should not be in
## DOS or Mac format, and that characters specially interpreted by the
## shell should not be escaped here.
##
## To make sure an option is disabled, use "unset <option>".
##
## For the options that take parameters, the default value is given.
## Other options are unset by default.
##
## Quotes inside string parameters don't have to be escaped with
## backslashes.  The last double quote in the string will be treated as
## its end.  For example, for the "brackets" option, ""')>]}" will match
## ", ', ), >, ], and }.

## When soft line wrapping is enabled, make it wrap lines at blanks
## (tabs and spaces) instead of always at the edge of the screen.
# set atblanks

## Use auto-indentation.
# set autoindent

## Back up files to the current filename plus a tilde.
# set backup

## The directory to put unique backup files in.
# set backupdir ""

## Use bold text instead of reverse video text.
# set boldtext

## The characters treated as closing brackets when justifying
## paragraphs.  They cannot contain blank characters.  Only closing
## punctuation, optionally followed by closing brackets, can end
## sentences.
# set brackets ""')>]}"

## Do case-sensitive searches by default.
# set casesensitive

## Constantly display the cursor position in the status bar.  Note that
## this overrides "quickblank".
# set constantshow
## (The old form, 'const', is deprecated.)

## Use cut-from-cursor-to-end-of-line by default.
# set cutfromcursor
## (The old form, 'cut', is deprecated.)

## Set the line length for wrapping text and justifying paragraphs.
## If the value is 0 or less, the wrapping point will be the screen
## width less this number.
# set fill -8

## Remember the used search/replace strings for the next session.
set historylog

## Display line numbers to the left of the text.
# set linenumbers

## Enable vim-style lock-files.  This is just to let a vim user know you
## are editing a file [s]he is trying to edit and vice versa.  There are
## no plans to implement vim-style undo state in these files.
set locking

## The opening and closing brackets that can be found by bracket
## searches.  They cannot contain blank characters.  The former set must
## come before the latter set, and both must be in the same order.
# set matchbrackets "(<[{)>]}"

## Use the blank line below the title bar as extra editing space.
# set morespace

## Enable mouse support, if available for your system.  When enabled,
## mouse clicks can be used to place the cursor, set the mark (with a
## double click), and execute shortcuts.  The mouse will work in the X
## Window System, and on the console when gpm is running.
# set mouse

## Switch on multiple file buffers (inserting a file will put it into
## a separate buffer).
# set multibuffer

## Don't convert files from DOS/Mac format.
# set noconvert

## Don't display the helpful shortcut lists at the bottom of the screen.
# set nohelp

## Don't pause between warnings at startup.  Which means that only the
## last one will be readable (when there are multiple ones).
# set nopauses

## Don't add newlines to the ends of files.
# set nonewlines

## Don't wrap text at all.
set nowrap

## Set operating directory.  nano will not read or write files outside
## this directory and its subdirectories.  Also, the current directory
## is changed to here, so any files are inserted from this dir.  A blank
## string means the operating-directory feature is turned off.
# set operatingdir ""

## Remember the cursor position in each file for the next editing session.
# set positionlog
## (The old form, 'poslog', is deprecated.)

## Preserve the XON and XOFF keys (^Q and ^S).
# set preserve

## The characters treated as closing punctuation when justifying
## paragraphs.  They cannot contain blank characters.  Only closing
## punctuation, optionally followed by closing brackets, can end
## sentences.
# set punct "!.?"

## Do quick status-bar blanking.  Status-bar messages will disappear after
## 1 keystroke instead of 26.  Note that "constantshow" overrides this.
# set quickblank

## The email-quote string, used to justify email-quoted paragraphs.
## This is an extended regular expression if your system supports them,
## otherwise a literal string.
## If you have extended regular expression support, the default is:
# set quotestr "^([     ]*[#:>\|}])+"
## Otherwise:
# set quotestr "> "

## Fix Backspace/Delete confusion problem.
# set rebinddelete

## Fix numeric keypad key confusion problem.
# set rebindkeypad

## Do extended regular expression searches by default.
# set regexp

## Put the cursor on the highlighted item in the file browser;
## useful for people who use a braille display.
# set showcursor

## Make the Home key smarter.  When Home is pressed anywhere but at the
## very beginning of non-whitespace characters on a line, the cursor
## will jump to that beginning (either forwards or backwards).  If the
## cursor is already at that position, it will jump to the true
## beginning of the line.
# set smarthome

## Use smooth scrolling as the default.
# set smooth

## Enable soft line wrapping (AKA full-line display).
# set softwrap

## Use this spelling checker instead of the internal one.  This option
## does not have a default value.
# set speller "aspell -x -c"

## Allow nano to be suspended.
set suspend

## Use this tab size instead of the default; it must be greater than 0.
# set tabsize 8

## Convert typed tabs to spaces.
# set tabstospaces

## Save automatically on exit; don't prompt.
# set tempfile

## Snip whitespace at the end of lines when justifying or hard-wrapping.
# set trimblanks

## Disallow file modification.  Why would you want this in an rcfile? ;)
# set view

## The two single-column characters used to display the first characters
## of tabs and spaces.  187 in ISO 8859-1 (0000BB in Unicode) and 183 in
## ISO-8859-1 (0000B7 in Unicode) seem to be good values for these.
## The default when in a UTF-8 locale:
# set whitespace "»·"
## The default otherwise:
# set whitespace ">."

## Detect word boundaries differently by treating punctuation
## characters as parts of words.
# set wordbounds

## The characters (besides alphanumeric ones) that should be considered
## as parts of words.  This option does not have a default value.  When
## set, it overrides option 'set wordbounds'.
# set wordchars "<_>."


## Paint the interface elements of nano.
## These are examples; by default there are no colors.
# set titlecolor brightwhite,blue
# set statuscolor brightwhite,green
# set selectedcolor brightwhite,magenta
# set numbercolor cyan
# set keycolor cyan
# set functioncolor green
## In root's .nanorc you might want to use:
# set titlecolor brightwhite,red
# set statuscolor brightwhite,red
# set selectedcolor brightwhite,cyan
# set numbercolor magenta
# set keycolor brightmagenta
# set functioncolor magenta


## Setup of syntax coloring.
##
## Format:
##
## syntax "short description" ["filename regex" ...]
##
## The "none" syntax is reserved; specifying it on the command line is
## the same as not having a syntax at all.  The "default" syntax is
## special: it takes no filename regexes, and applies to files that
## don't match any other syntax's filename regexes.
##
## color foreground,background "regex" ["regex"...]
## or
## icolor foreground,background "regex" ["regex"...]
##
## "color" will do case-sensitive matches, while "icolor" will do
## case-insensitive matches.
##
## Valid colors: white, black, red, blue, green, yellow, magenta, cyan.
## For foreground colors, you may use the prefix "bright" to get a
## stronger highlight.
##
## To use multi-line regexes, use the start="regex" end="regex"
## [start="regex" end="regex"...] format.
##
## If your system supports transparency, not specifying a background
## color will use a transparent color.  If you don't want this, be sure
## to set the background color to black or white.
##
## All regexes should be extended regular expressions.
##
## If you wish, you may put your syntax definitions in separate files.
## You can make use of such files as follows:
##
## include "/path/to/syntax_file.nanorc"
##
## Unless otherwise noted, the name of the syntax file (without the
## ".nanorc" extension) should be the same as the "short description"
## name inside that file.  These names are kept fairly short to make
## them easier to remember and faster to type using nano's -Y option.
##
## To include all existing syntax definitions, you can do:
include "/usr/share/nano/*.nanorc"


## Key bindings.
## See nanorc(5) (section REBINDING KEYS) for more details on this.
##
## The following two functions are not bound to any key by default.
## You may wish to choose other keys than the ones suggested here.
# bind M-B cutwordleft main
# bind M-N cutwordright main

## Set this if your Backspace key sends Del most of the time.
# bind Del backspace all

/etc/nanorcファイルに、設定可能な内容のほとんどがサンプルとしてまとまっている。このサンプルの中身を整理すると次のようになる。

設定 内容
set atblanks 行折り返しが有効になっている場合、タブまたは空白の場所で改行するように変更
set autoindent オートインデント
set backup ファイル名にチルダを加えたファイルをバックアップファイルとして使用
set backupdir "" バックアップファイルを保存するディレクトリを指定
set boldtext リバースビデオテキストの代わりにボールドテキストを使用
set brackets ""')>]}" 閉じ括弧として扱われる文字を指定
set casesensitive 大文字小文字を区別して検索を実施
set constantshow ステータスバーにカーソル位置を常に表示。quickblankよりも有効
set cutfromcursor カーソル位置から行末までを切り取り
set fill -8 テキストの折返しやパラグラフの長さを指定。0または負値だった場合、画面幅から引いた値が幅として使われる
set historylog 検索や置換に使われた文字列を次のセッションでも利用できるように記録しておく
set linenumbers 左端に行番号を表示
set locking Vim風のロックファイルを使用
set matchbrackets "(]}" 括弧検索の対象となる開始と終了の文字を指定
set morespace タイトルバーの下の空白行を編集スペースとして利用
set mouse マウスサポート機能を有効化(利用できる場合のみ)
set multibuffer マルチバッファ機能を有効化
set noconvert DOS/Macフォーマットからのファイル変換を無効化
set nohelp スクリーン下部のショートカットキー表示を無効化
set nopauses 起動時にワーニング表示を抑制(複数のファイルが指定された場合には最後のひとつだけが読み込まれる)
set nonewlines ファイルの末尾に改行を追加しない
set nowrap テキストの折り返しを行わない
set operatingdir "" 指定したディレクトリとそのサブディレクトリ以外の場所のファイルを開けないように設定。""はこの機能の無効化を意味する
set positionlog 次のセッションでも利用できるようにファイルのカーソルの位置を記録しておく
set preserve XON (^Q)とXFF(^S)を保存
set punct "!.?" パラグラフの終了文字を指定
set quickblank ステータスバーの表示を無効化。constantshowの方が有効
set quotestr "^([ ]∗[#:>\|}])+" 電子メールにおける引用文字
set rebinddelete BS/Delキー問題を解決
set rebindkeypad 数字キー問題を解決
set regexp 検索で拡張正規表現を使用
set showcursor 点字ディスプレイを利用する方向けの機能
set smarthome スマートホームキーを有効化
set smooth スムーズスクロールを有効化
set softwrap 行折り返しを有効化
set speller "aspell -x -c" 内部スペルチェッカではなく使用する外部スペルチェッカを指定
set suspend サスペンドを許可
set tabsize 8 タブサイズを設定
set tabstospaces 入力されたタブを空白に展開
set tempfile 終了時に自動的に保存する機能を有効化
set trimblanks 折り返し時に行末に空白を挿入しない
set view ファイルの修正を禁止
set whitespace "»·" タブおよび空白の意味する最初の1文字を指定
set wordbounds 句読文字を単語の一部として扱うように変更
set wordchars "<_>." 単語の一部とみなす文字を指定。wordboundsよりも有効
set titlecolor brightwhite,blue タイトルカラーを設定
set statuscolor brightwhite,green ステータスカラーを設定
set selectedcolor brightwhite,magenta 選択カラーを設定
set numbercolor cyan 数値カラーを設定
set keycolor cyan キーカラーを設定
set functioncolor green ファンクションカラーを設定
bind M-B cutwordleft main cutwordleftをキーに設定
bind M-N cutwordright main cutwordrightをキーに設定
bind Del backspace all BSがほとんどの場合でDelを送信する場合に行う設定

なお、setの逆はunsetだ。明示的に機能を無効にする場合はsetではなくunsetを使えばよい。

ユーザーの設定は ~/.nanorc に書く

nanoの設定ファイルはいくつかの場所に置いておくことができる。ユーザー個人の設定は、~/.nanorcが最も簡単なデプロイ先だ。ここに設定を書いておけば、そのユーザーが使うnanoはその設定を用いるようになる。

例えば、ここでは~/.nanorcの作成例として、次のような設定を行った場合を紹介しよう。比較的好まれる設定ではないかと思う。

# オートインデント
set autoindent

# ステータスバー表示
set constantshow

# 行番号表示
set linenumbers

# タイトルバー直下行も編集領域として使用
set morespace

# ショートカット表示を無効化
set nohelp

# ファイルの末尾に改行を追加しない
set nonewlines

# 折り返し有効化
set softwrap

# 終了時に自動的に保存する機能を有効化
set tempfile

たとえば何も設定を行っていない状態で/etc/nanorcファイルをnanoで編集しようとすると、次のようなスクリーンが表示される。

  • デフォルト設定で動作するnano

    デフォルト設定で動作するnano

先程の設定を有効にした状態のnanoで/etc/nanorcファイルを編集すると、次のようなスクリーンが表示される。

  • カスタム設定で動作するnano

    カスタム設定で動作するnano

なお、この状態で~/.nanorcをnanoで編集すると次のようなスクリーンが表示される。

  • カスタム設定で動作するnano その2

    カスタム設定で動作するnano その2

nanoは操作がシンプルだが、逆にいえば、慣れてくるといくつかの操作は煩わしくなってくるだろう。Ctrl-Xで終了する時にいちいち確認と保存先を指定する必要があることなどだ。set tempfileといった設定を行えばこの操作を回避できる。この辺りは、慣れに応じて設定を変えていってもらえればと思う。