Как переименовать переменную в emacs? Eclipse имеет аккуратное "переименование" действия по рефакторингу, которое позволяет переименовать переменную с помощью области видимости, которая может быть намного проще в использовании, чем выполнение локализованных замещающих строк, особенно если имя переменной является символом типа e. Имеет ли emacs аналогичную функциональность?
Emacs Переименовать переменную
Ответ 1
iedit было сделано для такого рода вещей.
Ответ 2
Новый Emacs имеет M-s .
для выбора символа под курсором, тогда вы можете C-M-%
и он будет использовать выбранный в данный момент символ для выполнения заметок. ПРИМЕЧАНИЕ. Это просто замена строк, а не функция IDE "переименовать переменную".
Ответ 3
Вы можете использовать narrowing, чтобы отображать только часть буфера, а поиск/замена будет работать только в суженной области. Например, вы можете использовать C-x n d для сужения к текущей функции или выбрать нужный регион и сделать C-x n n. Сделайте поиск/замену, затем разверните его с помощью C-x n w. Для переменной с одной буквой, такой как e
, выполните query-replace-regexp
с C-M-% и используйте регулярное выражение, подобное \be\b
, поэтому оно будет работать только на индивидуальном e
вместо тех, что содержатся в других словах.
Изменить: Просто подумал о другом. Если вы выберете регион, поиск и замена будут работать только в этой области. Таким образом, вы можете просто выбрать область, которую хотите заменить, затем выполните query-replace-regexp
.
Ответ 4
Я не уверен, что такое ваш исходный код. Поскольку вы упомянули об Eclipse, я предполагаю, что это Java. Один из вариантов - использовать функциональность tags-query-replace
. Используйте Excuberant Ctags с помощью -e
, чтобы генерировать теги стиля etgas и вызывать tags-query-replace
.
Ответ 5
В Python это более или менее выполнимо с библиотекой рефакторинга Rope, для которой я советую использовать emacs-traad, в MELPA (простой в установке и простой в использовании).
После установки у нас есть функция M-x traad-rename
, которая переименовывает переменную в проекте.
Для более простого поиска и замены мы имеем вышеупомянутый Iedit, а также Projectile projectile-replace
.
Ответ 6
Поскольку вы попросили функцию Eclipse, Iedit не будет ее отрезать. Это не так уж умно, что, если у вас есть две переменные с одинаковым именем в разных областях? Это изменит их оба. Это не происходит на затмении! Вам понадобится языковой инструмент, если вы ожидаете такого осознания.
С помощью typescript вы можете использовать tide. С помощью golang вы можете использовать go-doctor. В частности, с Java я ничего не мог найти, но я использую meghanada, что здорово. Но рефакторинг находится в списке TODO! Вы также используете emacs как клиент для eclipse с eclim.
Ответ 7
Также, учитывая уже предложенный iedit, вы также можете рассмотреть multiple-cursors. Просмотрите статью об этом, с анимацией живого издания.
Ответ 8
Поддержка такой современной функции IDE медленно поглощается мезозойскими редакторами, такими как Emacs. Для Scala вы можете получить это через Ensime.