14

Я использую ViM, TextMate и GNU Emacs в течение многих лет.

Например вот текст, который я хочу редактировать

foo
foo
foo

И вот текстовый результат, который я хочу получить

bar foo
bar foo
bar foo

Когда я нахожусь на Vim, я могу сделать "Ctrl v" в самой первой строке и первом столбце, затем нажать "2 j", затем нажать "i", затем набрать "bar", готово.

Когда я нахожусь на Textmate, я могу нажать "Apple Command Option", одновременно выбирая вниз (моей мышью), затем набрать "bar", готово.

Но когда я нахожусь на GNU Emacs 23.1, я не знаю, как это сделать. :((

Я искал EmacsWiki и гуглил вокруг, но не нашел решения. Пожалуйста, ведите меня, если вы знаете мое решение. Был бы благодарен за это.

5 ответов5

15

На ум приходят два варианта. Первый - это прямоугольники (как уже упоминалось в другом ответе). Явные указания для этого:

  1. Перейти на первую строку, первый столбец
  2. C-SPC
  3. перейти к последней строке (первый столбец)
  4. Cx rt bar SPC RET

Другой вариант, который обеспечивает очень хорошие команды редактирования прямоугольника / столбца, - это режим CUA. Вот сообщение в блоге (раскрытие: мой блог), в котором описывается, как его использовать. Чтобы увидеть всю мощь режима CUA, стоит посмотреть это трехминутное видео.

Я интегрирую режим CUA со следующим (потому что я предпочитаю не иметь режим переходной метки):

(setq cua-enable-cua-keys nil)
(setq cua-highlight-region-shift-only t) ;; no transient mark mode
(setq cua-toggle-set-mark nil) ;; original set-mark behavior, i.e. no transient-mark-mode
(cua-mode)
9

В Emacs-24.4 базовая поддержка прямоугольников была немного улучшена, поэтому вместо использования C-SPC и C-x r t вы можете сделать:

C-x SPC
down down
C-t bar RET

Одна из приятных особенностей этого метода по сравнению с методом C-SPC заключается в том, что вы получите визуальный отклик о выбранном прямоугольнике. Конечно, метод cua-mode работает (и работает аналогично).

2

В Emacs такие столбцы называются «прямоугольниками». Так что это соответствующая страница документации.

Все эти команды требуют, чтобы область содержала прямоугольник, с которым вы работаете. Таким образом, вам нужно установить метку на верхнем левом символе в прямоугольнике и расширить область до нижнего правого символа в прямоугольнике. Командой, которую вы ищете, является M-x string-insert-rectangle которая затем запрашивает строку для вставки.

1

Кратчайший ответ: включите режим прямоугольника CUA через C-RET.

Так что для вашего случая это было бы

  1. Перейти к первой строке, первому столбцу и нажать C-RET, чтобы войти в режим CUA
  2. Перейти к последней строке, первому столбцу и просто ввести bar SPC
  3. Выход из режима CUA через ESC или CG

Смотрите ответ @Trey для более сложного решения и ссылки на CUA.

0

Вы можете использовать replace-regexp для этого:

  1. установить отметку до последней строки -> C SPC и перейти к последней строке
  2. введите Mx replace-regexp RET в минибуфере (у меня есть привязка ключей для этого Mr)
  3. Дать ^ RET
  4. введите бар и нажмите RET

Это добавит бар в начало строки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .