検索結果で検索するにはどうすればよいですか


8

C-s検索できるとき。たとえばC-r、いくつかの事前定義された検索クエリの結果を検索できるようにバインドできる関数をどのように実行すればよいですか?

ウィンドウの内容と同様に:

function xyz(a, b)
  return a + b
end

私はできるC-M-sとにfunction.*クエリと結果は次のようになりますようfunction xyz(a, b)

クエリを入力してそれらの結果を検索できる機能が必要です(自動的に生成されます)。

更新

解決策をありがとうございました。occurhelm-occurまた、非常にうまく動作しますが、彼は、私は完全に私の質問に答えるために必要なコードを提供するので、私はジョーダンビオンドの答えを受け入れています。


私はあなたの目標について少し混乱しています:のLua固有の機能を実装したいようですhelm-swoopが、質問(特にタイトル)はこれについてあまり明確ではありません。多分私は舵取りに慣れていないので私はあなたの質問を単に得なかった。
パプリカ

@paprika更新された質問を参照してください:)
lukas.pukenis 14年

これはhelm-swoopが既に行っていることとまったく同じではありませんか?
Jordon Biondo 2014年

@JordonBiondo helm-swoopリストで関数を確認できます。しかしimenu、私にとってはうまくいきました!私の質問に対する一般的な解決策を検索することを除いて
lukas.pukenis 2014年

すでにhelmを使用しているので、「Cx c i」で「helm-semantic-or-imenu」というコマンドを実行したかどうか考えただけです。
リメロ2014年

回答:


5

単純なアプローチは、rgrepを使用することです。

M-xrgrep現在のディレクトリの現在のファイルで「関数」の検索を使用して指定します。これをコマンドでラップできるので、次のように毎回オプションを指定する必要はありません。

(defun rgrep-lua-functions ()
  "run `rgrep` searching for 'function' in the current file."
  (interactive)
  (rgrep "function" (file-name-nondirectory (buffer-file-name)) "."))

これにより、関数のシグネチャを含む検索可能なバッファーが生成され、必要に応じて定義にジャンプできます。


greprgrepoccur、などの検索のみ行ずつ。つまり、検索コンテキストは1行です。OPが関数定義を検索するように求めていると思いました。しかし、この回答が受け入れられたので、私が提起された質問は、本当に望まれていたものではないでしょう。
2014年

質問の中で彼function xyz(a, b)は、luaが正しくフォーマットされている場合に得られるものとまったく同じような行が必要であることを示しています。
Jordon Biondo 2014年

私には分かりません。はい、彼はそのような行が見つかった場合、検索するために満足すると彼は言う。しかし、彼の例では、関数定義全体をウィンドウのコンテンツ」として示し、検索したいと考えています。単一行のコンテキストでは、検索対象のコンテンツが表示されませ(「ウィンドウ」内かどうかに関係なく)。彼らはあなたに一行だけを提示します:function xyz(a, b)
ドリュー

7

occurあなたのために働きますか?

M-x occurまたはM-s oクエリを入力すると、その正規表現に一致する行のリストが表示されます。次に、を使用C-sしてOccurバッファー内を検索し、一致する行内で検索を絞り込むことができます。


おっとっと。私は長い間私の回答を書いていたので、誰かが私を殴って殴られたことに気づきませんでした。
nispio 2014年

4

Emacsには、occurこのタイプのタスクに非常に適したと呼ばれるコマンドがあります。Helmがインストールされている場合は、helm-occur代わりに使用できます。


発生する

occurコマンドは、バニラのemacsの一部であり、にバインドされM-s o、デフォルトで。Occurは、検索する正規表現を要求し、現在のバッファー内で一致する行をすべて表示する新しいウィンドウを開きます。結果の*Occur*バッファはisearchC-s)を使用して検索できます。

  • M-s o function RET 「関数」に一致するすべての行を表示するには
  • C-x oフォーカスを*Occur*バッファに移動する
  • C-s 検索結果内で検索を開始するには

ヘルム発生

helmがインストールされている場合は、を使用helm-occurして同様のことができます。この場合、*Helm Occur*バッファはで直接検索できませんC-s。Helmでは、スペースで区切るだけで複数の検索語を検索できます。

  • M-x helm-occur RET Helm Occurウィンドウを開くには
  • function 「関数」を含むすべての行を表示するには
  • SPC foo 結果をfooも含む行に絞り込む

これらのモードのどちらでも、オカレンスバッファーで一致を選択してEnterキーを押すと、コードのその行にジャンプします。


3

Library Iciclesを使用すれば、この種のことを簡単に行うことができます。(私が正しく理解していれば)求めているのは、特定の 検索コンテキスト内でのみ検索することです。

たとえば、この場合のように、関数定義内のみを検索したい場合があります-検索コンテキストは関数定義です。Lispでは、これはdefunsのようなものです。

Iciclesには、このような定義を検索するための定義済みのIcicles検索コマンドがいくつかあります。これらはまとめてIcicles Imenuコマンドと呼ばれます

コマンド定義のみを検索するには、commandを使用できますicicle-imenu-command-full。非インタラクティブ関数定義のみを検索するには、commandを使用しますicicle-imenu-non-interactive-function-full

定義の検索以外にも、検索するコンテキストの種類を簡単に定義できます。最も簡単な方法は、正規表現を提供することです。コマンドicicle-searchは、検索コンテキストを定義する正規表現を要求します。または、関数を使用して検索コンテキストを定義することもできます。

その他の可能性は次のとおりです。

  • さまざまな種類のTHING(例:sexps、センテンス、リスト、文字列、コメント、XML要素など)のテキストを検索します。つまり、THINGの外部の他のテキストを無視します。

  • 特定のテキストまたはオーバーレイプロパティを持つテキストのゾーンを検索します。つまり、他のテキストを無視します。


注意:

ここで言及されoccurている類似のその他の回答(helm-occur)は、限定された種類のコンテキスト検索を提供します。検索コンテキストは、バッファのにすぎません。

それは、たとえば関数定義全体を検索することの方がはるかに制限されています。つらら、コマンドicicle-occur(にバインドされたがC-c ')あなたが検索コンテキストとしてライン内を検索することができます。


1

インクリメンタルサーチ+

  1. C-M-s .+function.+、を含む行全体を検索しますfunction

  2. C-z .を含む行で検索したいものの正規表現が続きますfunction

(オプション)同じ行で一致するように、他のパターン(正規表現)で#2を繰り返します。一致は、行内で任意の順序にすることができます。

ステップ#1の代わりに、から始めることができますC-M-s .+ C-z . function。重要なのはfunction、他のパターンと一緒にを含む行全体を検索することです。

動作方法C-z .:一致するインラインパターンの入力を求めます(例:)function。それを.*両側でラップして、フルラインパターン(例:)を取得し.*function.*ます。現在の検索文字列(.+)もそのパターン(たとえば.*function.*)に一致する必要があるフィルター述語を追加します。

詳細については、動的Isearchフィルタリングを参照してください。

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