BETA

iTerm2で背景半透明とPowerlineとvimの3者の相互両立

投稿日:2018-11-03
最終更新:2018-11-03

この記事は何?

  • iTermで背景を半透明にしたい
  • Powerline系の設定を使いたい
  • vimを使いたい

の3者を同時に満たしたい人のための設定を書いています

結論は何?

  • iTerm2では keep background colors opaque を設定しましょう
  • vimでは、バックグラウンド系の色を NONE に設定しましょう。たとえば
    highlight! Normal ctermbg=NONE guibg=NONE
    highlight! NonText ctermbg=NONE guibg=NONE
    highlight! LineNr ctermbg=NONE guibg=NONE

説明

iTerm2で半透明にする設定を行うと、コマンドライン側で 背景色を陽に指定している部分も、その色ではなく半透明化された色になります。 一方で文字の部分は半透明化されません。

この挙動は普段は気にならないのですが、Powerlineのような "文字と背景色を使って装飾をする" タイプのシェル環境を使っていると、表示が崩れてしまうため気になります。

この問題に対する対処として、iTerm2側では keep background colors opaque という設定値があります。 これを設定すると背景色が陽に指定されている場合は不透明として扱い それ以外では半透明扱いして透過するという挙動になるため Powerline等と兼ね合いさせることができます。

しかしこの設定を行うと、vimで問題が生じます。 つまりvimのカラースキームでは背景色を陽に指定するため、その部分の色が不透明扱いされてしまい、起動している間は、何も透過されていない状態になります。 たとえば以下のスクリーンショットは、半透明設定をしているiTerm2上でneovimを起動した所です。

見ての通り、ほぼ全域が不透明になってしまっています。 これはアプリケーションの挙動としては正しいですが、意図に反しています。

そこでvim側で、陽にhighlightを設定することで背景色を落とし、半透明にしたい部分を半透明にしましょう。 カラースキームを読み込んだ後で

highlight! Normal ctermbg=NONE guibg=NONE
highlight! NonText ctermbg=NONE guibg=NONE
highlight! LineNr ctermbg=NONE guibg=NONE

のような設定を行います。 これを行ったのが以下のスクリーンショットです。

上手くいっていますね!

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@rugamagaの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう