Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
17
Help us understand the problem. What is going on with this article?
@methane

自動で起動されるエディタを nano から vim (または emacs 等) へ変更する

More than 3 years have passed since last update.

新しく 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 が無いときは、環境変数 VISUALEDITOR を設定するのが、 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-editoreditor が無関係なことにモヤモヤを抱えてた人が居たら全部 Debian カスタマイズのせい。
17
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
methane
Python Golang
klab
モバイルオンラインゲーム、その他スマートフォン関連サービス、及びサーバーインフラ開発・運用

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
17
Help us understand the problem. What is going on with this article?