Это немного сложно, но возможно. Что я могу сделать для этой конкретной ситуации является создание минорного режима, а именно gvol-mode
, а затем в ней связываются C-iс previous-line
(или что вы хотите). Затем я привязываюсь <tab>к функции ниже.
(defun gvol-indent-for-tab-command () "This is to fix `indent-for-tab-command' for `gvol-mode'. It runs [tab] or C-i with `gvol-mode' nil because `gvol-mode' binds C-i to a different command. Ideally this should take into account window system so that it can DTRT in a terminal (whatever the right thing is)." (interactive) (let* ((gvol-mode nil) (command (or (key-binding [tab]) (key-binding "\C-i")))) ;; This is to satisfy `python-indent-line' which checks ;; `this-command' to cycle (setq this-command 'indent-for-tab-command) ;; Make people think this was called with C-i. This allows ;; `self-insert-command' to work (setq last-command-event 9) (call-interactively command)))
Чтобы объяснить это немного, я позволю привязаться gvol-mode
к nil
тому, чтобы при поиске ключа мой второстепенный режим не был в игре. Таким образом, он найдет привязку для <tab>или C-iэто было бы на месте, если бы второстепенный режим не был включен. Затем, чтобы некоторые функции работали, я должен установить this-command
на indent-for-tab-command
. Я также заставляю его выглядеть так, как будто я напечатал, C-iчто позволяет работать с yasnippet-mode
IIRC.