У кого-нибудь есть макрос Emacs для отступа (и удаления) блоков текста? - PullRequest
4 голосов
/ 24 апреля 2009

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

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

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

Ответы [ 3 ]

12 голосов
/ 24 апреля 2009

indent-жестко (привязанный к 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!")))
3 голосов
/ 25 апреля 2009

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

C-x r t SPC SPC RET

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

C-x r d

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

2 голосов
/ 24 апреля 2009

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

...