rcmdnk's blog

Modern Vim: Craft Your Development Environment with Vim 8 and Neovim

ちょっと久しぶりにNeovimを試してみようと思って 立上げたところ白黒画面で全く色が付かない状態になってしまいました。

表示からしてプラグインとかはロードできている感じでしたが色が出ない。 colorschemeも想定通りにロードされている状態。

調べてみたところ問題は環境変数のTERMの値でした。

Neovimの設定

Neovimでは設定ファイルは$HOME/.config/nvimになります。

基本的にはVimの$HOME/.vimrcをそのまま使いこなせますし、 プラグインなども同じものを使えます。

なので$HOME/.config/nvim$HOME/.vimrcへのシンボリックリンクにしています。

一部切り替えが必要な部分もありますが has('nvim')などの値を見たりして設定を変更しています。

dotfiles/.vimrc at master · rcmdnk/dotfiles

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の問題は解決できますが、 TERMscreenを含んでいることによっていろいろ設定することがあるので そうは出来ないところ。

今回接続先の問題がすべて解決したわけではないんですが、 しばらくは個別に接続先の.bashrcで対処したりどうにかしておこうと思っています。

NeovimをLinuxにローカルインストールするのはすごい簡単

NeovimはLinux用に AppImage と呼ばれる形式でバイナリを配布しています。

Installing Neovim · neovim/neovim Wiki

Releases · neovim/neovim

インストールは欲しいバーションをダウンロードして実行権限を与えて適当な所に置くだけ

$ 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でも実行できる実行ファイルになっています。

これによってコンパイルとかしなくてもすぐに使えます。

どうやって作るんだろう、と思ってみてみると、どうやら 各ディストリビューションに対応したバイナリを集めてまとめ上げてるみたいです。

Creating AppImages · AppImage/AppImageKit Wiki

なのでファイル自体は結構大きくて、Macで入れたnvimが2.4MBくらいなのに対して20MB位になっています。

yumapt-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

な感じのエイリアスを貼ってvinvimを呼ぶ様にしています。

Sponsored Links
Sponsored Links

« Yankround.vimを使ったクリップボード共有 ブラウザで'この接続ではプライバシーが保護されません'なサイトに直接アクセスする方法 »

}