我想将整个区域向右或向左缩进n个空格。在某些模式下,我可以使用C-c >和C-c <来实现这一点,但我希望能够在普通模式下也能做到。
如果我需要更改我的.emacs文件以使其更高效(例如通过像上面那样的快捷键),那也没问题。
我想将整个区域向右或向左缩进n个空格。在某些模式下,我可以使用C-c >和C-c <来实现这一点,但我希望能够在普通模式下也能做到。
如果我需要更改我的.emacs文件以使其更高效(例如通过像上面那样的快捷键),那也没问题。
我使用的方法是:先选择一个区域,然后按下C-u <number of spaces> C-x TAB
回答Eric的问题,我们可以定义一个函数并绑定到一个键盘快捷键上,例如C-x C-TAB。尝试将此添加到您的Emacs配置中。
(defun insert-tabs (n)
"Inserts N number of tabs"
(interactive "nNumber of tabs: ")
(dotimes (i n)
(indent-for-tab-command)))
(global-set-key [?\C-x \C-tab] 'insert-tabs)
C-u
本身是否有意义? - Eric WilsonC-u
(universal-argument
)会重复执行后面的命令N次。这里是文档链接:http://www.gnu.org/software/emacs/manual/html_node/emacs/Arguments.html - armandinoSandro的回答中关键的部分是对indent-rigidly
函数的调用。
C-x TAB (translated from C-x <tab>) runs the command indent-rigidly,
which is an interactive compiled Lisp function in `indent.el'.
It is bound to C-x TAB.
(indent-rigidly start end arg)
Indent all lines starting in the region sideways by arg columns.
Called from a program, takes three arguments, start, end and arg.
You can remove all indentation from a region by giving a large negative arg.
所以,标记该区域,输入数字参数,然后按下Ctrl+X,TAB。
我认为以下代码片段可以帮助你:
;; Shift the selected region right if distance is positive, left if
;; negative
(defun shift-region (distance)
(let ((mark (mark)))
(save-excursion
(indent-rigidly (region-beginning) (region-end) distance)
(push-mark mark t t)
;; Tell the command loop not to deactivate the mark
;; for transient mark mode
(setq deactivate-mark nil))))
(defun shift-right ()
(interactive)
(shift-region 1))
(defun shift-left ()
(interactive)
(shift-region -1))
;; Bind (shift-right) and (shift-left) function to your favorite keys. I use
;; the following so that Ctrl-Shift-Right Arrow moves selected text one
;; column to the right, Ctrl-Shift-Left Arrow moves selected text one
;; column to the left:
(global-set-key [C-S-right] 'shift-right)
(global-set-key [C-S-left] 'shift-left)
(shift-region 1)
和 (shift-region 1)
替换为您想要的值。indent-rigidly 是一个交互式的编译 Lisp 函数,位于 `indent.el'。
它绑定在 C-x TAB 上。
(indent-rigidly START END ARG)
将区域中以侧面开始的所有行向右缩进 ARG 列。从程序调用时,需要三个参数:START、END 和 ARG。您可以通过给出一个大的负数 ARG 来删除区域中的所有缩进。
C-x r o
插入空格以填充矩形区域(有效地将代码向右移动),C-x r k
则删除矩形区域(有效地将代码向左移动)。请参考矩形命令。