14
14

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 5 years have passed since last update.

Vimでtermguicolorsをオンにしたらちょっとハマった話

Posted at

はじめに

 iTerm2など24bitカラーに対応している端末上では、Vimの termguicolors オプションをオンにすることで、True Colorでのシンタックスハイライトが可能になります。基本的にはGUIのVimと同様のハイライトになるのですが、ちょっとハマったことがあったので記録しておきます。

 True Colorのシンタックスハイライトの導入自体については、以下の記事などを参考にしてください。

TL;DR

 24bitカラー対応端末上において、termguicolors をオンにすると、使用されるのは guifgguibg のみ。gui は使用されず、cterm の指定が有効になる。

環境

  • iTerm2 (build 3.0 以上)
  • MacVim-Kaoriya (Vim 7.4.1770 以上)

※ Mac標準のTerminal.appは24bitカラーに対応していない。対応している端末については以下のページを参照のこと。
True Colour (16 million colours) support in various terminal applications and terminals
※ Vimについては、termguicolors が有効になっていること。vim --version で確認できる。

問題

 vim-colors-japanesqueというaerealさん制作の素晴らしいカラースキームがあるのですが、これをiTerm2上のVimで導入したところ、検索したワードのハイライトが意図した通りに表示されませんでした。これを理由に、この素晴らしいカラースキームを手放すのは惜しいので、原因を探ってみることにしました。

 これは、tab というワードを検索した時の表示です。普段Vimをお使いの方ならお気づきかと思いますが、ハイライトに違和感があります。大抵のカラースキームでは、ヒットしたワードの背景が明るくハイライトされるからです。

スクリーンショット 2017-06-02 21.26.18.png

 ハイライトの確認を行います。

スクリーンショット 2017-06-02 21.25.14.png

 gui=reverse および guifg=#EFBB24 が指定されているので、ヒットしたワードの背景色が黄色くなり、文字自体は茶色くなっているはずです。しかし、実際にはそうなっていません。

実験

 set termguicolors していれば gui が使用されると思いこんでいたので、一先ず以下のようにコマンドを実行しました。

:highlight Search gui=NONE

 これで gui=reverse が外れるので、guifgguibg が入れ替わるはずです。ところが、実際には変化がありませんでした。再度、ハイライトを確認してみます。

スクリーンショット 2017-06-02 21.27.33.png

 ちゃんと gui がなくなっていますが、これはどうもおかしいです。termguicolors の挙動を調べてみることにしました。

調査

 Vim日本語ドキュメントの termguicolors オプションの項には、このようにありました。

'termguicolors' 'tgc'

オンのとき、highlight-guifg と highlight-guibg がターミナル内で使われる(24ビットカラー)。ISO-8613-3 互換なターミナルが必要。このオプションを設定しても機能しない (色が UI に付かない) 場合は、xterm-true-color を読むと助けになるかもしれない。

引用: options - Vim日本語ドキュメント#'termguicolors'

 termguicolors をオンにして使用されるのは guifgguibg だけで、特に書いてないですが、gui は使われません。したがって、reversecterm に指定する必要があります。

解決

 cterm に指定すれば良いことがわかったので、以下のコマンドを実行します。

:highlight Search cterm=reverse

スクリーンショット 2017-06-02 21.28.52.png

 そして確認。

スクリーンショット 2017-06-02 21.29.23.png

 おお! うまくいきました。カラースキームの制作者様には、cterm にも gui と同じ値を入れるようPull Requestを送信しておきました。

 なお、こちらの修正と、若干の色の変更を加えたカラースキームを以下に用意してあります。良ければお使いください。
foooomio/vim-colors-japanesque: The colorscheme featuring Japanese traditional colors.

感想

 guifgguibg のみが使用されるというのは、非常にトリッキーな仕様だと思うので、gui も使用されるよう改善を希望するのですが、実際問題どうなのでしょうね。undercurl のようにGUIでしか利用できない属性もあるので、難しいのでしょうか?(とはいえ undercurl が使用できないときは underline が代わりに使われるのですが。)

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?