Emacsでグローバルキーバインディングを設定する方法は知っていますが、ローカル(マイナーモード固有)キーバインディングのコードをGoogleで検索することすら困難です。たとえば、.emacs
にこのコードがあります:
;; PDFLaTeX from AucTeX
(global-set-key (kbd "C-c M-p")
(lambda ()
(interactive)
(Shell-command (concat "pdflatex " buffer-file-name))))
グローバルに設定したくありません。 local-set-key
のような関数はありますか?
モードでキーをバインドするには、モードがロードされるのを待ってからキーを定義する必要があります。モードを要求するか、eval-after-load
(eval-after-load 'latex
'(define-key LaTeX-mode-map [(tab)] 'outline-cycle))
'
—eval-after-load
はマクロではないため、必要です。
私は次を使用します:
(add-hook 'LaTeX-mode-hook
(lambda () (local-set-key (kbd "C-0") #'run-latexmk)))
laTeXモードのみにバインドを定義すること。
そのモードのキーマップを識別する必要があります(たとえば、LaTeX-mode-map
)および関数define-key
。例として、outline-minor-mode
LaTeXモード内では、次のことができます。
(define-key LaTeX-mode-map [(tab)] 'outline-cycle))
この場合、メジャーモード(LaTeX)はキーバインディングを保持しますが、outline-minor-mode-map
。
他の答えはどれも私のニーズを満たしませんでした。したがって、これは他の人を助けるかもしれません。 Evilの通常モード(基本的には、これはEmacsではeverywhereを意味します)である場合、Tab
が行の先頭にジャンプすることを望みましたが、代わりにorg項目は、私が組織モード文書であるかどうかを示します。
1つのオプションは、バッファーを切り替えるたびに、個別のバインディングと定数のバインディングと再バインディングをいじることでした(悪が通常の状態でキーごとに1つのバインディングしか許可しないため)。
しかし、より効率的なオプションは、現在のバッファーが使用するメジャーモードに基づいて必要な機能を実行する独自のコードをTab
で実行することでした。したがって、組織バッファーにいる場合、このコードはorg-cycle
を実行し、そうでない場合はevil-first-non-blank
を実行します(行の最初の非空白文字に移動します)。
ここで使用した手法は、通常の非邪悪なEmacsを使用する人のために、代わりにglobal-set-key
経由でカスタム関数を呼び出すことでも使用できます。
Emacs LISPを知らない人にとって、「if」ステートメントの後の最初の行は真のアクションであり、その後の行は偽のアクションです。 major-mode
がorg-mode
と等しい場合、org-cycle
を実行します。それ以外の場合は、他のすべてのモードでevil-first-non-blank
を実行します。
(defun my/tab-jump-or-org-cycle ()
"jumps to beginning of line in all modes except org mode, where it cycles"
(interactive)
(if (equal major-mode 'org-mode)
(org-cycle)
(evil-first-non-blank))
)
(define-key evil-normal-state-map (kbd "<tab>") 'my/tab-jump-or-org-cycle)