emacs:将数字行绑定切换到<;shift>-ed当量

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来打开和关闭括号已经开始付出代价 通过在我的启

在emacs中,我想重新绑定键盘[1…0]的最上面一行,这样敲击一个未修改的键就会产生移位的等价键。也就是说,键入1234567890将导致!“£$%^&*()正在插入缓冲区

我在Windows Vista中使用emacs 24.1.1,启用了viper模式。我正在使用slime进行一些常见的Lisp编程。我使用viper是为了避免频繁使用Ctrl和Shift键,因为我可以得到一些emacs小指(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)

有没有办法做到这一点,或者我的做法完全错了

谢谢


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令人敬畏的力量和灵活性的同时,还可以弹奏和弦。