3

emacsでは、キーボードの一番上の行を再バインドして[1...0]、変更されていないキーを押すと、同等のシフトが行われるようにします。つまり、入力1234567890すると!"£$%^&*()バッファに挿入されます。

WindowsVistaでviper-modeを有効にしてemacs24.1.1を使用しています。私はスライムを使ってCommonLispプログラミングをしています。私はviperを使用しているので、CtrlキーとShiftキーを頻繁に使用しないようにしています。これは、emacs pinkie(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を切り替えることによって)2つのモードを切り替えることができます。

これを行う方法はありますか、それとも私はそれにすべて間違ってアプローチしていますか?

4

1 に答える 1

3

これは、私がすばやく一緒にハッキングして、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-modeをアクティブにしたときに、CTRL-F1を押すと、キーボードマッピングがカスタムから通常に切り替わります。

于 2012-08-17T18:03:43.887 に答える