環境
- Ubuntu 20.04
- fish(aptでinstall)
- nvim(snapでinstall)
[問題]fishでsudoeditすると$EDITOR, $SUDO_EDITOR, $VISUALを参照してくれない
Ubuntuでログインシェルをfishにしている場合、
config.fishにset EDITOR nvimなどを設定していても、
update-alternativesの設定が優先されてしまう。
bashでexportしておいて、fishを起動すると大丈夫なので、
ログインシェルがbashでそこからfishを起動しているとnvimがちゃんと選ばれる。
ログインシェルをfishにしたら、いきなり躓いたので記録しておく。
TL; DR
config.fishに以下を書いておいて、se [file]
set EDITOR nvim
alias se="export EDITOR=$EDITOR; sudoedit "
ここから以下は、試してみたこと備忘録。
案1 update-alternativesにnvimを登録する
snapで入れているとなかなか面倒。
/snap/bin/nvimを登録しても
snapへのシンボリックリンクなためか、snapの引数としてファイルが渡されてしまう。
# !/bin/bash
/snap/bin/nvim $1
みたいなファイルを作って登録するとうまくいくかもだけど、
スマートさに欠けるので、このアプローチはここで保留。
おそらくaptでNeoVimを入れていればこのアプローチでもいけそう。
案2 bashからやる
ログインシェルがfishの場合、
bash起動して、export EDITOR=nvimして
fishすると大丈夫
つまり、
bash -c "export EDITOR=nvim; sudoedit /etc/hosts"
ならちゃんとnvimが起動する。
でも、このやり方はとても気持ち悪いので却下。
ここで実は、fishでexportして、sudoeditしても大丈夫なことに気づく。
そこで案3へ。
案3 aliasを使う
config.fishに以下を書いておく
set EDITOR nvim
alias se="export EDITOR=$EDITOR; sudoedit "
ちなみに、alias sudoedit="export EDITOR=$EDITOR; sudoedit "という風にsudoeditを上書きはできない。
また、set EDITOR nvimだけではsudoeditに利いてくれないので、exportを使う。
直接config.fishにexportを書くことはできない。
se /etc/hosts
今の所、この案を採用。