在emacs中,我想重新绑定键盘[1...0]的第一行,这样按下一个未修改的键就可以得到它的移位等效键。也就是说,键入1234567890将导致在缓冲区中插入!"£$%^&*()。
我在Windows Vista中使用emacs 24.1.1,并启用了毒蛇模式。我正在使用slime做一些Common Lisp编程。我使用viper,这样我就可以避免使用Ctrl和Shift键太频繁,因为我可以得到一些emacs pinkie (RSI)。在开始使用lisp编程之后,我发现使用S-9和S-0来打开和关闭括号开始产生影响。
通过在我的启动文件中包含以下内容,我可以将9绑定到(,反之亦然。
(defvar my-keymap
(let ((map (make-sparse-keymap)))
(define-key map (kbd "9") '(lambda () (interactive) (insert "(")))
(define-key map (kbd "(") '(lambda () (interactive) (insert "9")))
map))
(viper-modify-major-mode
'lisp-mode
'insert-state
my-key-map)这很好用,并且很容易扩展到行的其余部分,除了我希望能够在两种模式之间切换而不必按住shift键(例如,通过切换Caps Lock)。
有没有办法做到这一点,或者我的做法完全错了?
发布于 2012-08-18 02:03:44
这是一个我快速拼凑出来的例子,在Linux上的Emacs24中进行测试:
(setq viper-mode-key-mapping "custom")
(defvar custom-viper-keymap
(let ((map (make-sparse-keymap)))
(define-key map (kbd "9") '(lambda () (interactive) (insert "(")))
(define-key map (kbd "(") '(lambda () (interactive) (insert "9")))
map))
(defvar default-viper-keymap
(let ((map (make-sparse-keymap)))
(define-key map (kbd "9") '(lambda () (interactive) (insert "9")))
(define-key map (kbd "(") '(lambda () (interactive) (insert "(")))
map))
(defun switch-viper-mode-custom-keymap ()
(interactive)
(if (string= viper-mode-key-mapping "default")
(progn (setq viper-mode-key-mapping "custom")
(viper-modify-major-mode 'lisp-mode 'insert-state custom-viper-keymap))
(progn (setq viper-mode-key-mapping "default")
(viper-modify-major-mode 'lisp-mode 'insert-state default-viper-keymap))))
(global-set-key [(control f1)] 'switch-viper-mode-custom-keymap)当我激活了毒蛇模式时,按CTRL-F1组合键可以将键盘映射从自定义切换到正常。
https://stackoverflow.com/questions/12009422
复制相似问题