emacsでプロジェクト全体をリファクタリングするにはどうすればよいですか(どこでもメソッド名を変更します)?


15

オープンソースプロジェクトの一部を書き直したい。これには、メソッドの名前変更が含まれます。プロジェクト全体でemacsで効率的にそれを行うにはどうすればよいですか?

検索や置換などのハックをすべてのバッファーで使用するのは避けたいです。


1
どの言語?
phils

ag / grep + wgrep +検索/置換を見たことがありますか?その中で個別にバッファを開くことはありません。関連:emacs.stackexchange.com/a/243/115
Kaushal Modi

Python。私の質問は最高ではなかったと気づきました、申し訳ありません。
不愉快な猫

この質問が一番上にぶつかったので(誰かがGoogleからこれに出くわした場合)、Ropeと呼ばれるリファクタリング専用のPythonライブラリがあります。コンテキストを考慮しているため、他のソリューションよりもインテリジェントです。Emacsではと呼ばれるパッケージで実装されていますropemacs
jcaw

@TheUnfunCat質問にコンテキストを追加できますか?現時点ではかなりあいまいであり、Pythonプロジェクトでこれを実行することを追加すると、多くのことが解消されます。
DoMiNeLa10

回答:


14

helm-ag関数名のすべてのインスタンスを検索するために使用し(開いているバッファーだけでなく、サブディレクトリを含むすべてのファイルを検索します)、C-c C-eすべての一致をリストするバッファーを入力して、関数名を変更します。完了したら、を押しC-c C-c (helm-ag--edit-commit)て、開いているすべてのファイルの変更を保存します。

紛らわしいかもしれませんが、https://github.com/ShingoFukuyama/helm-swoopをご覧ください

あなたがそれをgrでると、あなたはそのような素晴らしい機能が存在することを喜びの涙を流すでしょう。


1
それは私の頬を引き裂きました。
mihai

1
このワークフローを初めて実行したとき、文字通り涙が出​​ました。冗談はありません
Paul

素晴らしい解決策!
fraxture

6

言語を指定しなかったので、「検索と置換」よりも良い答えを出すことは困難です。

wgrepを使用する

シンボルのすべてのインスタンスを(インタラクティブに)別のインスタンスに置き換えるだけの場合は、wgrepが最善の策です。grep結果バッファをインタラクティブに編集できます。

  1. やりますM-x package-install RET wgrep
  2. を実行しますM-x rgrep。いくつかの簡単な質問が表示され、指定したディレクトリ内で検索用語を再帰的に検索します。
  3. 結果バッファに切り替えて実行しますM-x wgrep-change-to-wgrep-mode。このバッファは現在編集可能です。ここで行った変更は、ファイル自体に反映されます。
  4. このバッファでa replace-regexpまたはa query-replace-regexpを実行して、リファクタリングを行います。
  5. M-x wgrep-save-all-buffersとで編集を終了しますM-x wgrep-finish-edit


3

counsel-rg続いてC-c C-oを使用して、バッファ内のすべての候補のリストを取得できます。を押しwて編集しますwgrepieditシンボルの名前変更をお勧めします。を押しC-c C-cてコミットします。

依存関係:

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