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

vimのカラースキームをfishのカラースキームに�変換するプラグイン

$
0
0

TL;DR

記事タイトルそのままですが,vimのカラースキームをfishのカラースキームに変換するプラグインを作りました.

ryotako/fish-vimcolor

vimcolor.mov.gif

はじめに

今回こういったプラグインを作ろうと思ったきっかけは,愛用しているvimのカラースキームicebergの作者cocoponさんが作ったvimのカラースキームギャラリー「colorswat.ch」でした.

このギャラリーそのものは先月あたりからあったのですが,最近新機能が追加されたと聞いてあらためてサイトを訪問1
ひとしきりカラースキームを眺めて満足した後,こういうカラースキーム,シェルにもほしいなぁ... との思いに耐えられなくなって作ってしまいました.

fishでもfish_configで色設定できるのですが,バリエーションが少なくてちょっと物足りない感じでした2

使い方

まず好みのプラグインマネージャでプラグインをインストールします.とくにキーバインドも初期設定もないので,どのプラグインマネージャでも同じように可能なはずです.

# fishermanの場合
fisher ryotako/fish-vimcolor

基本的にvimcolor vimのカラースキーム名でそのカラースキームをfishに反映できます.
候補の取得に少し時間がかかりますが,コマンドの引数には手元のvimで利用可能なカラースキーム名が補完されます.
(~/.vimrcを読んだ後にvimのカラースキーム一覧を取得しているため,vimプラグインとしてインストールしたカラースキームも検出されます)

# vimにプラグインcocopon/iceberg.vimを導入済みとする

vimcolor iceberg

ただ,こうして反映されたカラースキームはfishを再起動するとリセットされてしまいます.設定を永続化したい場合は-U(--universal)オプションを付けてください.

vimcolor -U iceberg

こうすると設定のためにユニバーサル変数が使用されるようになり,次回以降の起動時にも色が反映されます.

また,利用可能なvimカラースキームを-l(--list)オプションで確認できます.

vimcolor --list

vimとfishの色付けの対応関係

fishではfish_color_...という名前の変数を使って色の設定ができます.vimでのシンタックスハイライトのグループと,fishの変数との関係は以下のようにしています.

参考:
vimの日本語ドキュメント
fishの英語ドキュメント

fishの色設定fishでの意味vimのシンタックスor構文グループvimでの意味
fish_color_normalデフォルトの色Normal通常のテキスト
fish_color_command実行可能なコマンドStatement命令文
fish_color_quoteクォートされたブロックString文字列定数
fish_color_redirection入出力リダイレクトDirectoryディレクトリ名
fish_color_end;&のようなプロセス分割Delimiter注意が必要な文字
fish_color_errorエラーErrorエラーなど、なんらかの誤った構造
fish_color_paramコマンドのパラメータIdentifier変数名
fish_color_commentコメントCommentコメント
fish_color_match対応する括弧MatchParenカーソル下の文字に対応する括弧
fish_color_search_match選択している補完候補Search最後に検索した語のハイライト
fish_color_operator*~のような展開される演算子Operatorsizeof, +, *, その他
fish_color_escape\nのようなエスケープされた文字SpecialChar特殊な文字定数
fish_color_autosuggestionオートサジェストCommentコメント
fish_color_valid_path実在するパスUnderlined目立つ文章
fish_color_history_currentdirhコマンド出力中の現在のディレクトリDirectoryディレクトリ
fish_color_selectionviモードでビジュアル選択された範囲Visualビジュアル選択された範囲

本当はfish_color_userとか,fish_color_で始まる変数はもっとあります.
ただ,これはデフォルトのプロンプトを使用している場合にしか意味が無いのと,ユーザ名って構文要素でいうと何に相当するのか? が決められなかったので設定していません.

メリットとデメリット

このプラグインのメリットは手軽に,豊富なカラースキームを試せるところだと思うのですが,デメリット(というか未熟な部分)も結構あります.
まとめると以下のようになります.

メリット

  • vimの豊富なカラースキームが利用可能.
  • 環境設定を開かずにコマンド一発で気軽に色変更できる.
  • シェルが色付けするため,ターミナル.appiTerm.appといったソフトごとに設定をしなくてもよい.

デメリット

  • ターミナル全体の背景色は設定不可能.
  • 実行時にちらっとvimの画面が描画されることがある3
  • set_color redなどで指定されるredが実際には何色なのか? は変数fish_color_...で制御できないためターミナルの環境設定が必要.
  • fishが解釈できない色名がある(DarkGreyとか).
  • fishのシンタックスグループによって,指定不可能な設定がある.たとえばfish_color_search_match--backgroundオプションしか受け付けてくれず,前景色や太字指定ができない.
  • fishのシンタックスグループによって,背景色を指定したはずなのに太字にされる等の謎の挙動がある.

あと,これ個人利用なら問題ないと思いますけど,変換したカラースキームを公開したりするする場合には元のカラースキームのライセンスを確認する必要があるかもです.

おわりに

fishはもともとがカラフルなシェルですが,vimの力を借りて色々なカラースキームが使えるようになりました.
ターミナルでの作業がもっと楽しくなりそうですね!


  1. このカラースキームギャラリーは本当カッコイイのでぜひ一度訪問するのをおすすめしたいです. 

  2. ただ,これはむしろvimが凄すぎるんだと思います.歴史とかユーザ数とか. 

  3. これなんとかしたいと思ってvimをサイレントモードで起動(vim -es)してみたりしたのですが,どうせ描画されないからなのか,サイレントモードだとカラースキームの変更ができないっぽいのですよね... 


Viewing all articles
Browse latest Browse all 5608

Trending Articles



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