在Emacs中,如何将Ctrl-Key设置为LowerCaseKey,将Vim和Alt-Key设置为Vim的HigherCaseKey?

时间:2012-06-18 15:33:48

标签: emacs mapping key vimpulse

我使用安装了Vimpulse的Emacs。当我自己写很多时,我想在 Ctrl / Alt - Key中进行。但是在组织文本结构或与其他应用程序一起工作时,我更喜欢Emacs中的Vim。

问题在于每个键中相同操作的键是不同的,这在我注意到之前会造成很多错误的键击。因此,任何建议使 Ctrl - Key 作为LowerCaseKey对Vim做,而 Alt -Key作为Vim的HigherCaseKey,在Emacs中?

或者如果这很难,我能否找到改变的Vimpulse来使密钥成为Emacs?

2 个答案:

答案 0 :(得分: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等。不幸的是,那是关于我的专业知识的范围w / r / t 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)来检查您要重新映射的键序列当前绑定的内容。

答案 1 :(得分: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)