7

元のタイトルは «言語固有の配色により、単純なものが特定の言語固有のタグに色を付けることができなくなります»でした

私はgVim 7.3を使用していますUbuntu 12.04 Arch x86/64では、それが重要です)

更新 (2013-03-02):

ようやく私の言いたいことを正確に表現できると思います (正しいコマンドが存在するとしても、まだ見つけられませんでした!)。基本的には以下の流れです。

  1. いくつかの基本的なグループ (ステートメント、コメント、関数など) を定義する小さなフットプリントカラースキームでセッションを開始します。
  2. より具体的なグループ (vimCommand、hsImport、rubyBeginEnd など) を定義する「より大きな」配色 (Solarized や Jellybeans など) に切り替えます。これらのより具体的なグループは、基本的なグループよりも優先されます。
  3. 「より小さな」配色 (特定のグループを定義しない配色) に切り替えます。

その結果、セッションは「ホームレス」グループで雑然とし、基本的な単語がわかりにくくなり、一部の単語がまったく強調表示されなくなります。これらのホームレス グループは次のようになります。

入力 :hi vimCommandEnter
出力 vimCommand xxx cleared

ちなみに、Solarized の github issue tracker で同様のことが経験され、発行されています → Vim のカラースキームは、切り替えると破壊の跡が残ります


更新 (2012 年 11 月 25 日):

おそらく、良い解決策は、現在のセッションの「ハイライト」変数をクリアすることです ( 、 、 などsmartindentの変数についてではなくencoding、 、などの変数、つまり 、 などのコマンドで定義された変数について話しているのです)。 誰かがそれがメモリにどのように格納されているかを説明できれば、それを消去する方法を理解するのに役立つかもしれません (セッションを保存してから調べてみましたが、構文を強調表示する変数の痕跡はありません)。numberStatementComment rubyClassxmlTaghi link ...highlight ...
:mksession mysession.vim

また、これは漠然とした仮定に過ぎませんが、 がハイライト グループ:hi clearをクリーンアップしないのは、「残り物」が間接的な定義 (例: ) によって定義されているためと思われます。hi link


オリジナル:

デフォルトのカラースキーム ( blueshift の修正版) が読み込まれると、強調表示する必要があるすべてのタグが正しく色付けされます。
ここに画像の説明を入力

セッション中に、デフォルトのカラースキームよりも多くのオプションがあるジェリービーンズのカラースキーム( )に切り替えます。:colo jellybeans
ジェリービーンズ.vim

デフォルトの配色 ( ) に再度切り替えると:colo blueshifted、一部の強調表示が無効になります。
ここに画像の説明を入力

セッションの開始時に、一部の言語固有のタグの動作を指定しない配色を使用すると、それらのタグは既存の色を使用して自動的に色付けされるようです。

ジェリービーンズの言語固有のタグは「キャッシュ」に残り、自動カラーリング機能を無効にする責任があることをは知っています。自動彩色は損なわれません。

他の配色でも同じことが起こります (たとえば、railscasts.vim は HTML 固有の配色を使用します)。特定性の低い配色に欠落しているタグを追加することで問題を解決できることはわかっていますが、より一般的な解決策を探しています。

質問

  • これらの自動設定色 (最初の配色が読み込まれたときに使用される) が、より詳細な配色の後に詳細度の低い配色が読み込まれたときに無効にならないようにするにはどうすればよいですか?

  • カラースキームを変更するときに、セッションキャッシュをクリーンアップできますか (つまり、jellybeans.vim が使用する特定のタグを「セッションキャッシュ」から削除します)?

私の試み これらは、私がさまざまな組み合わせで使用したコマンドですが、役に立ちませんでした:

:syntax off
:syntax clear
:hi clear
:syntax reset

機能する唯一の方法 (明らかに!) はhi link、「単純な」配色に欠けているコマンドを手動で再定義することです。しかしもちろん、これは他のカラースキーム (Solarized など) を変更した色で使用しても違いはありません。もちろん、これは「ハイライト グループの残り物をどのように削除しますか?」という質問に対する解決策ではありません。

4

1 に答える 1

5

少し遅れるかもしれません:-)しかし、私はこの問題を解決したと信じています。以下は、私がGitHubの Solarized issue tracker で作成した投稿の引用です。


こんにちは、みんな、

最後のコメントから1年後にここに割り込んで申し訳ありませんが、私が関与していないプロジェクトの問題をクローズすることを提案します(私は幸せなユーザーですが:-)しかし、私は次のことを信じています: 1.これはVim と 2. かなり洗練された回避策を見つけました。それで、この問題はクローズできると思いますか?

数年前、私は Vim の配色切り替えプラグインを作成しましたが、公開することはありませんでした。プラグインを作成してすぐに、この問題で説明されている動作に気付き、それが Vim のバグであると確信してイライラしました。私は、Vim C コード内の問題を修正しようとさえしましたが、それは私には少しやりすぎでした :-]。当時、私はソラライズドのことを聞いたことがありませんでした。他のいくつかの配色(自分のものを含む)で問題が発生しました。

今日、カラー スキーム スイッチャー プラグイン ( xolox/vim-colorscheme-switcherを参照) を公開することにしました。プラグインを公開する前に、ここで説明した問題を修正するために別の試みを行うことにしました。私はあらゆる種類の厄介なハックを試しましたが、あまりにも壊れやすいようには見えないかなりエレガントな回避策に行き着きました。readme / ホームページには、それがどのように機能するかの説明が含まれています (便宜上、以下に引用しています)。


Vim のカラー スキームの記述方法は、多くのカラー スキームをすばやく切り替えるという考えとはあまり互換性がありません。私の意見では、これは Vim が内部でどのように機能するかについての醜い実装の詳細です。言い換えれば、これは修正されるべきバグだと思います。

この動作はカラー スキームの循環を妨げるため、カラー スキーム スイッチャー プラグインには問題を隠す回避策が含まれています。

  1. 起動時に、強調表示グループ間のリンクを記憶するために使用される辞書が作成されます。
  2. カラー スキームをロードする前後に、カラー スキーム スイッチャー プラグインは引数なしで:highlightコマンドを実行し、ハイライト グループ間のリンクを検索します。見つかった各リンクがディクショナリに追加されます。既存のエントリが更新されます。これは、 を呼び出すことによって行われxolox#colorscheme_switcher#find_links()ます。
  3. カラー スキームをロードした後、カラー スキーム スイッチャー プラグインは引数なしで:highlightコマンドを実行し、「クリア」状態のハイライト グループを検索します。これらの各グループについて、以前にリンクされていた場合は、リンクが復元されます。これは、 を呼び出すことによって行われxolox#colorscheme_switcher#restore_links()ます。

おそらく、この解決策はまだ完全ではありませんが、すぐに使用できる動作よりもはるかに優れています: 上記の手順を実装する前に、配色を循環させると、Vim は最終的に白い背景に黒いテキストになり、他に何もありません!上記の手順を使用すると、何度でも循環させることができ、これまでに確認した配色はすべて問題なく表示されます。


配色スイッチャー (で使用される手法) に関するフィードバックをお待ちしています。私と同じようにあなたにとってもうまくいくことを願っています。Linux (GTK) 上の Vim 7.3 と MacVim 7.3 でテストしました。

于 2013-05-18T23:29:58.893 に答える