Emacsでマークされた(選択された)テキストを検索する
-
03-07-2019 - |
質問
私はemacsを使用して、コードやその他のテキストファイルを表示および編集します。現在のバッファでマークされているテキストを前方または後方に検索する方法があるかどうかを知りたかった。メモ帳やワードパッドでできることと似ています。バッファ内のテキストにマークを付けてC-sまたはC-rを実行し、実際に検索テキスト全体を入力しなくても、マークされたテキストで検索できるようにできますか?
ありがとうございます
Rohit
解決
はい。 M-W
(選択したテキストのコピーを取得する)C-s <RET> C-y <RET>
。次に、必要に応じてC-s
を繰り返します。 C-r
についても同様です。
他のヒント
@Alexが釘付けにしています。
私がよく使用する別のオプションは、現在のマークの後の単語を検索するC-s C-w
です。 C-w
を繰り返し押すと、追加の単語で検索が増加します(たとえば、C-s C-w C-w C-w
は現在のマークの後の3つの単語を検索します)。
同様に、C-s M-s C-e
は現在のマークの後の行の残りを検索し、C-s C-M-y
はマークの後の文字を検索します。これらは両方とも同じ方法で繰り返し可能です(前者はM-s C-e
の後にC-s
をやや不自然に繰り返すことにより)。
次のものを使用していますが、後で発生するC-sを複数入力する必要がないという問題はありません。
(defun search-selection (beg end)
"search for selected text"
(interactive "r")
(kill-ring-save beg end)
(isearch-mode t nil nil nil)
(isearch-yank-pop)
)
(define-key global-map (kbd "<C-f3>") 'search-selection)
以前のコードの欠点は、選択したテキストがストレッチにコピーされることです。次のコードにはこの問題はありません。
(defun search-selection (beg end)
"search for selected text"
(interactive "r")
(let (
(selection (buffer-substring-no-properties beg end))
)
(deactivate-mark)
(isearch-mode t nil nil nil)
(isearch-yank-string selection)
)
)
(define-key global-map (kbd "<C-f3>") 'search-selection)
その他の回答では、コピーされたテキストを検索する方法、またはポイントで単語を検索する方法について説明します。しかし、実際には、マークされたテキストで<!> quot;検索する方法を説明していません。<!> quot;
次のフックを追加すると、現在選択されているテキストがisearchに使用されるテキストになるようになります。
(defun jrh-isearch-with-region ()
"Use region as the isearch text."
(when mark-active
(let ((region (funcall region-extract-function nil)))
(deactivate-mark)
(isearch-push-state)
(isearch-yank-string region))))
(add-hook 'isearch-mode-hook #'jrh-isearch-with-region)
ヒント:これは、 expand-region とうまく組み合わせます。
これを行うための最短のキーシーケンスは、 M - w C - s M - y 。
これには素晴らしい機能があります:isearch-forward-symbol-at-point
。ポイントがある単語のすべての出現箇所を強調表示します-ポイントを単語の先頭に配置する必要はありません。その後、C-sまたはC-rで次または前に移動できます。
完全に一致することに注意してください。hi
で使用すると、たとえばchill
とは一致しません。
command-f
(mac OSX)の場合にマップしました:(global-set-key (kbd "s-f") 'isearch-forward-symbol-at-point)
initファイル内。
上記の回答(受け入れられたものを含む)は面倒です。私は次の情報を見つけて、それがより良く好きになりました:
<!>#8220; Ctrl + s Ctrl + w <!>#8221;。これは現在の単語を検索しますが、移動する必要があります 最初に単語の先頭にカーソルを置きます。
http:// xah- forum.blogspot.com/2009/08/search-word-under-cursor-in-emacs.html
C-h k C-sを実行すると、C-sヘルプを見つけることができます。
検索文字列の最後から最後の入力項目をキャンセルするには、DELと入力します。タイプRET 終了し、見つかった場所にポイントを残します。 LFD(C-j)と入力して、最後に一致します 行の。 C-sと入力して前方に再度検索し、C-rと入力して再度検索します 後方に。 C-wと入力して、バッファ内の次の単語または文字をヤンクします 検索文字列の最後に、検索します。 C-M-wと入力して削除します 検索文字列の末尾からの文字。 C-M-yと入力してcharをヤンクします 検索文字列の最後にバッファリングして検索します。タイプM-s C-e 行の残りを検索文字列の末尾にヤンクして検索します。タイプ C-yは、キルされたテキストの最後の文字列をヤンクします。 M-yと入力して文字列を置き換えます 直前に文字列が削除された状態で検索プロンプトにヤンクしました。タイプC-q 制御文字を引用して検索します。 C-x 8 RETと入力して、 Unicode名で検索する文字、補完付き。 C-g while 検索、または検索に失敗した場合、入力をキャンセルして元に戻します 見つかりました。 C-g検索が成功した場合は中止し、 ポイントを開始ポイントに移動します。
検索文字列が空のままで終了しようとすると、 非インクリメンタル検索。
大文字と小文字の区別を切り替えるには、M-cと入力します。 M-s iと入力して切り替えます 非表示のテキストで検索します。 M-rと入力して、正規表現モードを切り替えます。 M-s wと入力して、ワードモードを切り替えます。 M-s _と入力して、シンボルモードを切り替えます。タイプ M-s 'で文字の折りたたみを切り替えます。
空白の一致を切り替えるには、M-s SPCと入力します。インクリメンタル検索では、 1つ以上のスペースは、通常、 変数<!>#8216; search-whitespace-regexp <!>#8217 ;;変数も参照してください <!>#8216; isearch-lax-whitespace <!>#8217;および<!>#8216; isearch-regexp-lax-whitespace <!>#8217;。
M-s eと入力して、ミニバッファーの検索文字列を編集します。
以前の16個の検索文字列の検索リングもサポートされています。 検索リング内の次のアイテムを検索するには、M-nと入力します。 M-pと入力 検索リングで前のアイテムを検索します。タイプC-M-i 検索リングを使用して検索文字列を完成させます。
M-%と入力して実行します<!>#8216; query-replace <!>#8217;最後から置換する文字列 検索文字列。 C-M-%と入力して<!>#8216; query-replace-regexp <!>#8217;を実行します。最後で 検索文字列。 M-s oと入力して<!>#8216; occur <!>#8217;を実行します。それは最後の検索を示しています 文字列。 M-s h rと入力して<!>#8216; highlight-regexp <!>#8217;を実行します。それは強調します 最後の検索文字列。
C-h bと入力して、すべてのIsearchキーバインディングを表示します。 C-h kと入力して表示します Isearchキーのドキュメント。 C-h mと入力して、ドキュメントを表示します Isearchモード。