Ответ 1
Это так просто: C-x r t
Некоторые примеры здесь:http://ergoemacs.org/emacs/emacs_string-rectangle_ascii-art.html
Я считаю, что textmate имеет режим, в котором, если вы начнете вводить текст, то же самое будет введено во всех выбранных вами строках. Есть ли что-то подобное в emacs? Я предполагаю, что способ прямоугольников может мне помочь, но я не уверен, как...
Это так просто: C-x r t
Некоторые примеры здесь:http://ergoemacs.org/emacs/emacs_string-rectangle_ascii-art.html
Вам абсолютно необходимо попробовать установить несколько курсоров:
https://github.com/magnars/multiple-cursors.el
В мармеладе и мелпе так просто:
M-x package-install multiple-cursors
Одним из решений является использование режима CUA. Активируйте режим cua с помощью M-x cua-mode
, выберите начало прямоугольника: сначала нажмите C-Enter
, затем переместите курсор со стандартными командами перемещения, чтобы сделать выбор, теперь нажатие кнопки в любое время будет курсировать курсором по углам прямоугольника, что позволит вам добавить или добавить текст в выбор.
Для этого вы можете использовать следующие команды (и ключи):
Вот полное описание этих функций: http://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html
Для тех из вас, кто хочет сделать это для более сложных сценариев и хотите сделать это, не устанавливая новый модуль, пожалуйста, прочитайте. (Это возможно в Emacs без установки MarkMultiple, хотя я лично использую и люблю MarkMultiple)
Недавно мне пришлось вывести SQL-запрос в файл, а затем отформатировать его в запросе MYSQL INSERT. Вот как Emacs облегчил мне жизнь.
Файл выглядит так:
1 I am a random text
2 I am not
3 G, you've gone mad
4 Click on this link
5 Transfer in progress (we've started the transfer process)
6 But transfer happend yesterday
7 No you are
8 Oh please! this is getting too much!
9 I love emacs
10 I cant be bothered with this any more
11 its time to raise the bar
12 show me how to expand my territory
И я хочу, чтобы он выглядел так:
(1, ,'I am a random text'),
(2, ,'I am not'),
(3, ,'G, youve gone mad'),
(4, ,'Click on this link'),
(5, ,'Transfer in progress (weve started the transfer process)'),
(6, ,'But transfer happend yesterday'),
(7, ,'No you are'),
(8, ,'Oh please! this is getting too much!'),
(9, ,'I love emacs'),
(10, ,'I cant be bothered with this any more'),
(11, ,'its time to raise the bar'),
(12, ,'show me how to expand my territory'),
C-x (
, чтобы начать запись макроса
[В этот момент записываются все ваши ключевые входы
поэтому внимательно следуйте инструкциям]C-a
, чтобы перейти к началу строкиM-f
, чтобы переместить слово, а затем введите "," C-n
, чтобы перейти к следующей строке, а затем C-x )
, чтобы завершить макросC-u 11 C-x e
повторите макрос n (11 в этом случае) разЭврика! Теперь, если вы не провалились, вы получите что-то похожее на это:
(1, I am a random text
(2, I am not
(3, G, youve gone mad
(4, Click on this link
(5, Transfer in progress (weve started the transfer process)
(6, But transfer happend yesterday
(7, No you are
(8, Oh please! this is getting too much!
(9, I love emacs
(10, I cant be bothered with this any more
(11, its time to raise the bar
(12, show me how to expand my territory
В этот момент я собираюсь оставить вас, чтобы выяснить остальное. Но, прежде чем я пойду, я хотел бы упомянуть, что существует немало способов достижения такого рода вещей. Это только один из этих способов, и это, случается, мой любимый способ.
Надеюсь, вы сочли это полезным;)
Я считаю, что вы ищете cua-режим, предложенный боскомом. http://www.vimeo.com/1168225?pg=embed&sec=1168225 этот скринкаст может дать вам представление о том, как использовать это.
Прямоугольники - это простые вещи, такие как удаление того же количества пробелов в смежных строках.
В противном случае клавиатурные макросы - это путь.
Ответы, приведенные выше, предназначены для вставки текста в столбцы. TextMate "Редактировать каждую строку в выборе" вставляет один и тот же текст в каждой строке независимо от длины каждой строки. Я изучаю Lisp сейчас, так как упражнение я написал функцию для этого:
(defun append-to-lines (text-to-be-inserted)
;;Appends text to each line in region
(interactive "sEnter text to append: ")
(save-excursion
(let (point-ln mark-ln initial-ln final-ln count)
(barf-if-buffer-read-only)
(setq point-ln (line-number-at-pos))
(exchange-point-and-mark)
(setq mark-ln (line-number-at-pos))
(if (< point-ln mark-ln)
(progn (setq initial-ln point-ln final-ln mark-ln)
(exchange-point-and-mark))
(setq initial-ln mark-ln final-ln point-ln))
(setq count initial-ln)
(while (<= count final-ln)
(progn (move-end-of-line 1)
(insert text-to-be-inserted)
(next-line)
(setq count (1+ count))))
(message "From line %d to line %d." initial-ln final-ln ))))
Сначала вы делаете выделение, которое включает все строки, которые вы хотите повлиять, а затем запускайте функцию с помощью M-x append-to-lines.