Как сделать выбор столбца, а затем редактировать в GNU Emacs?

15

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

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

foo
foo
foo

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

bar foo
bar foo
bar foo

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

Когда я нахожусь на TextMate, я могу нажать «Apple Command Option», выбрав вниз (с помощью моей мыши), а затем введите «бар», готово.

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

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

Арье
источник
@ Трей Джексон и @ скромный кофе, решено, спасибо большое !!
Арье

Ответы:

16

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

  1. перейти к первой строке, первому столбцу
  2. C-SPC
  3. перейти к последней строке (первый столбец)
  4. C-x r t 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)
Трей Джексон
источник
11

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

C-x SPC
down down
C-t bar RET

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

Стефан
источник
к сожалению, мне кажется, что улучшений совсем не достаточно: cua-modeбыло ли это более правильным ... Просто упомянуть одну вещь: в cua-modeто время как прямоугольник выделен, я могу печатать и добавлять текст. В текущей встроенной emacs «base support» выделение исчезает (выбор «отменен»), и ввод вставляется в точку курсора. Это cua-mode
нелогично
@ShinTakezou: пока вы находите счетчик режима прямоугольной метки интуитивно понятным, я считаю счетчик поведения cua интуитивно понятным. К счастью, вы можете выбирать. Если вы предпочитаете поддержку cua, вы можете включить cua-mode или (если вам нужна только поддержка прямоугольника) (global-set-key [?\C-x ?\s] 'cua-rectangle-mark-mode).
Стефан
на самом деле это то, что я делаю: придерживаюсь cua-mode. Это работает так: выделите столбец, введите текст, готово. В противном случае: выделите столбец, скажем, хотите добавить текст, введите текст в минибуфере (вы не увидите его в буфере при вводе ...), ... готово. Позже вы увидите опечатку в последнем символе ... в режиме cua, я вижу ее, когда набираю текст, удаляю (не отменяю всю вставку), переосмысливаю, вставляю другой символ ... и прямоугольник остается выделенным по мере необходимости, между прочим, я могу уменьшить его, увеличить его, набрать еще какой-нибудь текст или «вырезать» этот новый прямоугольник ... так что для меня это более интуитивно понятно и удобно.
ShinTakezou
Я рад, что вам это нравится ;-)
Stefan
Кстати, в Emacs-25 C-tоперация прямоугольника без CUA (aka C-x r t) также показывает предварительный просмотр вновь вставленного текста по мере его ввода.
Стефан
2

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

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

nedned
источник
1

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

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

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

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

Мартин
источник
2
Да, у меня слишком мало репутации, чтобы комментировать. Я не хочу повторять его ответ, но я добавлю больше информации из документа CUA.
Мартин
0

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

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

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

Neelesh
источник