0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

fish-shell + NeoVimでsudoeditしたい

Last updated at Posted at 2021-04-02

環境

  • 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

今の所、この案を採用。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?