我对EMACS仍然很陌生,但是当我浏览emacs和elisp手册时,我已经熟悉了。但是现在我坚持这个:
是否有一种以regexp风格绑定输入序列的简单方法?
例如:函数enlarge-window-horizontally的默认绑定是“Cx {”,是否可以将其重新绑定为类似“Cx({)+”的内容,以便可以通过重复重复调用enlarge-window-horizontal “{”字符,而不是多次释放Ctrl键?
答案 0 :(得分:4)
还有另一种存档方式:
第一次要重复上一个命令时,按 Cx z ,之后只需按 z 即可按需要重复执行命令。
这种方法的优点是它适用于您使用的每个命令,而不仅仅适用于特定的命令。
这里有额外的参考资料是 C-h f的输出
8.11重复命令
许多简单的命令,例如使用单个键或使用的命令 M-x COMMAND-NAME ,可以通过调用它们来重复 用作重复计数的数字参数(* note Arguments::)。 但是,如果要重复的命令提示输入或使用 另一种方式是数字参数,该方法不起作用。
命令 C-x z (`repeat')提供另一种重复方式 Emacs命令多次。此命令重复以前的Emacs 命令,无论那是什么。重复命令使用相同的命令 之前使用过的论据;它不会读取每个新的参数 时间。
要多次重复该命令,请键入其他 z :每个 z 再次重复该命令。键入时重复结束 z 以外的字符,或按鼠标按钮。
例如,假设您键入 C-u 2 0 C-d 以删除20 字符。您可以重复该命令(包括其参数)三 另外一次,通过键入 C-x z来删除总共80个字符 z z 。第一个 C-x z 重复命令一次,然后每次重复命令 z 再次重复。
答案 1 :(得分:1)
“Emacs方式”是使用 C-u 作为前缀键。例如。 C-ù 2 0 C-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)))
不幸的是,如果有许多序列以 {结尾,则必须编写一个函数来处理它们。
答案 2 :(得分:1)
您还可以定义自己的可重复命令并将其绑定到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
制作可重复的版本。我一直在我的几个图书馆里这样做。
答案 3 :(得分:0)
使用次要模式为emacs编写多次重复命令。我把它命名为smart-repeat-mode