2

ここでは、IDE で高速移動キャレットに使用されるAceJumpのようなIntelliJ IDEA プラグインを作成しています。

次のように、TextAttributes をすべての「i」オカレンスに適用し、各「i」にインデックス char を与えます。

ここに画像の説明を入力

ユーザーが「H」を押すと、キャレットは「プライベート」の「i」に移動します。次に、すべてのマークアップ文字を元の「i」に変更します

問題

  1. このアクションは、ジャンプ中にドキュメントの内容を変更します。そのため、以下のような履歴変更があります。ローカル履歴管理の変更を無視する方法はありますか?

  2. Cmd-z を押すと、「取り消しできません」というダイアログが表示されます。これを回避する方法は?

ここに画像の説明を入力

ここに画像の説明を入力

4

2 に答える 2

3

ドキュメントの内容を変更する代わりに、HintManager クラスなどを使用してドキュメント上にナビゲーション マーカーを描画する必要があります。

ドキュメントの実際の内容を変更すると、元に戻す機能やローカル履歴が壊れる以外にも、さらに多くの結果が生じます。たとえば、ドキュメントが再解析され、誤った構文エラーが表示されます。ドキュメントへの変更を監視している他のプラグインまたは IntelliJ IDEA コンポーネントは、これに反応します。ユーザーが明示的なチェックアウト操作を必要とする Perforce などの VCS を使用している場合、ドキュメントは VCS からチェックアウトされます。TL/DR: そうしないでください。

于 2013-01-13T17:13:39.653 に答える
0

誰かがグーグルしてここで見つけた場合に備えて。以下が私の最終的な解決策です。

マーカーを表示するためにSwingグラフィックス描画を使用していますが、うまく機能しています。

詳細については、 https://github.com/whunmr/emacsIDEAs/blob/master/src/org/hunmr/acejump/marker/MarkersPanel.javaを参照してください。

于 2013-01-15T16:24:05.800 に答える