в Emacs редактируйте сразу несколько строк



Я считаю, что textmate имеет режим, в котором, если вы начнете печатать, то же самое будет введено на всех выбранных вами строках. Есть ли что-то подобное в emacs? Я предполагаю, что есть способ прямоугольники могут помочь мне, но я не уверен, как...

552   8  

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'),
  1. поместите курсор в первую строку
  2. пресс C-x (, чтобы начать запись макроса [В этот момент все ваши ключевые входы записываются поэтому, пожалуйста, внимательно следуйте инструкциям]
  3. пресс C-a перейти к началу строки
  4. введите " ( " , а затем M-f для перемещения вперед слово, а затем введите ","
  5. C-n чтобы перейти к следующей строке, а затем C-x ) до конца макро
  6. 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

    Ничего не найдено.