15

領域を 4 つのスペースでインデント/インデント解除する 2 つのキー バインディングを定義したいと考えています。


前:

hello
world
foo
bar
  • と を視覚的に選択worldしますfoo
  • タイプ>

後:

hello
    world
    foo
bar

<また、インデントされていない領域にバインドしたいと考えています。
に詳しくないemacsので、助けてください。

4

3 に答える 3

25

そのためのキーボード ショートカットが既に用意されています。

インデント:C-u 4 C-x TAB

インデント解除C-u - 4 C-x TAB

入力するには長すぎる場合は、.emacs ファイルに次のように記述できます。

(defun my-indent-region (N)
  (interactive "p")
  (if (use-region-p)
      (progn (indent-rigidly (region-beginning) (region-end) (* N 4))
             (setq deactivate-mark nil))
    (self-insert-command N)))

(defun my-unindent-region (N)
  (interactive "p")
  (if (use-region-p)
      (progn (indent-rigidly (region-beginning) (region-end) (* N -4))
             (setq deactivate-mark nil))
    (self-insert-command N)))

(global-set-key ">" 'my-indent-region)
(global-set-key "<" 'my-unindent-region)

このコードでは、より大きい( >) およびより小さい( <) キーは、マークされた領域をそれぞれ 4 つのスペースでインデント/インデント解除します。

于 2012-07-24T05:30:10.693 に答える
2
(defun keyboard-indent (&optional arg)
  (interactive)
  (let ((deactivate-mark nil)
        (beg (or (and mark-active (region-beginning))
                 (line-beginning-position)))
        (end (or (and mark-active (region-end)) (line-end-position))))
    (indent-rigidly beg end (* (or arg 1) tab-width))))

(defun keyboard-unindent (&optional arg)
  (interactive)
  (keyboard-indent (* -1 (or arg 1))))
于 2013-10-30T17:58:35.927 に答える
1

@Thomas がすでに書いたことに加えて、キーを使用したくない場合<>、インデントまたはインデント解除を行う場合があります。HTMLを書く必要があり、それらの文字をもう入力できないというイメージだけです。init fileこれが、主要な設定として、に次を挿入した理由です。

(global-set-key (kbd "C-<") 'my-indent-region)
(global-set-key (kbd "C->") 'my-unindent-region)

注: がないと機能しません(kbd ...)。次のエラーが表示されます。

global-set-key: Key sequence C - > starts with non-prefix key C
于 2015-11-22T19:28:19.000 に答える