emacs:将数字行绑定切换到<;shift>-ed当量
在emacs中,我想重新绑定键盘[1…0]的最上面一行,这样敲击一个未修改的键就会产生移位的等价键。也就是说,键入1234567890将导致!“£$%^&*()正在插入缓冲区 我在Windows Vista中使用emacs 24.1.1,启用了viper模式。我正在使用slime进行一些常见的Lisp编程。我使用viper是为了避免频繁使用Ctrl和Shift键,因为我可以得到一些emacs小指(RSI).开始用lisp编程后,我发现按S-9和S-0来打开和关闭括号已经开始付出代价 通过在我的启动文件中包含以下内容,我可以将“9”绑定到”(),反之亦然emacs:将数字行绑定切换到<;shift>-ed当量,emacs,lisp,bind,key-bindings,viper,Emacs,Lisp,Bind,Key Bindings,Viper,在emacs中,我想重新绑定键盘[1…0]的最上面一行,这样敲击一个未修改的键就会产生移位的等价键。也就是说,键入1234567890将导致!“£$%^&*()正在插入缓冲区 我在Windows Vista中使用emacs 24.1.1,启用了viper模式。我正在使用slime进行一些常见的Lisp编程。我使用viper是为了避免频繁使用Ctrl和Shift键,因为我可以得到一些emacs小指(RSI).开始用lisp编程后,我发现按S-9和S-0来打开和关闭括号已经开始付出代价 通过在我的启
(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)
有没有办法做到这一点,或者我的做法完全错了
谢谢
B下面是一个我快速拼凑的示例,在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)
当我激活viper模式时,按CTRL-F1将键盘映射从自定义切换到普通。在修改Emacs中的键绑定时,我发现这篇文章非常有用:很高兴它能为您工作。您可能希望接受我的答案。这就是Stackoverflow的工作方式:虽然我个人从未在Emacs中使用VI模式,但我喜欢它Emacs密钥映射。啊,是的,完成了。我相信faq会建议进入vi/Emacs圣战。:)Vi/Vim非常强大,我刚刚使用Emacs进入Unix/Linux世界。Viper模式看起来很酷,易于定制,并且有很好的文档记录。不需要进入Vi/Emacs圣战。:)我也是以同样的方式来到Emacs的。如果不是因为重复性的紧张,我会一直使用它,但Viper提供了一种很好的绕过我们的方法在保持emacs令人敬畏的力量和灵活性的同时,还可以弹奏和弦。