2012-06-18 63 views
3

我使用安裝了Vimpulse的Emacs。當我自己寫很多東西時,我想在中做到這一點Ctrl/Alt - 關鍵。但是當組織文本結構或與其他應用程序一起工作時,我更喜歡Emacs中的Vim。在Emacs中,如何設置Ctrl-Key作爲LowerCaseKey對Vim和Alt-Key的作用,就像Vim的HigherCaseKey一樣?

問題是,在每個鍵中相同的動作是不同的,這使得我注意到之前犯了很多錯誤的按鍵。所以,任何建議Ctrl - Key作爲LowerCaseKey爲Vim做的,而Alt -Key作爲Vim的HigherCaseKey,在Emacs中?

或者如果這很難,我可以找到改變Vimpulse使鍵爲Emacs?

+1

你能澄清你想要什麼實現?你想Ctrl/Alt來充當Caps Lock切換嗎?或者充當班次?或者在光標或緩衝區中的其他位置上/下文本?如果你能提供一個你喜歡的行爲的具體例子,那將是有幫助的。 –

+0

感謝您的快速響應。 例如,在emacs中,當vimpulse未啓用時,我想要 cy作爲複製來殺死ring(作爲vim中的y), cd cd刪除一行(作爲vim中的dd), mg作爲結束的緩衝區(如v中的G)。 以這種方式,我希望鍵在Emacs中打開/關閉vimpulse模式時都很相似。 – Olly

回答

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))) 

您可以添加自己需要的任何其他定義到hook,以保證他們在啓動時進行評估。但是,您需要注意所選的鍵綁定。例如,您特別提到的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)檢查您希望重新映射的鍵序列當前綁定的內容。

0

我試圖在「require'vimpulse'」之前在.Emacs文件中添加鍵綁定。但它不起作用。所以我在「require'vimpulse'」之後添加了鍵綁定。無論脈動是開還是關,它都會取代所有的東西。它根本不是一個優雅的解決方案。但我想我可以忍受的(順便說一句,如果有CD,​​「\ CD \ CD」是行不通的)

綁定如下:

;;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)