emacs的智能替换密钥绑定
我尝试在emacs中使用不同的键绑定进行基本移动和删除。 我想使用的是以下键绑定:emacs的智能替换密钥绑定,emacs,Emacs,我尝试在emacs中使用不同的键绑定进行基本移动和删除。 我想使用的是以下键绑定: Ctrl+i/k/j/l:上/下/左/右 Ctrl+u/o:向后/向前字 Ctrl+d/f:删除左/右 Ctrl+e/r:删除单词左/右 Ctrl+Alt+e/r:删除到行首/行尾 Ctrl+c/x/v:复制/剪切/粘贴 Ctrl+m Alt+m:向后/向前搜索历史记录 等 在大多数情况下,我都能做到这一点。不过,我仍然面对两个问题: 某些主要模式键绑定优先于我的设置。例如,一些python模式可能会将C-
- Ctrl+i/k/j/l:上/下/左/右
- Ctrl+u/o:向后/向前字
- Ctrl+d/f:删除左/右
- Ctrl+e/r:删除单词左/右
- Ctrl+Alt+e/r:删除到行首/行尾
- Ctrl+c/x/v:复制/剪切/粘贴
- Ctrl+m Alt+m:向后/向前搜索历史记录
- 等
- 某些主要模式键绑定优先于我的设置。例如,一些python模式可能会将C-j设置为换行和缩进,我必须找出我正在使用的每个次要模式的每个问题,找到正确的键映射并释放我的键。单调乏味李>
- 一些主要模式对基本动作使用稍微修改的命令。例如,对于C-e,组织模式可能使用组织行尾,而不是行尾。这允许跳转到行的末尾,而不考虑右侧的标记。或者某些模式会将delete backward命令更改为自定义命令,更适合所需的任务。C-n和C-p也一样,它们经常通过模式改变意义。这些是一些正弦特性,我想使用它们,而不必显式地搜索它们,找到它们的命令名,为我使用的每个主要模式重新绑定它们。我希望我的C-k在我使用的每种模式下都能像C-n一样工作,而不需要做任何事情
C-n:“请将C-k(我对向下移动的偏好)绑定到C-n在此模式下要绑定到的任何命令” 我想我必须为此创建一个次要模式,可能必须在每个主要模式之前通过一个钩子加载它,并使用一些emacs函数返回绑定到给定keybinding的函数 你知道怎么做吗
find function on key
等函数来嗅出绑定,然后根据需要重新绑定(define-prefix-command 'ty-keymap)
(global-set-key "\M- " ty-keymap)
(define-key ty-keymap " " 'just-one-space)
M-
供我自己使用,然后将仅一个空格重新绑定到M-
。这让我可以自由地做这样奇怪的事情:
(define-key ty-keymap "j" #'(lambda () (interactive) (ty-move-mode ?j)))
(define-key ty-keymap ";" #'(lambda () (interactive) (ty-move-mode ?\;)))
(define-key ty-keymap "k" #'(lambda () (interactive) (ty-move-mode ?k)))
(define-key ty-keymap "l" #'(lambda () (interactive) (ty-move-mode ?l)))
(defun ty-move-mode (mv)
"Move over windows with right homerow keys."
(interactive "k")
(case mv
(?j (windmove-left)
(ty-move-mode (read-event)))
(?; (windmove-right)
(ty-move-mode (read-event)))
(?k (windmove-down)
(ty-move-mode (read-event)))
(?l (windmove-up)
(ty-move-mode (read-event)))
(?\r (message "done!"))
(t (push last-input-event unread-command-events))))
这使我能够访问j、k、l和;在我的窗户周围定向移动。修改此选项非常简单,可以为您提供一个单字符移动的迷你模式:
(defun ty-move-mode (mv)
"Move over windows with right homerow keys."
(interactive "k")
(case mv
(?j (backward-char 1)
(ty-move-mode (read-event)))
(?; (forward-char 1)
(ty-move-mode (read-event)))
(?k (previous-line 1)
(ty-move-mode (read-event)))
(?l (next-line 1)
(ty-move-mode (read-event)))
(?\r (message "done!"))
(t (push last-input-event unread-command-events))))
也许其他人会对如何做你想做的事有更好的想法