ちょっと久しぶりにNeovimを試してみようと思って 立上げたところ白黒画面で全く色が付かない状態になってしまいました。
表示からしてプラグインとかはロードできている感じでしたが色が出ない。 colorschemeも想定通りにロードされている状態。
調べてみたところ問題は環境変数のTERM
の値でした。
- Neovimの設定
- 色が付かない
- TERM=screen-256colorとしてしまってもよいのか?
- NeovimをLinuxにローカルインストールするのはすごい簡単
- ESCが効かない問題は解決した?
Neovimの設定
Neovimでは設定ファイルは$HOME/.config/nvimになります。
基本的にはVimの$HOME/.vimrcをそのまま使いこなせますし、 プラグインなども同じものを使えます。
なので$HOME/.config/nvimは$HOME/.vimrcへのシンボリックリンクにしています。
一部切り替えが必要な部分もありますが
has('nvim')
などの値を見たりして設定を変更しています。
colorschemeは defaultにちょっと手を加えただけで十分だと気づいたので自作のものを使っています。
色が付かない
Neovimを使ってみて基本的にVimと同じ動作になることを期待してましたが色が全く付きませんでした。
以前試したときはそこは特に問題なかったと思うのですが。
いろいろ試していると、上のcoloschemeのプラグインの中でしている
set background=dark
をした場合に色がすべて消えることがわかりました。
set background=light
とすると色が付きます。
この設定はバックグラウンド自体を設定するのではなく
バックグラウンドに合わせて対応しているものに関してcolorschemeなどで設定される色を変更するものですが、
dark
にするとすべて消える状態です。
なので上のプラグインの中で本来dark
としたときに変わる色をすべて設定しても良いのですが、
かなり面倒だし汚くなってしまいます。
ということで検索してみたところ、以下のIssueがひっかりました。
set background is dark removes syntax highlighting · Issue #3024 · neovim/neovim
環境変数のTERM
の値が問題だ、ということです。
TERM
の値を調べてみるとたしかにscreen
になっていました。
別のターミナルを立ち上げてGNU screenを立ち上げる前のTERM=xterm-256color
の状態だと確かに問題なく色が付きましたし、
screenを立ち上げたあとでもTERM=screen-256color
とすればNeovimでset background=dark
でも問題なく色が付きました。
なので問題を解決するためには.screenrc
に
term "screen-256color"
を書いておけばTERM
が毎回screen-256color
となるので解決されます。
また、tmuxを使っていて同じ問題を抱えているなら
set -g default-terminal "screen-256color"
を.tmux.conf
に加えることで解決できます。
TERM=screen-256colorとしてしまってもよいのか?
実はこの設定は以前は入れていたものをある時からコメントアウトしていたものになります。
この設定をしてしまうと、そこからssh
した先にscreen-256color
などの値がないときに
エラーが出てそれこそVimでのカラー表示とかが上手くできなくなります。
その辺いろいろ解決しようとしたのが上の記事ですが、
余計なことを抑えようと思ってsshrc
とかも使うのをやめて
一応使う限りのところでは問題のないTERM=screen
を使うことにしていました。
特にterm
指定をしなければこれが指定されます。
xterm-256color
とかに設定するとssh
の問題は解決できますが、
TERM
がscreen
を含んでいることによっていろいろ設定することがあるので
そうは出来ないところ。
今回接続先の問題がすべて解決したわけではないんですが、 しばらくは個別に接続先の.bashrcで対処したりどうにかしておこうと思っています。
NeovimをLinuxにローカルインストールするのはすごい簡単
NeovimはLinux用に AppImage と呼ばれる形式でバイナリを配布しています。
インストールは欲しいバーションをダウンロードして実行権限を与えて適当な所に置くだけ
$ curl -L https://github.com/neovim/neovim/releases/download/v0.3.1/nvim.appimage -o nvim
$ mv nvim ~/bin/nvm
$ chmod 755 ~/bin/nvim
Linux用ということでディストリビューションによらずどのLinuxでも実行できる実行ファイルになっています。
これによってコンパイルとかしなくてもすぐに使えます。
どうやって作るんだろう、と思ってみてみると、どうやら 各ディストリビューションに対応したバイナリを集めてまとめ上げてるみたいです。
なのでファイル自体は結構大きくて、Macで入れたnvim
が2.4MBくらいなのに対して20MB位になっています。
yum
やapt-get
でも取れる様になっているので
システムとして入れるのであればそちらのが良いかと思います。
ESCが効かない問題は解決した?
以前Neovimを試したときに辞めた理由として、 Puttyを使うときにESCが上手く送れなくて諦めていました。
これを今試してみるとどうも以前感じていた不具合はなくなっている感じです。
Commit履歴を見てもこれに該当するものはちょっと見つけれられませんでしたが、 少なくともVimでは問題なかった問題だったはずなのでソフト的に何か変わったのだと思います。
上の記事の中に書いてますが、最後のESCがPutty(+screen+neovim)だと上手く送れない、 ということが解決できれば 逆にVimの中では上手く扱えないM-X的なAltキーなどを使ったバインドが Neovimではきちんと使えるのでむしろNeovimの方が良くなります。
ということでNeovimを使わない理由がなくなったので Neovimを使って行こうと思います。 もしかしたらこの辺のESC周りで上手くいかない部分もあるかもしれませんが しばらく使い続けないと気づかないこともあるので。
上にLinuxへのインストールを書きましたが、Macでも
$ brew install neovim
してインストールしています。
また、.bashrcでは
if type nvim >& /dev/null;then
alias vi="nvim" # vi->nvim
alias memo="nvim ~/.memo.md"
alias vid="nvim -d"
alias vinon="nvim -u NONE"
elif type vim >& /dev/null;then
alias vim="vim -X" # no X
alias vi="vim" # vi->vim
alias memo="vim ~/.memo.md"
alias vid="vim -d"
alias vinon="vim -u NONE"
fi
な感じのエイリアスを貼ってvi
でnvim
を呼ぶ様にしています。