Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

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

$
0
0

はじめに

 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が代わりに使われるのですが。)


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>