13

ViewSourceWith と Emacsを使用して、StackOverflow の回答と質問を編集します。多くの場合、私はコードを含めますが、StackOverflow の書式設定規則では、コード として認識されるには 4 つのスペースでインデントする必要があると規定されています。手動で、またはマクロでさえ、それを行うのは苦痛です。

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)

うまくいくようですが、アドバイス、代替案、バグレポートなどを歓迎します。

4

5 に答える 5

14

Cx TAB が実行されindent-rigidlyます。4 の数値引数を指定すると、必要なことが行われます。または、 <pre><code> を使用してコードを導入します ( Markdown Editing Helpの最初の段落を参照してください)。

編集:インタラクティブな宣言は、次のように記述した方がよいでしょう:

(interactive "r
p")
于 2009-02-27T10:07:40.490 に答える
12

もう 1 つの簡単な方法は、emacs の強力な長方形の編集機能を使用することです。領域を最初の行の先頭から開始し、インデントする最後の行の先頭で終了するように設定します (注:既存のテキストを置き換えたくないので行!)、次に実行します

C-x r t (string-rectangle)

次に、プロンプトに従って 4 つのスペースを入力します。出来上がり!余分な Lisp ハッキングは必要ありません。これにより、スペースの横に他のものを行の最初または途中に挿入する柔軟性が得られます。

于 2009-02-27T15:10:02.260 に答える
8

Cx TAB を使用して(別の回答で述べたように)インデントを固定するのが最も簡単な方法です。インデントしたい領域をマークして Cu Cx TAB を押すだけです。Cu のデフォルトの接頭辞は 4 であるため、これはまさに希望通りの動作をするはずです。

于 2009-02-27T16:58:20.720 に答える
1

python-modeでは、領域をマークして ( C-space、カーソルを移動)、ヒットC-c >して 4 つのスペースをインデントできます。

于 2011-12-08T08:48:51.373 に答える