新しく Ubuntu をセットアップしたマシンで git を初めて使った時とか、 nano が起動してびっくりしますよね。
git config で core.editor を設定したら git は vim を使うようにできるんですけど、 git 以外でも crontab -e
でも nano が起動したりするんで、どうせならもっと根本から vim を使うように設定する方法を探してみましょう。
(なお、調べてみた動機は、 editor
コマンドで起動するエディタを変更しようとして select-editor
ってコマンドを試してみたけど上手く行かずにモヤモヤしてたことです。)
git
7.1 Git のカスタマイズ - Git の設定 # 基本的なクライアントのオプション
core.editor
コミットやタグのメッセージを編集するときに使うエディタは、ユーザーがデフォルトエディタとして設定したものとなります。デフォルトエディタが設定されていない場合は Vi エディタを使います。このデフォルト設定を別のものに変更するには core.editor を設定します。
とありますが、これは正確ではありません。これが本当なら nano じゃなくて vi が起動するはずですもんね。
git が起動するエディターは、 git の論理変数 GIT_EDITOR
で選択されます。
man git-var
GIT_EDITOR
Text editor for use by Git commands. The value is meant
to be interpreted by the shell when it is used. Examples:
~/bin/vi, $SOME_ENVIRONMENT_VARIABLE, "C:\Program
Files\Vim\gvim.exe" --nofork. The order of preference is
the $GIT_EDITOR environment variable, then core.editor
configuration, then $VISUAL, then $EDITOR, and then the
default chosen at compile time, which is usually vi.
$ echo $VISUAL
$ echo $EDITOR
$ git var GIT_EDITOR
editor
ということで、コンパイル時に指定される GIT_EDITOR のデフォルト値が通常は vi だけど、 Debian / Ubuntu はカスタマイズして editor コマンドを使っているようです。
/usr/bin/editor
$ file /usr/bin/editor
/usr/bin/editor: symbolic link to /etc/alternatives/editor
$ ll /etc/alternatives/editor
lrwxrwxrwx 1 root root 9 Dec 29 20:16 /etc/alternatives/editor -> /bin/nano*
ということで、 editor
コマンドは alternatives によって管理されているシンボリックリンクです。変更するには次のようにします。
$ sudo update-alternatives --config editor
There are 4 choices for the alternative editor (providing /usr/bin/editor).
Selection Path Priority Status
------------------------------------------------------------
* 0 /bin/nano 40 auto mode
1 /bin/ed -100 manual mode
2 /bin/nano 40 manual mode
3 /usr/bin/vim.basic 30 manual mode
4 /usr/bin/vim.tiny 10 manual mode
Press <enter> to keep the current choice[*], or type selection number: 3
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor (editor) in manual mode
つまり、変更するには root が必要なんですね。 root が無いときは、環境変数 VISUAL
か EDITOR
を設定するのが、 git よりも根本でエディタを設定するのが良さそうです。
crontab -e
man crontab
The -e option is used to edit the current crontab using the
editor specified by the VISUAL or EDITOR environment vari‐
ables. After you exit from the editor, the modified crontab
will be installed automatically. If neither of the environ‐
ment variables is defined, then the default editor
/usr/bin/editor is used.
ということで、これも EDITOR
, VISUAL
環境変数で制御でき、デフォルトは /usr/bin/editor
になっています。
なんですが、これも Debian / Ubuntu カスタマイズが入っているようで、実際に起動されるのは editor じゃなくて sensible-editor コマンドでした。
sensible-editor / select-editor
man sensible-editor
DESCRIPTION
sensible-editor, sensible-pager and sensible-browser make
sensible decisions on which editor, pager, and web browser to
call, respectively. Programs in Debian can use these scripts
as their default editor, pager, or web browser or emulate
their behavior.
SEE ALSO
Documentation of the EDITOR, VISUAL and PAGER variables in
environ(7) and select-editor(1) for changing a user's default
editor
ということで、これは Debian 独自の、デフォルトのエディタ/ページャー/ブラウザを起動するコマンドです。
SEE ALSO を追いかけてみましょう。
man environ
EDITOR/VISUAL
The user's preferred utility to edit text files.
man select-editor
The results are stored as
SELECTED_EDITOR in ~/.selected_editor, which is sourced and
used by sensible-editor. SELECTED_EDITOR is overridden by
the VISUAL and EDITOR environment variables.
$ select-editor
Select an editor. To change later, run 'select-editor'.
1. /bin/ed
2. /bin/nano <---- easiest
3. /usr/bin/vim.basic
4. /usr/bin/vim.tiny
Choose 1-4 [2]: 3
$ cat ~/.selected_editor
# Generated by /usr/bin/select-editor
SELECTED_EDITOR="/usr/bin/vim.basic"
~$ export EDITOR=nano
$ sensible-editor # nano が起動される
ということで、 select-editor
コマンドを使って sensible-editor
コマンドで起動するエディタを設定できるものの、 EDITOR
環境変数の方が強いです。
結論
-
EDITOR
,VISUAL
環境変数で、crontab -e
,git
,sensible-editor
全てのコマンドで起動するエディタを指定できる。ただしeditor
コマンドは別。- そして
EDITOR
環境変数を設定すると、select-editor
コマンドはHOMEディレクトリに.selected_editor
っていうゴミファイルを作るだけのゴミコマンドになる。
- そして
-
editor
コマンドで起動するエディタは alternatives で管理されているので root が無いと変更不可能。- root を持っていて、同じマシンのユーザーと戦争にならないなら vi とか vim にしてしまおう。
-
editor
コマンドを使うようなコマンドは大抵先にEDITOR
環境変数を見てくれるので、 root を持って無くてもほぼ困らないはず。
- 僕以外にも
select-editor
とeditor
が無関係なことにモヤモヤを抱えてた人が居たら全部 Debian カスタマイズのせい。