8 ответов:
Это так просто:C-x r t
вам абсолютно необходимо попробовать установить несколько курсоров:
https://github.com/magnars/multiple-cursors.el
это в мармеладе и мельпа так просто:
M-x package-install multiple-cursors
одним из решений является использование режима CUA. Активируйте режим cua с помощью
M-x cua-modeвыберите "прямоугольник" начать: сначала нажмитеC-Enterзатем переместите курсор с помощью стандартных команд перемещения, чтобы сделать выбор, теперь нажатие enter в любое время будет циклически перемещать курсор по углам прямоугольника, позволяя добавлять или добавлять текст к выбору.
для этого можно использовать следующие команды (и клавиши):
- открыть прямоугольник (C-x, r, o) добавить пробелы
- kill-rectangle (C-x, r, k) delete
- очистить прямоугольник (C-x, r, c) заменить пробелами
- M-x строка-вставка-прямоугольник заполнить с указанным текстом
вот полное описание этих функций: http://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html
для тех из вас, кто хочет сделать это для более сложных сценариев и хотите сделать это без установки нового модуля, пожалуйста, прочитайте дальше. (Это возможно в Emacs без установки MarkMultiple, хотя я лично использую и люблю MarkMultiple)
недавно мне пришлось вывести SQL-запрос в файл, а затем отформатировать его в запрос вставки MYSQL. Вот как 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 "Edit Each Line in Selection" вставляет один и тот же текст в каждую строку независимо от длины каждой строки. Сейчас я учусь 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.
Comments