【问题标题】:emacs: toggle binding of number row to <shift>-ed equivalentemacs:将数字行的绑定切换到 <shift>-ed 等效项
【发布时间】:2012-08-14 02:47:40
【问题描述】:

在 emacs 中,我想重新绑定键盘的顶行 [1...0],以便按下未修改的键会导致其移位等效项。也就是说,输入1234567890 会导致!"£$%^&amp;*() 被插入到缓冲区中。

我在 Windows Vista 中使用 emacs 24.1.1,并启用了 viper 模式。我正在使用 slime 进行一些 Common Lisp 编程。我使用 viper 是为了避免过于频繁地使用 Ctrl 和 Shift,因为我可以获得一些 emacs 小指(RSI)。开始使用 lisp 进行编程后,我发现点击 S-9S-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)。

有什么办法可以做到这一点,还是我的方法都错了?

【问题讨论】:

    标签: emacs lisp bind key-bindings viper-mode


    【解决方案1】:

    这是一个我快速拼凑起来的示例,在 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 中修改键绑定时,发现这篇文章很有用:masteringemacs.org/articles/2011/02/08/…
    • Vi/Vim 非常强大,我刚刚使用 Emacs 进入 Unix/Linux 世界。 Viper 模式看起来很酷,易于定制且有据可查。无需陷入 vi/emacs 圣战。 :)
    • 我以同样的方式来到 emacs。如果不是因为重复性压力,我会一直使用它,但是 viper 提供了一种使用和弦的绝佳方法,同时仍然具有 emacs 的强大功能和灵活性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多