開いている(表示されている)バッファー/ウィンドウのテキストを強調表示—あるバッファーから別のバッファーのテキストを検索


8

現在、Emacsフレームを垂直方向に分割し、2つのウィンドウで2つの異なるバッファーを表示しています。

1つのバッファ内の単語に移動し、いくつかのキーを押して、その単語(ある場合)の出現を他のバッファで強調表示し、必要に応じてその単語までスクロールします。

それを行う方法はありますか?

説明するスクリーンショット

上のスクリーンショットでは、カーソルが左側のバッファの「bar」の直前にあるので、<何か>を実行して、右側のバッファの「bar」がどこにあるかをすばやく確認できます。


注:これは、複数の開いているバッファからテキストを検索する方法に関連していますか?その意味で、もし私が「他の」バッファを横切ってisearchを実行できたなら、それは私が望むことをするでしょう。しかし、私が望んでいる答えはまったくありません。

  • occur私は維持したいと思いながら、ベースのソリューションでは、ショーは行に一致することを新しいウィンドウを開いて、私の2つのウィンドウがまだ表示された-私は実際にコンテキストの他のバッファに探してするつもりだ周りにこれだけマッチラインを示し、一致あまり役に立ちません。
  • multi-isearch-buffersこの検索を実行するたびに(何度も)バッファのリストを指定する必要がありますが、表示された2つのバッファとして自動的に取得するのではありません。さらに重要なことは、一方のウィンドウから開始してisearchを実行すると、もう一方のバッファーで一致が見つかると、そのバッファーがこのウィンドウに表示され、両方のウィンドウに同じ(他の)バッファーが表示されます。その後、Cgはすべてを元に戻し、もう一方のバッファーで強調表示された単語が見えなくなります。
  • icicle-search には非常に多くの機能があり、そのうちの1つでこれを実行できる可能性がありますが、ドキュメントをざっと見てみても何も見つかりませんでした。

現在、私がしているのはCs Cw Cs(このバッファーでisearchを実行するため)で、他のバッファーに切り替え、Cs Cs(同じ検索を繰り返すため)を実行してから、元に戻します。それは7つのキーストロークで、私が推測するマクロとして記録することができました。それをさせてください。それでも、他の解決策があるかどうかを知りたいと思っています。
ShreevatsaR 2014年

FWIW:C-s C-w C-x o C-s C-s私にはそれほど悪い音ではありません。(。のC-s直後に権限は必要ありませんC-w。)
ドリュー

@Drew:おかげで、マクロを使用するという考えは、質問を投稿した後にのみ発生しました。現在、C-s C-w C-x o C-s C-s C-x o実際に実行するマクロは問題ないようです。
ShreevatsaR 2014年

回答:


5

highlight-globalgithubから入手できるというパッケージを使用できますが、Melpaにはありません(これを書いている時点では)。

highlight-frame-toggleこの可能パッケージで定義された関数は、(すべてのバッファに)フレームの至る所点における単語又は選択された領域を強調表示します。ただし、これでは必要な強調表示された単語に自動スクロールしません。以前のハイライトをクリアせずにさらに多くの単語をハイライトすると、異なるハイライト色が選択されます。

これがどのように見えるかのスクリーンショットです:

ここに画像の説明を入力してください スクリーンショットをよく見るにはクリックしてください


0

helmにはこの目標を達成できるインターフェースがあり、helm- swoop パッケージを示すためにGifcastを記録しました。

起動した後helm-swoop、私はどちらか、さらにスペースで区切られたトークンまたはヒットを入力することにより、少ない候補に絞り込むことができる検索C-pC-n次のいずれかに切り替えるようにし、同時にターゲットバッファにスクロールします。


質問で述べたように、他のバッファをそのままにしてテキストを強調表示する代わりに、一致する行を一覧表示する(さらにそこに移動してリストを操作する必要がある)ため、オカレンスベースのソリューションは私が望むものではありません。 。
ShreevatsaR 2014年

うーん、他のバッファはそのまま維持され、コンテキストを示すことができますが、ハイライトがあなたが求めているものである場合、helm-swoopのほうが適しているかもしれません。
wasamasa 2014年

OK、デモ用に編集しましたhelm-swoop
wasamasa 2014年

自分をもっとはっきりさせたいと思います。全体のプロセスの間に、私は他のウィンドウたくない今までそれが現在表示しているもの、他のディスプレイ何かを。私が欲しいのは、キーストロークを押して別のウィンドウで確認 することだけです。つまり、他のバッファでの現在の単語の(最初に言って)出現します。(私のスクリーンショットでは、カーソルが左側のバッファーの "bar"にあるときに、キーを押すと、右側のバッファーで "bar"がどこにあるかを確認できますが、右側は同じように表示されます。)打つC-s C-w C-x o C-s C-s C-x o(これは私が現在使用しているもので、実際には問題ないようです)
ShreevatsaR 2014年

helmが他のバッファ内のすべての発生を強調表示できる場合(最初のスクロールが画面に表示されるようにスクロールしながら)、8つのキーストロークのシーケンスにバインドされたマクロよりも優れています。:-)
ShreevatsaR 2014年

0

を使用highlight-regexpして、別のウィンドウで現在のシンボル(または単語、領域など)を強調表示しませんか?

機能する可能性のあるいくつかの関数を次に示します。最初のものはポイントでシンボルを見つけ、次に他のウィンドウにジャンプしてハイライトします。2つ目は別のウィンドウにジャンプし、ハイライトを削除します。

 (require 'thingatpt)

 (defun highlight-other-window ()
   (interactive)
   (let ((match (thing-at-point 'symbol t)))
     (when match
       (save-excursion
         (other-window 1)
         (highlight-regexp (regexp-quote match))
         (other-window 1)))))

 (defun unhighlight-other-window ()
   (interactive)
   (save-excursion
     (other-window 1)
     (unhighlight-regexp t) 
     (other-window 1)))

どちらの場合も、これは元に戻り、現在のウィンドウが最後までアクティブのままになります。それがあなたの望みどおりかどうかはわかりませんが、それ以外の場合は最後のother-window呼び出しは省略します。

これらの機能は、アクティブ領域をチェックして一致させることによっても改善できます。他のウィンドウが表示されていない場合の処理​​。等


highlight-frame-toggleこのコマンドは、他の回答で述べた、私はあなたがあなた自身をロールバックする必要がないと思いますので、これをより洗練バージョンのようです。
グルカ2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.