Есть ли у кого-нибудь макрос Emacs для выделения (и удаления) блоков текста?

Есть ли у кого-нибудь макрос Emacs для выделения (и удаления) блоков текста?

И я имею в виду «отступ» в общепринятом смысле, а не в Emacspeak. Другими словами, я хочу отметить регион, нажать C-u 2, запустить этот макрос и добавить два пробела перед каждой строкой в ​​регионе.

Или нажмите C-u -2 перед запуском макроса и попросите его удалить два пробела в начале каждой строки в регионе. Бонусные баллы, если он жалуется, если в строках недостаточно начальных пробелов.


person mike    schedule 24.04.2009    source источник
comment
См. Также: stackoverflow.com / questions / 594156 /   -  person Jouni K. Seppänen    schedule 25.04.2009


Ответы (3)


жестко с отступом (привязанный к C-x TAB) делает то, что вы хотите. Он находится в indent.el, который должен быть частью стандартного дистрибутива emacs.

Кроме того, чтобы он жаловался / прерывался, когда где-то недостаточно пробелов, вы можете сделать что-то вроде этого: (быстрый уродливый взлом исходного кода с жестким отступом)

(defun enough-whitespace-to-indent-p (start end arg)
  (save-excursion
    (goto-char end)
    (setq end (point-marker))
    (goto-char start)
    (or (bolp) (forward-line 1))
    (while (and (< (point) end)
                (>= (+ (current-indentation) arg) 0))
      (forward-line 1))
    (>= (point) end)))

(defun indent-rigidly-and-be-picky (start end arg)
  (interactive "r\np")
  (if (or (plusp arg) (enough-whitespace-to-indent-p start end arg))
      (indent-rigidly start end arg)
(message "Not enough whitespace to unindent!")))
person Julian Squires    schedule 24.04.2009

Также можно использовать мир прямоугольников. Чтобы вставить два пробела:

C-x r t SPC SPC RET

Удаление двух пробелов - это

C-x r d

при условии, что вы определили прямоугольник для покрытия двух пробелов. В пакете CUA также есть приятное дополнение к редактированию прямоугольников. Пакет CUA охватывает не только прямоугольники, поэтому, если вам нужна только прямоугольная часть, посмотрите это описание (полное раскрытие, ссылка на мой блог).

person Trey Jackson    schedule 24.04.2009

Используйте indent-rigidly, привязанный по умолчанию к C-x TAB

person scottfrazer    schedule 24.04.2009