Использование Emacs для отступа (сдвиг 4) кода - PullRequest
13 голосов
/ 27 февраля 2009

Я редактирую свои ответы и вопросы StackOverflow с помощью ViewSourceWith и Emacs. Часто я включаю код и правила форматирования StackOverflow скажем, что он должен быть с отступом в четыре пробела например. Делать это вручную или даже с макросами - это больно.

Я искал в предыдущих сообщениях SO, но ничего не нашел.

Начиная с режима Python, я писал:

(defun text-shift-region (start end count)
  "Indent lines from START to END by COUNT spaces."
  (save-excursion
(goto-char end)
(beginning-of-line)
(setq end (point))
(goto-char start)
(beginning-of-line)
(setq start (point))
(indent-rigidly start end count)))

(defun text-shift-region-right (start end &optional count)
  "Shift region of code to the right
   Stolen from python-mode.
   The lines from the line containing the start of the current region up
   to (but not including) the line containing the end of the region are
   shifted to the right, by `text-indent-offset' columns.

   If a prefix argument is given, the region is instead shifted by that
   many columns.  With no active region, indent only the current line."
  (interactive
   (let ((p (point))
     (m (mark))
     (arg current-prefix-arg))
 (if m
     (list (min p m) (max p m) arg)
   (list p (save-excursion (forward-line 1) (point)) arg))))
  (text-shift-region start end (prefix-numeric-value
              (or count text-indent-offset)))
  )

;; Code in StackOverflow must be marked by four spaces at the
;; beginning of the line
(setq text-indent-offset 4)
(global-set-key "\C-c>" 'text-shift-region-right)

Кажется, это работает, но я приветствую советы, альтернативы, сообщения об ошибках, и т.д.

Ответы [ 5 ]

14 голосов
/ 27 февраля 2009

C-x TAB работает indent-rigidly. Учитывая числовой аргумент четыре, он будет делать то, что вы хотите. В качестве альтернативы используйте

 to introduce your code (see the first paragraph of <a href="https://stackoverflow.com/editing-help">Markdown Editing Help</a>).</p>

<p>Edit: your interactive declaration would better be written:</p>

<pre><code>(interactive "r
p")
12 голосов
/ 27 февраля 2009

Другой простой способ сделать это - использовать мощную прямоугольную возможность редактирования в emacs: установить свой регион, начиная с начала первой строки и заканчивая началом последней строки, которую вы хотите сделать отступом (примечание: it имеет , чтобы быть в начале строки, так как вы не хотите заменять существующий текст!), Затем выполните

C-x r t (string-rectangle)

Затем просто введите 4 пробела в соответствии с запросом. Вуаля! Никакого дополнительного взлома не нужно. Это дополнительно дает вам гибкость для вставки других элементов, кроме пробелов, в начало или в середину группы строк.

8 голосов
/ 27 февраля 2009

Использование C-x TAB для жесткого отступа (как упоминалось в другом ответе) - самый простой способ. Просто отметьте регион, который вы хотите сделать отступом, и нажмите C-u C-x TAB. Поскольку префикс по умолчанию для C-u равен 4, он должен делать именно то, что вы хотите.

1 голос
/ 08 декабря 2011

В режиме Python вы можете отметить область (C-space, переместить курсор) и нажать C-c >, чтобы сделать отступ в 4 пробела.

1 голос
/ 27 февраля 2009

Ваш код выглядит хорошо для меня. Я думаю, что перенастройка end в text-shift-region не обязательна, но, кроме этого, выглядит нормально.

...