Як правильно вибрати стовпець, після чого зробити редагування у 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" обидва під час вибору вниз (мишкою), а потім набрати "bar", виконано.

Але коли я перебуваю на GNU Emacs 23.1, я не знаю, як це зробити. : ((

Я шукав EmacsWiki і гуглив навколо, але не знайшов рішення. Підкажіть, будь ласка, якщо ви знаєте моє рішення. Буду вдячний за це.


@Trey Jackson and @humble coffee, вирішено, спасибі велике !!
Ар'є

Відповіді:


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-SPCнаступним C-x r t, ви можете:

C-x SPC
down down
C-t bar RET

Одна з приємних рішень щодо цього C-SPCметоду полягає в тому, що ви отримаєте візуальні відгуки про обраний прямокутник. Звичайно, cua-modeметод також працює (і працює аналогічно).


на жаль, мені здається, що поліпшень не вистачає взагалі: чи cua-modeбуло це правильніше ... Тільки про те, щоб згадати: у cua-mode, під час виділення прямокутника я можу набрати та додати текст. У поточній вбудованій emacs "базовій підтримці" виділення зникає (виділення "скасовується"), а введення вставляється в точку курсору. Це контрінтуїтивно, а не те, що я зазвичай хочу (і cua-mode
звикаю,

@ShinTakezou: хоча ви знайдете лічильник прямокутного знака в режимі інтуїтивного, я вважаю лічильник поведінки куа інтуїтивно зрозумілим. На щастя, ви можете вибрати. Якщо ви віддаєте перевагу підтримку cua, ви можете увімкнути режим cua або (якщо ви хочете лише його підтримку прямокутника) (global-set-key [?\C-x ?\s] 'cua-rectangle-mark-mode).
Стефан

насправді це те, що я роблю: дотримуюся режиму cua. Це працює так: виділити стовпчик, набрати текст, зроблено. В іншому випадку: hlightlight стовпчик, скажімо, ви хочете додати текст, введіть текст у minibuffer (ви не побачите, що він з'являється в буфері під час введення ...), ... зроблено. Пізніше ви побачите помилку друку в останньому знаку ... в режимі cua, я бачу це під час введення, видалення (не скасовуйте всю вставку), переосмислення, вставлення ще одного знака ... і прямокутник залишається виділеним як мені потрібно, btw, і я можу його зменшити, збільшити, набрати ще якийсь текст або "вирізати" цей новий прямокутник ... так, для мене це більш інтуїтивно зрозуміло та зручно.
ShinTakezou

Я радий, що тобі це подобається ;-)
Стефан

BTW, в Emacs-25, C-tоперація прямого регенерації, що не стосується CUA, C-x r tтакож показує попередній перегляд щойно вставленого тексту під час його введення.
Стефан

2

У emacs такі стовпці називають «прямокутниками». Отже, це відповідна сторінка документації.

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


1

Найкоротша відповідь: Увімкніть режим прямокутника CUA через C-RET.

Отже, для вашого випадку це було б

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

Дивіться відповідь @Trey для більш детального рішення та посилань на CUA.


2
Так, у мене занадто мало репутації для коментарів. Я не хочу повторювати його відповідь, але я додам ще додаткову інформацію від документа КУА.
Мартін

0

Ви можете використовувати заміну-regexp для цього:

  1. встановити позначку до останнього рядка -> C SPC та перейти до останнього рядка
  2. введіть Mx заміну-regexp RET в minibuffer (у мене є прив'язка ключа для цього містера)
  3. Дайте ^ РЕТ
  4. наберіть бар і натисніть RET

Це додасть смужку на початок рядка.

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