代码之家  ›  专栏  ›  技术社区  ›  colinmarc

在Emacs中重新定义主模式前缀键

  •  5
  • colinmarc  · 技术社区  · 15 年前

    我一直在试着教自己Emacs,因为我在使用dvorak,我愚蠢地反弹。 C-c 一个移动键,并习惯了它。现在我开始用它进行一些编程,我加载了一个python文件并注意到 C-C 是中所有特殊命令的前缀 python-mode .

    我可以重新绑定前缀键并在我的 init.el 文件?如果没有,我应该单独重新绑定所有的python命令吗?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Trey Jackson    15 年前

    如果您查看python.el的源代码,您将看到这些命令是使用完整规范单独添加的,例如。 (define-key map "\C-c\C-r" 'python-send-region) .

    所以,你得自己重做一遍。也就是说这是非常直接的。从注释中,您希望将前缀键更改为 C’ 使转义正确的诀窍是根本不使用转义,而是使用宏 kbd ( documentation link )

    这样,您就可以将模式映射定义更新为:

    (defvar python-mode-map
      (let ((map (make-sparse-keymap)))
        ;; Mostly taken from python-mode.el.
        (define-key map ":" 'python-electric-colon)
        (define-key map "\177" 'python-backspace)
        (define-key map (kbd "C-' <") 'python-shift-left)
        (define-key map (kbd "C-' >") 'python-shift-right)
        (define-key map (kbd "C-' C-k") 'python-mark-block)
        (define-key map (kbd "C-' C-d") 'python-pdbtrack-toggle-stack-tracking)
        (define-key map (kbd "C-' C-n") 'python-next-statement)
        (define-key map (kbd "C-' C-p") 'python-previous-statement)
        (define-key map (kbd "C-' C-u") 'python-beginning-of-block)
        (define-key map (kbd "C-' C-f") 'python-describe-symbol)
        (define-key map (kbd "C-' C-w") 'python-check)
        (define-key map (kbd "C-' C-v") 'python-check) ; a la sgml-mode
        (define-key map (kbd "C-' C-s") 'python-send-string)
        (define-key map (kbd "C-\\ M-x") 'python-send-defun)
        (define-key map (kbd "C-' C-r") 'python-send-region)
        (define-key map (kbd "C-' M-r") 'python-send-region-and-go)
        (define-key map (kbd "C-' C-c") 'python-send-buffer)
        (define-key map (kbd "C-' C-z") 'python-switch-to-python)
        (define-key map (kbd "C-' C-m") 'python-load-file)
        (define-key map (kbd "C-' C-l") 'python-load-file) ; a la cmuscheme
        (substitute-key-definition 'complete-symbol 'symbol-complete
                                   map global-map)
        (define-key map (kbd "C-' C-i") 'python-find-imports)
        (define-key map (kbd "C-' C-t") 'python-expand-template)
        (easy-menu-define python-menu map "Python Mode menu"
          `("Python"
            :help "Python-specific Features"
            ["Shift region left" python-shift-left :active mark-active
             :help "Shift by a single indentation step"]
            ["Shift region right" python-shift-right :active mark-active
             :help "Shift by a single indentation step"]
            "-"
            ["Mark block" python-mark-block
             :help "Mark innermost block around point"]
            ["Mark def/class" mark-defun
             :help "Mark innermost definition around point"]
            "-"
            ["Start of block" python-beginning-of-block
             :help "Go to start of innermost definition around point"]
            ["End of block" python-end-of-block
             :help "Go to end of innermost definition around point"]
            ["Start of def/class" beginning-of-defun
             :help "Go to start of innermost definition around point"]
            ["End of def/class" end-of-defun
             :help "Go to end of innermost definition around point"]
            "-"
            ("Templates..."
             :help "Expand templates for compound statements"
             :filter (lambda (&rest junk)
                       (abbrev-table-menu python-mode-abbrev-table)))
            "-"
            ["Start interpreter" python-shell
             :help "Run `inferior' Python in separate buffer"]
            ["Import/reload file" python-load-file
             :help "Load into inferior Python session"]
            ["Eval buffer" python-send-buffer
             :help "Evaluate buffer en bloc in inferior Python session"]
            ["Eval region" python-send-region :active mark-active
             :help "Evaluate region en bloc in inferior Python session"]
            ["Eval def/class" python-send-defun
             :help "Evaluate current definition in inferior Python session"]
            ["Switch to interpreter" python-switch-to-python
             :help "Switch to inferior Python buffer"]
            ["Set default process" python-set-proc
             :help "Make buffer's inferior process the default"
             :active (buffer-live-p python-buffer)]
            ["Check file" python-check :help "Run pychecker"]
            ["Debugger" pdb :help "Run pdb under GUD"]
            "-"
            ["Help on symbol" python-describe-symbol
             :help "Use pydoc on symbol at point"]
            ["Complete symbol" symbol-complete
             :help "Complete (qualified) symbol before point"]
            ["Find function" python-find-function
             :help "Try to find source definition of function at point"]
            ["Update imports" python-find-imports
             :help "Update list of top-level imports for completion"]))
        map))
    
        2
  •  3
  •   Gilles 'SO- stop being evil'    15 年前

    如果你想要 Ctrl键 + C 充当 left F12 充当 C-c :

    (define-key key-translation-map [f12] "\C-c")
    (define-key key-translation-map "\C-c" [left])
    

    请注意,这也会影响多键绑定,例如,现在需要键入 Ctrl键 + X F12 退出Emacs。硬币的另一面是 C-c C-c 键入为 F12 F12 .