7

インクリメンタル検索中にタイプミスをして、検索文字列が間違って入力された文字を受け取った場合は、それほど便利ではありません。これを防ぐ方法はありますか。エラー時に control-g が自動的に押されたかのように。

たとえば、次のテキストがあります。

keywords
keys

デフォルトの emacs の動作:

  • インクリメンタル検索を開始し、「keyz」を検索します
  • 検索エコーエリアに「keyz」が表示され、「keywords」の「key」部分が強調表示されます
  • sを押します
  • 「keys」が見つからず、カーソルが「keywords」行にとどまり、検索エコー領域に「keyzs」が表示され、便利ではありません

必要な動作:

  • インクリメンタル検索を開始し、「keyz」を検索します
  • 検索エコーエリアに「key」が表示され、「keywords」の「key」の部分が強調表示されます
  • sを押します
  • 「キー」が見つかり、強調表示されます
4

5 に答える 5

3

次のようなものを試すことができます

(defadvice isearch-printing-char (before drop-mismatches-on-next-char activate)
  (while (or (not isearch-success) isearch-error)
    (isearch-pop-state)))
于 2012-12-13T01:56:11.930 に答える
2

Emacsは、文字列を検索して見つからないことが非常に頻繁に発生するため、誤った部分を保持しますが、正しくないためではなく、カーソルの前に検索文字列のみが見つかります。この場合、Csを押すと、ファイルの先頭から検索が開始されるので非常に便利です。

これは非常に便利な動作であり、検索文字列の入力ミスよりも頻繁に発生します。検索文字列に実際にエラーがある場合は、Cgを押すだけで、最後の適切な検索文字列に戻ることができます。

于 2012-08-29T18:40:05.947 に答える
1

問題は、isearch が機能するように設計されている方法と一致する方法で検索することを考えていないことだと思います。したがって、現在存在する isearch のコンテキスト内では、あなたの質問は実際には意味がありません。

Isearch はすでに、まさにあなたが望む機能を提供してくれますが、その Cg をタイプすることによって、それが実現することを望んでいることを伝える必要があります。あなたが何をしたいのか、いつそれをしたいのかをisearchに伝えないと、何をすべきかをどのように知っているのでしょうか?

@Tom が説明しようとしたように、isearch がバッファ内の現在の位置から開始するデフォルトの方法は、失敗した文字を入力してから Cs を押すと、バッファの先頭から再起動できます。これは非常に価値のある機能です。多くの人がこの動作に依存していると確信しています。マクロを使用して常にバッファーの先頭から isearch を開始するというあなたの方法は、私たちの多くを当惑させ、混乱させるでしょう。もちろん、あなたのような慣れている人にとっては悪いことではありません。とはいえ、一致しないテキストを削除するために Cg を押さなければならないというあなたの嫌悪に、残りの私たちがかなり混乱していることを意味します。

また、isearch を開始した直後 (セッションの最初以外の場合) (つまり、他の文字を入力する前) に 2 番目の Cs を押した場合の動作についても少し考えてみてください。特に、以前の検索文字列が現在のバッファ内の何かに部分的にしか一致しない場合にどうなるかに注意してください。次に Cg を押します (また、現在のバッファ内の何かに部分的に一致するかどうかに関係なく、失敗した検索文字列がどのように表示されるかにも注意してください。いいえ)。

あなたの機能が multi-isearch-next-buffer-function の使用にどのように悪影響を与えるかについても考えてください。

emacs で isearch に実行してもらいたいことを他のエディターが実行できると主張しても、実際にはあまり役に立ちません。

あなたが本当に欲しいのは、現在のバッファーに存在するかどうかに関係なく何かを検索するisearchの機能ではなく、現在のバッファーで見つけることができるテキストのみを検索できる、わずかに異なるタイプの検索機能だと思いますバッファかどうか。

おそらく isearch-mode は、あなたがやりたいことをするように適応させることができますが、何らかの方法で、いくつかの elisp コードを書かなければならないと思います。おそらく、新しい検索モードを isearch-mode 内のオプションとして実装できます。これは、大文字と小文字の区別のオンとオフを切り替えるのと同じ方法でオンとオフを切り替えることができます。これは、デフォルトで大文字と小文字の区別をオンまたはオフにできるのと同じ方法で、デフォルトで設定できます。

于 2012-11-13T04:29:15.277 に答える
0

他のほとんどの回答と同様に、説明されている問題を軽減するのに役立つ別の機能を指摘しているだけです。これは、悪い文字の後にいくつかの良い文字を入力し続けた場合に特に便利です。

M-eisearch 文字列を編集するためのバインディングです。現在の文字列に一致する文字列がない場合、最初の一致しない文字にポイントを配置するのに役立ちます。

したがって、小さなタイプミスをした場合は、すぐに入力M-eして間違いを修正し、RET入力して、修正された検索文字列を使用して isearch に戻ることができます。

于 2012-12-13T11:22:01.383 に答える
0

インクリメンタル検索中にタイプミスをした場合は、バックスペースを押してタイプミスを修正するだけです。

  • インクリメンタル検索を開始し、「keyz」を検索します
  • 検索エコーエリアに「keyz」が表示され、「keywords」の「key」部分が強調表示されます
  • バックスペースを押します
  • sを押します
  • 「キー」が見つかり、強調表示されます
于 2012-08-23T21:58:26.280 に答える