Подтвердить что ты не робот

Использование кода Emacs для отступа (сдвиг 4)

Я редактирую ответы и вопросы по 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)

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

4b9b3361

Ответ 1

C-x TAB запускается indent-rigidly. Учитывая числовой аргумент из четырех, он будет делать то, что вы хотите. В качестве альтернативы используйте <pre> <code> , чтобы ввести код (см. Первый абзац Справка по редактированию Markdown).

Изменить: ваше интерактивное объявление лучше писать:

(interactive "r
p")

Ответ 2

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

C-x r t (string-rectangle)

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

Ответ 3

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

Ответ 4

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

Ответ 5

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