読者です 読者をやめる 読者になる 読者になる

Λlisue's blog

つれづれなるままに更新されないブログ

自前ビルドしたVimをvisudoなどのデフォルトエディタに使用する

コマンド構文などを忘れそうなのでメモ。

経緯

  1. ターミナルにてsudo gvim などをすると「ディスプレイをオープンできません(cannot open display)」と怒られる
  2. DISPLAYとかの設定が引き継がれてないんだなーとか思いググるとやっぱりそんな感じ(めも - sudoをかますとcannot open displayと怒られる
  3. /etc/sudoers弄るかーと思いおもむろにsudo visudoと叩く
  4. visudoなのにnanoなの!ま・た・お・ま・え・か(Ubuntuのvisudoエディタが変nanoになる
  5. 「毎度毎度OS再インストールするたびに設定するの糞面倒臭いんだよ…」とか思いながら仕方がないのでsudo update-alternatives --config editorを叩く
  6. vim がリストに表示されない( ゚д゚)ポカーン
  7. 「あ…自前でvimビルドしたんだっけ…」
  8. alternativesに自分で項目追加するのどうするん??

ついでなのでalternativesに項目を追加するところから「ディスプレイをオープンできません」を解決するところまでダイジェストで紹介します。

alternatives に vim を追加

僕のように自前でvimをビルドした場合はalternativesにvimの項目がありません。 普通にsudo apt-get install vimとかで入れた人は読み飛ばしてください。

alternativesですが下記コマンドでeditorというグループに/usr/local/bin/vimを追加できます。なおこのeditorというグループは/usr/bin/editorとリンクファイルを作成するために使用するグループです(コマンドの構文的にはupdate-alternatives --install リンクファイルパス グループ名 実体パス 優先度となります)。

% sudo update-alternatives --install /usr/bin/editor editor `which vim` 100

僕の環境ではnanoの優先度が40だったためそれよりも優先度が高くなるように100にしました。この辺は適当でいいと思います。

参考: Alternativeに項目を追加する

alternatives にて editor に vim を指定

vimの優先度をnanoなどよりも低く設定した場合下記コマンドにて明示的にvimをeditorとして指定してやる必要があります。僕のようにvimの優先度を何よりも高く設定した場合は不要です。

% sudo update-alternatives --config editor    
alternative editor (/usr/bin/editor を提供) には 3 個の選択肢があります。

  選択肢    パス              優先度  状態
------------------------------------------------------------
* 0            /usr/local/bin/vim   100       自動モード
  1            /bin/ed             -100       手動モード
  2            /bin/nano            40        手動モード
  3            /usr/local/bin/vim   100       手動モード

現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください: 

使用したいエディタの選択肢番号を押してEnterで設定されます。

visudo にて DISPLAY と XAUTHORITY をキープするように設定

X Window System はゴニョゴニョしてるので DISPLAY と XAUTHORITY という環境変数がないと動きません(詳細は環境変数DISPLAYとかttt: (X WINDOW SYSTEM) 昔、XHOSTって使っちゃいけないコマンドだと教わったのですが・・・XAUTHをよろしくを参照するといいと思います)。

したがってターミナルにてsudo visudoと叩きDefaults env_resetとある行のあたりを下記のように修正します。

#Defaults env_reset
Defaults    env_keep="DISPLAY XAUTHORITY"

もしすでにDefaults env_keepとあった場合は

Defaults  env_keep="なにか別の設定"
Defaults    env_keep+="DISPLAY XAUTHORITY"

としてください。これで解決します。