我对 EMACS 还是很陌生,但是当我阅读 emacs 和 elisp 手册时会变得熟悉。但现在我坚持这一点:
有没有一种简单的方法来绑定正则表达式样式的输入序列?
例如:功能放大窗口水平的默认绑定是“Cx {”,是否可以将其重新绑定到“Cx({)+”之类的东西,以便可以通过重复“{”重复调用放大窗口水平字符,而不是多次释放 Ctrl 键?
还有另一种归档您想要的内容的方法:
第一次要重复上一条命令时,请按C-x z,然后您可以按 键多次重复您的命令z。
这种方法的优点是它适用于您使用的每个命令,而不仅仅是特定的命令。
更多参考这里是输出C-h f
8.11 重复命令
许多简单的命令,例如使用单个键或 调用的命令, M-x COMMAND-NAME 可以通过使用用作重复计数的数字参数调用它们来重复 (*note Arguments::)。但是,如果您要重复的命令提示输入,或者以其他方式使用数字参数,则该方法将不起作用。
命令C-x z(`repeat') 提供了另一种重复 Emacs 命令多次的方法。这个命令重复前面的 Emacs 命令,不管它是什么。重复一个命令使用之前使用的相同参数;它不会每次都读取新参数。
要多次重复该命令,请键入附加z's:每个 z重复该命令一次。当您键入除 以外的字符z或按下鼠标按钮时,重复结束。
例如,假设您键入C-u 2 0 C-d要删除 20 个字符。您可以再重复该命令(包括其参数)三次,以删除总共 80 个字符,方法是键入C-x z z z。第一个C-x z重复命令一次,每个后续 z重复一次。
您还可以定义自己的可重复命令并将其绑定到C-x {
. 然后,您可以完全按照您的要求使用它:C-x { { { {
...,而不必使用C-x { C-x z z z z
...
这是你要做的:
(defun your-repeat-command (command)
"Repeat COMMAND."
(let ((repeat-message-function 'ignore))
(setq last-repeatable-command command)
(repeat nil)))
(defun your-shrink-window-horizontally ()
"Shrink window horizontally.
You can repeat this by hitting the last key again..."
(interactive)
(require 'repeat nil t)
(my-repeat-command 'shrink-window-horizontally))
(define-key ctl-x-map "{" 'your-shrink-window-horizontally)
您可以使用任何您喜欢的命令来执行此操作 --- 用于my-repeat-command
制作它的可重复版本。我一直这样做,在我的几个图书馆里。
“Emacs 方式”是C-u用作前缀键。例如C-u20C-x{。
话虽如此,您可以按照自己的要求去做。C-x {但是,它需要您{单独绑定。前者将像今天一样定义,但后者必须看起来像:
(defun my-open-brace ()
(interactive)
(if (eq last-command 'shrink-window-horizontally)
(progn
(setq this-command 'shrink-window-horizontally)
(call-interactively 'shrink-window-horizontally))
(call-interactively 'self-insert-command)))
不幸的是,如果您有许多以 结尾的序列{,您将不得不编写一个函数来处理它们。
使用次要模式为 emacs 编写多重复命令。我将其命名为智能重复模式