我希望在Emacs中,在ansi-term缓冲区的字符模式下,能够触发与 "M-x command RET" 相关的标准行为。我曾经有这个功能,但由于一些原因,在过去几天里,它不再存在,尽管我没有升级Emacs(尽管可能无意中修改了我的init文件)。此外,我的以下 hook 曾经有效(用于在窗口之间切换),但现在不起作用了。
这是预期的行为吗?
(global-set-key (kbd "M-J") 'windmove-left) ; move to left window
(global-set-key (kbd "M-L") 'windmove-right) ; move " "
(global-set-key (kbd "M-I") 'windmove-up) ; move " "
(global-set-key (kbd "M-K") 'windmove-down) ; move " "
(add-hook 'term-mode-hook
(lambda()
(define-key term-raw-map (kbd "M-J") 'windmove-left)
(define-key term-raw-map (kbd "M-L") 'windmove-right)
(define-key term-raw-map (kbd "M-I") 'windmove-up)
(define-key term-raw-map (kbd "M-K") 'windmove-down)
(define-key term-raw-map (kbd "M-F") 'toggle-maximize-buffer)
))
更新:
如果在打开任何ansi-term之前评估(lookup-key term-raw-map (read-kbd-macro "\C-x"))
,我会得到term-send-raw
,但如果在打开ansi-term后评估它,则会得到不同的结果。
(keymap #^[nil nil keymap
#^^[3 0 pop-global-mark nil list-buffers term-send-raw list-directory eval-last-sexp find-file nil nil indent-rigidly ...] #^^[1 0 #^^[2 0
#^^[3 0 pop-global-mark nil list-buffers term-send-raw list-directory eval-last-sexp find-file nil nil indent-rigidly ...] nil nil nil nil nil nil nil nil nil ...] nil nil nil nil nil nil nil nil nil ...] nil nil nil nil nil nil nil ...] (67108912 . text-scale-adjust) (67108925 . text-scale-adjust) (67108909 . text-scale-adjust) (67108907 . text-scale-adjust) (67108896 . pop-global-mark) (C-left . previous-buffer) (left . previous-buffer) (C-right . next-buffer) (right . next-buffer))
这是预期的行为吗?
C-x C-b
以进行 term-send-raw。对我来说,默认情况下它可以工作:所有我的键绑定,如C-x C-d
,都可以在 term-char-mode 下工作,无需任何其他设置。我只重新定义像M-s
或C-p
这样的键绑定。 - artscan