20

TextMateからEmacsに切り替えています。私がEmacsで本当に望んでいるTextMateの機能の1つは、あいまい一致を使用する「プロジェクトで検索」検索ボックスです。Emacsはidoでこれを持っていますが、idoは子ディレクトリを再帰的に検索しません。1つのディレクトリ内でのみ検索します。

idoにルートディレクトリを与え、その下のすべてを検索する方法はありますか?

アップデート:

以下の質問は、MichałMarczykの回答からのfind-file-in-project.elに関するものです。

このメッセージの何かが明白に聞こえるなら、それは私がEmacsを1週間未満使用したためです。:-)

私が理解しているように、project-local-variablesを使用すると、プロジェクトルートに保持している.emacs-projectファイルで物事を定義できます。

find-file-in-projectをプロジェクトルートにポイントするにはどうすればよいですか?

私はEmacsLispの正規表現構文に精通していません。ffip-regexpのデフォルト値は次のとおりです。

".*\\.\\(rb\\|js\\|css\\|yml\\|yaml\\|rhtml\\|erb\\|html\\|el\\)"

拡張機能を自分のプロジェクトに適したものに切り替えることができると思います。

ffip-find-optionsについて説明していただけますか?ファイルから:

(defvar ffip-find-options """find-file-in-projectを使用するときに`find'に渡す追加のオプション。

これを使用して、プロジェクトの一部を除外します:\ "-not-regex\"。ベンダー。\\" \ "")

これは正確にはどういう意味ですか?ファイル/ディレクトリを除外するためにどのように使用しますか?

.emacs-projectファイルの例を教えていただけますか?

4

8 に答える 8

15

これにはMxrgrepを使用します。.svnディレクトリなど、不要なものを自動的にスキップします。

于 2010-03-04T03:01:33.173 に答える
11

(主に、RINARIディストリビューションの下記のfind-file-in-project.elで使用するための実際のセットアップ手順を含めるために更新されました。元の回答はそのままです。新しいビットは2番目の水平ルールの後にあります。)


EmacsWikiのTextMateページをご覧ください。彼らが言及する最も有望なことは、おそらくこのEmacs Lispスクリプトであり、いくつかの変数によって導かれる「プロジェクトディレクトリ」の下で再帰的な検索を提供します。そのファイルは、その使用方法を説明する広範なコメントセクションで始まります。

特に有望なのは、次のビットです。

;; If `ido-mode' is enabled, the menu will use `ido-completing-read'
;; instead of `completing-read'.

自分で使ったことがないので注意してください...見つけたので試してみるのもいいかもしれませんが!:-)

HTH。

(ところで、そのスクリプトは、GitHubからの説明を引用するために-「RinariはRails IDEではありません(RailsのEmacsマイナーモードです)」の一部です。Rails開発を行っている場合は、次のことを行うことをお勧めします。全体をチェックしてください。)


先に進む前に、ido.elを構成します。真剣に、それはそれ自体なくてはならないものであり、それはプロジェクト内のファイルを見つけることであなたの経験を改善するでしょう。Stuart Hallowayによるこのスクリーンキャスト(この回答のコメントですでに述べました)を参照して、それを使用する必要がある理由を確認してください。また、Stuは、TextMateのプロジェクトスコープのファイル検索機能を独自の方法でエミュレートすることにより、idoがいかに柔軟であるかを示しています。彼の機能があなたのニーズに合っているなら、これ以上読む必要はありません。

では、RINARIの設定方法は次のfind-file-in-project.elとおりです。

  1. RINARIディストリビューションから取得して、Emacsがそれらを見つけることができる場所に配置します(つまり、変数内のディレクトリの1つに、find-file-in-project.el新しいディレクトリを追加するために使用できます)。project-local-variables.elload-path(add-to-list 'load-path "/path/to/some/directory")

  2. ファイルに追加(require 'find-file-in-project)します.emacs。また、次を追加して、C-x C-M-fシーケンスでfind-file-in-projectプロンプトが表示されるようにします(global-set-key (kbd "C-x C-M-f") 'find-file-in-project)

  3. .emacs-projectプロジェクトのルートディレクトリにというファイルを作成します。少なくとも、次のようなものが含まれている必要があります(setl ffip-regexp ".*\\.\\(clj\\|py\\)$")。これにより、名前とincljまたはpyが検索されるファイルのみが検索されるようになります。ニーズに合わせて正規表現を調整してください。(この正規表現はUnixfindユーティリティに渡され、findの優先正規表現構文を使用する必要があることに注意してください。Emacsで通常行われているように、正規表現ではすべてのバックスラッシュを2倍にする必要があります。また、parens / pipesの前にバックスラッシュを配置する必要があるかどうか(|)「魔法の」正規表現の意味を使用する場合は、find期待によって異なります。上記の例は、Ubuntuボックスで機能します。疑問がある場合は、正規表現に関する追加情報を参照してください。)(注:この段落は、正規表現構文に関する混乱を修正するために、前回の編集で改訂されました。)

  4. C-x C-M-fあちらへ。

いくつかの可能なカスタマイズがあります。(setl ffip-find-options "...")特に、 Unixfindコマンドに追加のオプションを渡すために使用できます。これはfind-file-in-project.el、内部で呼び出されるものです。

うまくいかない場合は、スペルを確認して再確認してください。私は一度のようなこと(setl ffip-regex ...)をしましたが(変数名に最後の「p」がないことに注意してください)、最初はファイルが見つからないことにかなり戸惑いました。

于 2010-03-03T23:31:35.857 に答える
4

https://github.com/defunkt/textmate.elについて言及した人は誰も驚いていません(Windowsで動作させる必要があります...)

于 2012-03-14T21:45:00.360 に答える
3

eprojectにはeproject-grep、あなたが望むことを正確に実行するがあります。

適切なプロジェクト定義を使用すると、プロジェクトファイルのみが検索されます。バージョン管理、ビルドアーティファクト、生成されたファイルなどは無視されます。唯一の欠点は、システムにgrepコマンドが必要なことです。この依存関係はまもなく解消されます。

于 2010-03-04T22:36:22.377 に答える
2

GNU GlobalまたはIDUtilsを使用すると、必要な効果を得ることができます。それらはEmacs固有ではありませんが、その効果を統合するEmacsスクリプトがあります。(私はそれらについてあまり知りません。)

CEDETとEDEプロジェクトシステムを使用することもできます。EDEはおそらく少し重いですが、プロジェクトのトップをマークする方法があります。プロジェクトにGNUGlobalまたはIDUtilsインデックスファイルも保持している場合、EDEはそれを使用して任意の場所で名前でファイルを検索できます。または、`semantic-symref'を使用してソースファイル内のシンボルへの参照を検索できます。CEDETはhttp://cedet.sf.netにあります

于 2010-03-04T01:37:22.597 に答える
2

純粋で混じりけのない速度を得るには、コマンドラインツールのThe Silver Searcher(別名「ag」)とag.elを組み合わせることを強くお勧めします。git、hg、またはsvnを使用している場合、ag-projectインタラクティブ関数はプロジェクトルートの知識に基づいた推測を行い、プロジェクト全体を検索します。

于 2013-07-16T03:09:29.413 に答える
0

FileCacheもオプションの場合があります。ただし、を使用してプロジェクトディレクトリを手動で追加する必要がありますfile-cache-add-directory-recursively

于 2010-03-04T07:26:19.223 に答える
0

Iciclesがどのように役立つかについては、次のリンクを参照してください。

つららの補完マッチングは、部分文字列、正規表現、ファジー(さまざまな種類)、またはこれらの組み合わせにすることができます。単純なパターンを組み合わせたり、一致を交差させたり、それらのサブセットを補完(減算)したりすることもできます

于 2011-08-21T20:46:49.640 に答える