Emacsバッファ内の単語のすべての出現を強調表示する方法は?


83

Notepad ++には便利な機能があります。テキスト内の単語(必ずしもキーワードである必要はありません)を選択すると、その単語はテキスト全体で強調表示されます。これはEmacsでも実行できますか?もしそうなら、どのように?

必ずしもNotepad ++とまったく同じように機能する必要はありません(つまり、選択を介して)。理想的には、カーソルの下にある単語のすべての出現箇所が強調表示されるキーバインディングを設定したいと思います。

ハイライトが永続的である場合、つまり、ハイライトされた単語からポイントを移動してもハイライトが削除されないようにすることができれば素晴らしいと思います。

また、(カスタムキーバインディングを使用して)ハイライト間を移動できるソリューションがあれば便利です。

回答:


41

たぶん、http: //nschum.de/src/emacs/highlight-symbol/のhighlight-symbol.elがあなたが探しているものです:

代替テキスト


1
私はそれを試しましたが、それを動作させることができませんでした-emacsは「変数としてのシンボルの値が無効です:highlight-symbol-idle-delay」について不平を言いました。
ヘッドクラブ2008

1
私はその特定の問題を抱えていました。最終的に(defcustomhighlight-symbol-idle-delay ...)部分全体をコメントアウトし、(defunhighlight-symbol-update-timer ...)の前に(defvarhighlight-symbol-idle-delay ...)移動しました。 )、エラーを回避します。
ポリグロット

1
はい、ついに私はまったく同じことをしました。
ヘッドクラブ2008

1
申し訳ありませんが、このタスクに外部パッケージを追加する必要はありません。jrockwayの投稿を参照してください。
mefiX 2010

4
@mefiX:組み込み関数は1回の使用に適しています。外部パッケージは、(とりわけ)カーソルの下の単語を1回のキーストロークで強調表示する便利さを追加し、さまざまな単語の強調表示色を自動的に変更します。はい、組み込み関数でそれを行うことができますが、それが頻繁に行うことである場合、なぜ数秒とキーストロークではなく、数分と数百のキーストロークを無駄にするのですか?反対票を投じる人は誰でも、見通しが狭いように思われます。あなたがそうしなくても、誰かがこのパッケージを役立つと思うかもしれません。
ポリグロット2010

85

hi-lock提案は良いです。M-xただし、バージョンを使用する方が簡単だと思います。

M-x highlight-regexp RET <REGEXP>

M-x highlight-phrase RET <REGEXP>

highlight-phrasehighlight-regexp大文字と小文字を区別せず、正規表現内のスペースを任意の空白に一致するように変換する、ほんの少しの砂糖です。ハンディ。


23
ハイライトをクリアするには、次を使用しますM-x unhighligh-regex。key-chord:C-x w r...また、ハイライトフレーズは大文字と小文字を完全に区別しません。(単語の)最初の小文字のみが大文字と小文字を区別しませんでした。(私はそれが対処することを意図していたと仮定fredFred..は、例えば、それは正規表現のように生成)[Cc]at[ ]+[Dd]og
Peter.O

おかげで、組み込みのヘルプよりも違いについてのコメントが明確になりました。
Joshua Goldberg

1
注:タイプミス:(missing and )のunhighlight-regexp代わりに使用する必要があります。unhighligh-regextp
Zelphir Kaltstahl 2017

36

と入力してC-sから、現在の単語を入力するか、と入力しC-wます。ボーナスとして、C-sもう一度ヒットして単語を検索できるようになりました。

これはインクリメンタルサーチと呼ばれます


11
価値があることについて、私は今、質問の意図を理解しています。移動や入力などの他の作業を行うときでも、オカレンスを「永続的に」(オフにするまで)強調表示する必要があります。このため、Cs(インクリメンタルサーチ) )は機能しません(強調表示は「一時的」です。バッファ内を移動できますが、新しい編集作業を行うのは困難です)。私はM-x highlight-regexpソリューションを使用します(そして賛成しました)(そしてそれをショートカットにバインドしました)。
ShreevatsaR 2012年

15

私が使用しているのはアイドルハイライトです

http://www.emacswiki.org/emacs/IdleHighlight

Mx idle-highlightは、ポイントの下の単語のバッファー内のすべての発生を強調表示するアイドルタイマーを設定します。

すべてのプログラミングモードで有効にするには、次のようにします~/.emacs.d/init.el

;; highlight words
(add-hook 'prog-mode-hook (lambda () (idle-highlight-mode t)))

ラムダの内部フックにいくつかの矛盾がありました。おそらく、デファンと呼ぶことを検討してください。
Darryl Hebbes 2015年

10

ライトシンボルは、シンボルポイントが終わっているものを強調表示します。

または、occurを使用して、正規表現に一致するすべての行を一覧表示することもできます。クラス内のすべての関数をすばやく確認すると便利です。


これは非常に良いようですが、同じシンボルまたは同じ名前の別のシンボルが見つかったかどうかをどのようにして知ることができますか?
ハローグッバイ2015年

6

http://www.emacswiki.org/emacs/msearch.elを試してください カーソルで選択されたテキストのすべての出現箇所が強調表示されます。強調表示する文字列をドラッグする必要があります。これにより、ハイライトを変更せずに選択を簡単に変更できます。

文字列の強調表示を保持したい場合は、それをフリーズできます。

バッファを別のバッファにスレーブすることができます。マスターバッファで選択されたテキストは、スレーブバッファでも強調表示されます。これは、バッファを比較するのに役立ちます。また、あるバッファでメモを取り、別のバッファでテキストを調査する場合にも役立ちます。ノートバッファにキーワードのコレクションを含めることができます。そのようなキーワードをドラッグすると、調査対象のテキストでのその出現が強調表示されます。

私はこのようなものを何年も使っています。つい最近、フリーズを追加しました。だから、何かが壊れているのかもしれません。この場合は、http://www.emacswiki.org/emacs/msearchまたはここにメモを残して ください


5

これはあなたが望んでいたものほど良くないかもしれませんが、あなたが置くなら

(global-hi-lock-mode 1)

あなたの中.emacsのファイル、あなたが入力することができC-x w h REGEX <RET> <RET>、すべての回出てくる強調するためにREGEX、そしてC-x w r REGEX <RET>再度のハイライトを消します。繰り返しますが、おそらくあなたが望むほどエレガントではありませんが、それは機能します。



5

誰もsymbol-overlayモードについて言及していません。基本的にはのより良い書き直しですhighlight-symbol-mode。のように「より良い」は、元のハイライト記号のバグがなく(一時的なハイライトが動かなくなったり、強調表示された単語内を移動するために一時的なハイライトが消えたり、のような記号を強調表示できなくなったりするなど*、より適切に統合され、維持されます。READMEの「利点」の段落を参照してください。

で、通常どおりインストールできますM-xpackage-install (事前にパッケージリストを更新してくださいpackage-list-packages。参考までに、下部に、モードを有効にし、必要な場合と不要な場合があるいくつかのより高度な機能を無効にするために使用するコードを添付しました。

Notepad ++には便利な機能があります。テキスト内の単語(必ずしもキーワードである必要はありません)を選択すると、その単語はテキスト全体で強調表示されます。これはEmacsでも実行できますか?もしそうなら、どのように?

を有効にするoverlay-symbolと、タイムアウト後にカーソルを置いた単語ごとに画面上のオカレンスが表示されます(デフォルトではタイムアウトは0.5秒で、symbol-overlay-idle-time変数で構成できます)。単語が強調表示されない場合、これは画面上に一致するものが1つだけ(カーソルを置いたもの)であることを意味します。したがって、単語を強調表示する必要はありません。

ハイライトが永続的である場合、つまり、ハイライトされた単語からポイントを移動してもハイライトが削除されないようにすることができれば素晴らしいと思います。

カーソルの下の単語を永続的に強調表示する機能があります symbol-overlay-put。ハイライトを解除するには、もう一度呼び出します。

私の設定例では、Logo+`キーにバインドされています。


(require 'symbol-overlay)
(defun enable-symbol-overlay-mode ()
  (unless (or (minibufferp)
              (derived-mode-p 'magit-mode)
              (derived-mode-p 'xref--xref-buffer-mode))
    (symbol-overlay-mode t)))
(define-global-minor-mode global-symbol-overlay-mode ;; name of the new global mode
  symbol-overlay-mode                                ;; name of the minor mode
  enable-symbol-overlay-mode)
(global-symbol-overlay-mode)                         ;; enable it
(global-set-key (kbd "s-`") 'symbol-overlay-put)
(setq symbol-overlay-ignore-functions nil)           ;; don't ignore keywords in various languages
(setq symbol-overlay-map (make-sparse-keymap))       ;; disable special cmds on overlays

symbol-overlay-modeまさに私が探していたものでした。symbol-overlay-putFキーへのバインドは、ファイル全体で特定の単語のハイライトを切り替えるのに便利です。
MattKneiser19年

2

ライブラリ内のコマンドをhighlight.el 使用すると、オーバーレイまたはテキストプロパティを使用して、正規表現(この場合はシンボル)に一致するテキストを(非)強調表示できます。オカレンス間を循環できます。強調表示は一時的または永続的です。(詳細)


2

ieditを試してください。ポイントの単語を強調表示し、出現するすべての単語を簡単に編集できます。追加のキーストローク(C- ')を使用すると、その単語が含まれていないすべての行が非表示になります。とても便利な!


0

これはおそらく強調表示されませんが、入力しなくても単語を検索します...

検索したい単語CSに到達したら、CWで単語全体を読み、CSを実行すると、その単語が検索されます。私のEmacsでは、ドキュメント内のすべてのインスタンスも強調表示されます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.