2009-02-27 15 views
12

私はStackOverflowの回答と質問をViewSourceWith とEmacsで編集します。多くの場合、コードを入れて と言うと、それは と認識されるためには4つの空白で字下げする必要があります。手で、あるいはマクロでさえそれは痛いです。Emacsを使ってインデントする(シフト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) 

を動作するようだが、私は

+0

これはほとんど問題ではありません... –

+0

私は、すばやく調理された解決策に代わるものを入手したり、興味深いパッチを受け取ったりすることを望みます。 – bortzmeyer

+0

また、これは一部の人に役立つようですので、私はこれをどこかのドキュメントを求めるのに十分な興味があるかどうかを確認する方法として使用します。 – bortzmeyer

答えて

14
アドバイス、代替案、バグレポート、 などを歓迎

C-XのTABはindent-rigidlyを実行します。 4という数値的な議論があれば、それはあなたが望むことをするでしょう。または、<> <コード>を使用してコードを導入してください(最初の段落Markdown Editing Helpを参照)。

編集:あなたのインタラクティブ宣言は良く書かれます:

(interactive "r 
p") 
+0

C-x TABでは、マークする領域が必要です。私が盗んだPythonモードのコードは、もし存在するならば、現在の行に、その領域で動作します。 – bortzmeyer

+0

あなたはアクティブであることを意味します。通常、1行を4でインデントすることは、特定のバインディングを本当に保証するものではありません。 C-aスペーススペーススペース。 – kmkaplan

+0

私はまだ私の方法が好きですが、これらの2つのソリューションも素晴らしいです。受け入れられました。 – bortzmeyer

1

あなたのコードは、私には正常に見えます。 のtext-shift-regionに再設定する必要はないと思いますが、それ以外は問題ありません。最初の行の先頭から開始します(ノートをインデントしたい最後の行の先頭で終わるお住まいの地域を設定します:

11

行う別の簡単な方法は、Emacsの強力な長方形の編集機能を使用することです、それを持っていますプロンプトが表示されたら、あなたは存在しないテキストを交換したくないので、行の先頭にあるように!)、そして

C-x r t (string-rectangle) 

は、それからちょうど4つのスペースを入力してください。 Voila!余分なリスプのハッキングは必要ありません。これはさらに、スペースの横に他のものを挿入する柔軟性を、一連の行の先頭またはどこかに挿入できます。

+2

領域の最初の行または最後の行の長さが少なくとも4文字であると仮定すると、さらに簡単なコマンドはCx ro、open-rectangleです。行の両端の4文字を行に、もう1行を先頭に配置しますCx r oと入力します。 –

8

C-x TABを使用してインデントを固定すると(他の回答に記載されているように)、最も簡単な方法です。インデントしたい領域をマークし、C-u C-x TABを押すだけです。 C-uのデフォルトプレフィックスは4であるので、これはあなたが望むものとまったく同じです。

1

python-modeには、領域(C-space、カーソルの移動)にマークを付け、C-c >を4つのインデントに合わせることができます。

関連する問題