Подтвердить что ты не робот

Какие редакторы Emacs, Vim и JEdit поддерживают несколько одновременных точек ввода текста?

Фон: JEdit (и некоторые другие текстовые редакторы) поддерживают функцию Несколько точек одновременного ввода текста. (по крайней мере, то, что я называю здесь).

Чтобы понять, что это значит, взгляните на ссылку.

Из всех функций, используемых в современных текстовых редакторах, первоначальные исследования, похоже, указывают на то, что это одна из функций, которую Emacs и Vim фактически не поддерживают. Если это правильно, это было бы довольно необычным, так как довольно сложно найти функцию текстового редактора, которая не попала ни в один из этих двух редакторов старой школы.

Вопрос: Кто-нибудь видел или реализовал эту функцию в Emacs, Vim или обоих? Если это так, укажите мне ссылку, script, ссылку или резюме, объясняющие детали.

Если вы знаете альтернативный способ сделать то же (или подобное), пожалуйста, дайте мне знать.

4b9b3361

Ответ 1

Способ vim для этого - это. команда, которая повторяет последнее изменение. Так, например, если я изменяю указатель на ссылку, и у меня есть куча obj- > функ что я хочу изменить obj.func тогда я ищу obj- > , do 2cw, чтобы изменить obj- > на obj., тогда do n.n.n. пока все экземпляры не будут изменены.

Возможно, не гибкий, как вы говорите, но он работает часто и очень интуитивно и быстро, когда он это делает.

Ответ 2

moccur-edit.el почти делает то, что вы хотите. Отображаются все местоположения, соответствующие регулярному выражению, и редактирование совпадений вносит изменения в соответствующий источник. Однако редактирование выполняется в одном экземпляре события.

Я предполагаю, что было бы просто расширить его, чтобы вы могли редактировать их все одновременно (по крайней мере, в простом случае).

Существует демо-версия здесь.

Оказывается, новейшие версии moccur-edit не применяют изменения в режиме реального времени - вы должны применить изменения. Изменения также теперь отменены (хороший выигрыш).

Ответ 3

В EMACS вы можете/могли бы сделать это с помощью M-x find-grep и макроса. Если вы действительно настаиваете на том, что он будет полностью автоматическим, тогда вы должны включить find-next в макрос.

Но, честно говоря, это поражает меня как своего рода Microsoft-функцию: да, она добавляет в список функций, но зачем беспокоиться? И вы помните, что это существовало через шесть месяцев, когда вы хотите снова использовать его?

Ответ 5

Я не думаю, что эта функция имеет прямой аналог либо в Emacs, либо в Vim, что не означает, что все, достижимое с помощью этой функции, невозможно каким-то образом с помощью двух редакторов "старой школы". И, как и большинство вещей Emacs и Vim, опытные пользователи, вероятно, смогут достичь такой задачи чрезвычайно быстро, даже если простые смертные, подобные мне, могут потратить пять минут, чтобы выяснить правильный поиск grep и заменить их соответствующими обратными ссылками.

Ответ 6

YASnippet пакет для Emacs использует его. См. 2:13 и 2:44 в screencast.

Ответ 7

В vim должно быть что-то вроде этого:

%s/paint.\((.*),/\1.paint(/ 

Или что-то в этом роде, я действительно плохо отношусь к "макету" регулярных выражений.

Идея заключается в замене шаблона:

/paint(object,/ 

с

/object.paint(/ 

Итак, да, это "поддерживается"

Ответ 8

Казалось, просто сделать базовую версию этого в Emacs lisp. Это происходит, когда вы просто хотите, чтобы два места вставляли текст параллельно:

(defun cjw-multi-insert (text)
  "insert text at both point and mark"
  (interactive "sText:")
  (insert-before-markers text)
  (save-excursion
    (exchange-point-and-mark)
    (insert-before-markers text)))

Когда вы запустите его, он запрашивает текст и вставляет его в обе точки (текущую позицию) и отметку. Вы можете установить знак с помощью C-SPC. Это можно было бы легко расширить для N разных позиций. Функция типа set-insert-point будет записывать текущую позицию (сохраненную как Emacs marker) в список, а затем при запуске многопозиционной вставки команды, он просто выполняет итерацию через список, добавляющий текст в каждый.

Я не уверен в том, что будет простым способом обработки более общей функции "многократного редактирования".

Ответ 9

Еще одно небольшое сходство: в Emacs функции редактирования прямоугольника, предоставляемые cua-selection-mode (или cua-mode), автоматически дают вам несколько точек вставки по левому или правому краю отмеченного прямоугольника, так что вы можете ввести общий префикс или суффикс для всех этих строк.

например.:
M-x cua-selection-mode RET (включите глобальный вспомогательный режим, если вы еще не используете этот режим или cua-mode)
C-RET down down down (отметит прямоугольник символа 1x3)
тип префикса здесь
C-RET (отмените прямоугольник, чтобы вернуться к обычному редактированию)

Ответ 10

Неа. Это было бы довольно сложно сделать с главным образом консольным интерфейсом.

Тем не менее, есть похожие функции в vim (и emacs, хотя я не использовал его почти так же) - поиск и замена, как говорили люди, и, более того, режим вставки столбцов: http://pivotallabs.com/users/brian/blog/articles/350-column-edit-mode-in-vi

Ответ 11

Это выглядит как поиск регулярных выражений/замена для чайников. Проблема начинается, когда пользователь не понимает, что предложенное компьютером обобщение неверно. И проблема ухудшается, когда выбранное альтернативное обобщение создает катастрофу в 1200-й области редактирования, которая находится вне экрана.

Говоря - нет, в Emacs нет поддержки, насколько мне известно.