Як переробити проект в emacs (змінити назву методу скрізь)?


15

Я хочу переписати частини проекту з відкритим кодом. Сюди входять методи перейменування. Як я можу це зробити ефективно в emacs у всьому проекті?

Я не хотів би використовувати хаки, такі як пошук і заміна у кожному буфері.


1
Яка мова?
phils

Ви подивилися на ag / grep + wgrep + пошук / заміну? Ви не відкриваєте буфери окремо в цьому. Пов’язано: emacs.stackexchange.com/a/243/115
Каушал Моді

Пітон. Я усвідомлюю, що моє запитання було не найкращим, вибачте.
The Unfun Cat

Оскільки це запитання наштовхнулося на верхню частину (якщо хтось наткнеться на це від Google), існує спеціальна бібліотека пітонів для рефакторингу під назвою Rope. Це більш розумно, ніж інші пропоновані рішення, оскільки враховує контекст. Він реалізований в 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

Коли ви це робите, ви будете плакати від сліз від радості, що існує така чудова функціональність.


1
Це побігло сліз по моїй щоці.
mihai

1
буквально у мене вперше з’явилися сльози на очах при першому виконанні цього робочого процесу, не жартуючи
Павло

Чудове рішення!
матч

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щоб відредагувати їх wgrep. Рекомендую ieditдля перейменування символів. Натисніть, C-c C-cщоб вчинити.

Залежності:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.