在Emacs中,如何设置Ctrl键为Vim中的小写键,并将Alt键设置为Vim中的大写键?

3
我使用已安装Vimpulse的Emacs。当我自己写作时,我希望使用Ctrl/Alt-键来输入。但是当组织文本结构或与其他应用程序一起工作时,我更喜欢在Emacs中使用Vim。
问题在于,每个编辑器中相同操作的快捷键不同,这导致我在意识到之前经常按错键。因此,有没有什么建议可以使Emacs中的Ctrl-键变成Vim中的小写键,而Alt-键变成Vim中的大写键?
如果这很难实现,是否可以找到修改后的Vimpulse以使快捷键与Emacs相同?

1
你能澄清一下你想要实现什么吗?你想让Ctrl/Alt作为大写锁定切换键吗?还是作为Shift键?或者在光标下方或缓冲区其他位置将文本转换为大写/小写?如果你能提供一个具体的行为示例,那会很有帮助。 - Greg E.
感谢您的快速回复。例如,在Emacs中,当vimpulse未启用时,我希望: 将c-y作为复制到kill ring(如vim中的y), 将c-d c-d作为删除一行(如vim中的dd), 将m-g作为转到缓冲区末尾(如vim中的G)。 通过这种方式,我希望在Emacs中打开/关闭vimpulse模式时键盘操作类似于vim。 - Olly
2个回答

2

我对viper-mode并不熟悉,但根据我所做的有限测试,以下类似的内容似乎可以工作:

(add-hook 'viper-load-hook
  #'(lambda ()
      (define-key viper-insert-basic-map (kbd "C-d") nil)
      (define-key viper-insert-basic-map (kbd "C-d C-d") 'kill-line)))

您可以在该钩子中添加任何其他定义,以确保它们在启动时被评估。但是,您需要小心选择键绑定。例如,您特别提到的 C-y 通常被绑定为 yank,我认为这可能不是您想要解除绑定的内容。此外,viper-mode 看起来使用了一组相互重叠的复杂键位映射,因此取决于您想要启用的功能,您可能需要指定不同的键位映射(或者多个键位映射并行使用),例如 viper-vi-global-user-mapviper-insert-global-user-map 等等。不幸的是,这就是我对于 viper-mode 的专业知识了。
编辑:抱歉,我可能误解了您的请求。如果您想在 viper-mode 之外应用这些键绑定,请使用 global-set-key,即:
(global-unset-key (kbd "C-d"))
(global-set-key (kbd "C-d C-d") 'kill-line)

等等。再次提醒,要小心你所设置的绑定。使用describe-key(默认绑定为C-h k)来检查你想重新映射的键序列当前绑定的是什么。


0

我尝试在“require 'vimpulse'”之前在.Emacs文件中添加键绑定。但是它不起作用。所以我在“require 'vimpulse'”之后添加了键绑定。然后它会替换所有内容,无论vimpulse是否打开。这根本不是一个优雅的解决方案。但我想我可以接受。(顺便说一下,如果有c-d,“\C-d \C-d”将不起作用)

绑定如下:

;;remap keys like vim
(global-set-key (kbd "M-3") 'server-edit)                    ;; #
(global-set-key (kbd "M-4") 'move-end-of-line)               ;; $
(global-set-key (kbd "M-5") 'query-replace-regexp)           ;; % 
(global-set-key (kbd "M-6") 'move-beginning-of-line)         ;; ^
(global-set-key (kbd "C-w") 'forward-word)
(global-set-key (kbd "C-t") 'set-mark-command)
(global-set-key (kbd "C-y") 'kill-ring-save)
(global-set-key (kbd "C-u") 'undo)
(delete-selection-mode 1)                               ;; delete selection before yank
(global-set-key (kbd "C-p") 'yank)
(global-set-key (kbd "M-y") 'kill-region)
(global-set-key (kbd "C-x y") 'quick-copy-line)

(global-set-key (kbd "C-d") 'delete-forward-char)
(global-set-key (kbd "C-h") 'left-char)
(global-set-key (kbd "C-j") 'next-line)
(global-set-key (kbd "C-k") 'previous-line)
(global-set-key (kbd "C-l") 'right-char)
(global-set-key (kbd "M-g") 'end-of-buffer)
(global-set-key (kbd "M-j") 'delete-indentation)
(global-set-key (kbd "C-x d") 'kill-whole-line)
(global-set-key (kbd "C-x g") 'beginning-of-buffer)

(global-set-key (kbd "C-b") 'backward-word)
(global-set-key (kbd "C-`") 'bookmark-set)
(global-set-key (kbd "C-.") 'repeat)
(global-set-key (kbd "C-/") 'isearch-forward-regexp)
(global-set-key (kbd "M-m") 'bookmark-jump)
(global-set-key (kbd "M-/") 'isearch-backward-regexp)
(global-set-key (kbd "C-x m") 'bookmark-bmenu-list)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接