最新のnvim
が使いたければflatpak
でインストールするのが簡単である。flatpak install flathub io.neovim.nvim
とすればディストリビューション問わず最新のnvim
がここに!
追記 2023-06-14
以下のパスはユーザflatpak install --user
でインストールした場合となる。設定ファイルのパスは変らないが--user
を付けずシステムでインストールした場合、バイナリーのパスはシステムだと/var/lib/flatpak/exports/
となるのに対して、ユーザでは~/.local/share/flatpak/exports/
となる。
追記ここまで
追記 2023-06-12
やるべきコマンドまとめ
$ ln -v -s /home/$USER/.config/nvim /home/$USER/.var/app/io.neovim.nvim/config/
$ mkdir ~/.var/app/io.neovim.nvim/data/nvim/site/
$ ln -s /home/$USER/git/dotfiles/.vim/autoload /home/$USER/.var/app/io.neovim.nvim/data/nvim/site/autoload
$ mkdir -p $HOME/.local/share/flatpak/app/io.neovim.nvim/x86_64/stable/active/files/tools
$ ln -v -s /home/$USER/.deno /home/$USER/.local/share/flatpak/app/io.neovim.nvim/current/active/files/tools/deno
$ ln -v -s /home/$USER/.local /home/$USER/.local/share/flatpak/app/io.neovim.nvim/current/active/files/tools/local
$ sudo update-alternatives --install /usr/bin/editor editor /home/$USER/.local/share/flatpak/exports/bin/io.neovim.nvim 50
~/.local/share/flatpak/exports/share/applications/io.neovim.nvim.desktop
- Exec=/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=nvim-wrapper io.neovim.nvim
- Terminal=true
+ Exec=kitty -e /usr/bin/flatpak run --branch=stable --arch=x86_64 --command=nvim-wrapper io.neovim.nvim %F
+ Terminal=false
追記ここまで
設定ファイル(init.vim)を読み込ませる
ではあるのだが、GUI上はともかく、CLI上で使うとなるとそのままでは色々不便である。まず、そのままでは~/.config/nvim/init.vim
など読み込んでくれない。
Config file isn’t read from the XDG_CONFIG_HOME · Issue #2 · flathub/io.neovim.nvim · GitHub
ln -v -s /home/$USER/.config/nvim /home/$USER/.var/app/io.neovim.nvim/config/
とシンボリックリンクを貼る。
autoload
ディレクトリ作成
plung.vim
などはどこに?/home/arimasou16/.var/app/io.neovim.nvim/data/nvim/site/autoload
に置くらしい。
$ mkdir ~/.var/app/io.neovim.nvim/data/nvim/site/
$ ln -s /home/$USER/git/dotfiles/.vim/autoload /home/$USER/.var/app/io.neovim.nvim/data/nvim/site/autoload
デスクトップファイルを修正する
ランチャー起動でnvim
と打つと起動するけど、ベースとなるターミナルがgnome-terminal
なので、経由ターミナルを変更する。
~/.local/share/flatpak/exports/share/applications/io.neovim.nvim.desktop
- Exec=/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=nvim-wrapper io.neovim.nvim
- Terminal=true
+ Exec=kitty -e /usr/bin/flatpak run --branch=stable --arch=x86_64 --command=nvim-wrapper io.neovim.nvim %F
+ Terminal=false
CLIの標準エディター(EDITOR)として登録したい
当然ながらsudo update-alternatives --install /usr/bin/editor editor "/usr/bin/flatpak run io.neovim.nvim" 50
なんてやり方では登録できないのでalias
か、ラッパークラスを作成するしかない。
update-alternatives: エラー: alternative path /usr/bin/flatpak run io.neovim.nvim doesn't exist
Adding Flatpak program to Debian alternatives - Super User
~/.local/share/flatpak/exports/bin/io.neovim.nvim
1にラッパーファイルがあるのでそれを登録すれば良い。
sudo update-alternatives --install /usr/bin/editor editor /home/$USER/.local/share/flatpak/app/io.neovim.nvim/current/active/export/bin/io.neovim.nvim 50
io.neovim.nvim
#!/bin/sh
exec /usr/bin/flatpak run --branch=stable --arch=x86_64 io.neovim.nvim "$@"
nvim
として使いたい
alias nvim="flatpak run io.neovim.nvim"
として別名登録してみたが、これだと補完が効かないので、 io.neovim.nvim と全く同じラッパーファイルを nvim としてパスの通ってるディレクトリ配下に作成した。
$ touch ~/.local/bin/nvim
$ chmod 775 ~/.local/bin/nvim
~/.local/bin/nvim
#!/bin/sh
exec /usr/bin/flatpak run --branch=stable --arch=x86_64 io.neovim.nvim "$@"
いや、中身一緒ならln -s -v /home/$USER/.local/share/flatpak/app/io.neovim.nvim/current/active/export/bin/io.neovim.nvim /home/$USER/.local/bin/nvim
とシンボリックリンク貼る方が良いか。chmod
の手間もない。
flatpak run
で叩いてる実物(command)を調べる
しかし、これでもまた不完全で、flatpak
経由では、PATH
がクリーン?されているようで、deno
やら、他のツール(パッケージ)を使えるようにしたい。
flatpak: $PATH environment variable overriden · Issue #137 · daa84/neovim-gtk · GitHubにあるようにflatpak run --env=PATH="$HOME/.deno/bin:$PATH" io.neovim.nvim
とやるも駄目。
$ flatpak run --env=PATH="$HOME/.deno/bin:$PATH" io.neovim.nvim
bwrap: execvp nvim-wrapper: No such file or directory
でもって、flatpak run io.neovim.nvim
で、何を叩いてるのか調べる。flatpak info
を使うとflatpak
情報が調べられる。
$ flatpak info --show-metadata io.neovim.nvim
[Application]
name=io.neovim.nvim
runtime=org.freedesktop.Sdk/x86_64/22.08
sdk=org.freedesktop.Sdk/x86_64/22.08
command=nvim-wrapper
[Context]
shared=network;ipc;
sockets=x11;wayland;fallback-x11;
filesystems=/var/tmp;/tmp;host;
[Extension io.neovim.nvim.tool]
directory=tools
no-autodownload=true
subdirectories=true
add-ld-path=lib
[Extension io.neovim.nvim.Locale]
directory=share/runtime/locale
autodelete=true
locale-subset=true
[Extension io.neovim.nvim.Debug]
directory=lib/debug
autodelete=true
no-autodownload=true
[Build]
built-extensions=io.neovim.nvim.Locale;io.neovim.nvim.Debug;io.neovim.nvim.Sources;
長いが必要なのはcommand
だけなのでflatpak info --show-metadata io.neovim.nvim | grep command
とグレップする。
command=nvim-wrapper
flatpak
上でしばしば/app/bin/hogehoge
と見かけることがある。/app
は大体~/.local/share/flatpak/app/io.neovim.nvim/x86_64/stable/active/files
なのでnvim-wrapper
は、~/.local/share/flatpak/app/io.neovim.nvim/x86_64/stable/active/files/bin/nvim-wrapper
にある。
サンドボックス化されたPATHに他のツールを通す
試しに直で~/.local/share/flatpak/app/io.neovim.nvim/x86_64/stable/active/files/bin/nvim-wrapper
叩くと
./.local/share/flatpak/app/io.neovim.nvim/x86_64/stable/active/files/bin/nvim-wrapper: 行 99: /npmrc: 許可がありません
とそれまで出なかったエラーも出て、更にPATH
が通ってない状態になる。
nvim-wrapper の中身を見る。
|
|
どうやら、
GitHub - flathub/ide-flatpak-wrapper: Wrapper for setting up development environment in flatpak sandbox
というflatpak
開発の為にIDEなど他のツールが必要とするアプリで環境設定を上手くセットしてくれるラッパーが組込まれているっぽい。
/app/tools/
配下に上手くシンボリックリンクを貼れば上手くやれそう。
$ mkdir -p $HOME/.local/share/flatpak/app/io.neovim.nvim/x86_64/stable/active/files/tools
$ ln -v -s /home/$USER/.deno /home/$USER/.local/share/flatpak/app/io.neovim.nvim/current/active/files/tools/deno
$ ln -v -s /home/$USER/.local /home/$USER/.local/share/flatpak/app/io.neovim.nvim/current/active/files/tools/local
で、flatpak run --env=FLATPAK_IDE_LOGLEVEL=1 io.neovim.nvim
として、ログを有効にして起動。
nvim-wrapper-wrapper: Adding /app/tools/deno/bin to PATH
nvim-wrapper-wrapper: Adding /app/tools/local/lib/python3.10/site-packages to PYTHONPATH
nvim-wrapper-wrapper: Adding /app/tools/local/bin to PATH
nvim-wrapper-wrapper: Setting up NPM packages
nvim-wrapper-wrapper: Setting up Cargo packages
nvim-wrapper-wrapper: Setting up Python packages
nvim-wrapper-wrapper: Setting up Ruby packages
app/tools/deno/bin
、app/tools/local/bin
のPATHが通ってdeno
が必要なプラグインとか動くようになった!
残りの課題
大分良い感じになって、殆どapt
などでパッケージをインストールした時と同じような感じになったのだけど…
flatpak
のサンドボックス化された箇所を開こうとすると、当然というか読めない。例えば、~/.local/share/flatpak/exports/share/applications/io.neovim.nvim.desktop
といったデスクトップファイルや~/.local/share/flatpak/app/io.neovim.nvim/current/active/export/bin/io.neovim.nvim
といったラッパーファイルなどである。
それから、自作ファンクションで!firefox URL
みたいにブラウザを起動させようとしたら、firefox
はPATH
が通ってなかった。
ln -v -s /usr /home/arimasou16/.local/share/flatpak/app/io.neovim.nvim/current/active/files/tools/usr
サンドボックスの意味とは?なんて言われそうなことしてみたけど、駄目だった…(後で勿論消した)
:!firefox
/app/tools/local/bin/firefox: 行 2: /usr/bin/firefox: そのようなファイルやディレクトリはありません
となってしまうんだな…/usr/bin/
配下のツールはどうしたらいいんだろうか…これをラッパーしても結果は同じ。
ripgrep
も動かない…まあ実行ファイル落してきてユーザ(HOME
配下の実行ファイル)として、置いちゃえ2。
Releases · BurntSushi/ripgrep · GitHubから ripgrep-13.0.0-x86_64-unknown-linux-musl.tar.gz ダウンロードして~/.local/bin/
配下に置いたら動いたので良し!/usr/bin/rg
はapt remove
した。
まあ、ブラウザは
iamcco/markdown-preview.nvimの<Plug>(openbrowser-smart-search)
3では開けるので、
tyru/open-browser.vimプラグイン導入しての:OpenBrowser URL
な書き方で対応した。
他にも色々ありそうだけど、とりあえず本物?本家と同じように動くようにはなった。まあ Releases · neovim/neovimからTarball落としてPATH通す方が全然楽だと思う。