我希望定义两个按键绑定,用于将选定的区域缩进/取消缩进四个空格。
Before:
hello
world
foo
bar
- 可视化地选择
world
和foo
。 - 键入>
之后:
hello
world
foo
bar
我也想将 < 绑定到取消缩进区域。我不熟悉
emacs
,请帮忙。我希望定义两个按键绑定,用于将选定的区域缩进/取消缩进四个空格。
hello
world
foo
bar
world
和foo
。hello
world
foo
bar
我也想将 < 绑定到取消缩进区域。emacs
,请帮忙。已经有相应的键盘快捷方式了:
缩进: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)
使用此代码,大于 (>) 和 小于 (<) 键将使所选区域每次缩进/取消缩进四个空格。
region-beginning
和region-end
而不是取point
和mark
的最小值和最大值)的Emacs方法。它还有一点“DWIM”:如果区域未激活,则它将在当前行上操作。 - Davor Cubranicctrl + >
或 ctrl + <
的键盘组合?仅仅写 "C->"
和 "C-<"
是不起作用的 (global-set-key: Key sequence C - > starts with non-prefix key C
)。算了,我已经想到了解决方法,我会写一个答案。 - Zelphir Kaltstahl(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))))
<
和>
进行缩进或取消缩进。想象一下,如果您需要编写一些HTML并且不能再输入这些字符,这就是为什么我在我的init文件
中插入以下键设置的原因:(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
<
或 >
键是不正确的;相反,代码会检查缓冲区的某些部分是否被选中,只有在按下相应键时才进行(取消)缩进。如果您想要简单地插入 <
或 >
,则可以在没有选择任何内容时这样做。 - Thomastab-width
,如下所示:(defun indent-region-shift-right-n (N)
(interactive "p")
(if (use-region-p)
(progn (indent-rigidly (region-beginning) (region-end) (* N tab-width))
(setq deactivate-mark nil))
(self-insert-command N)))
(defun unindent-region-shift-left-n (N)
(interactive "p")
(if (use-region-p)
(progn (indent-rigidly (region-beginning) (region-end) (* N (- tab-width)))
(setq deactivate-mark nil))
(self-insert-command N)))
(global-set-key ">" 'indent-region-shift-right-n)
(global-set-key "<" 'unindent-region-shift-left-n)