Я хотел бы изменить поведение fill-paragraph
в определенных режимах (например, LaTeX-mode
предоставленных AucTeX
).
Я мог бы просто привязать ключ M-q
, но я также использую evil-mode
чью реализацию evil-fill-and-move
использует fill-region
. В идеале, моя пользовательская функция заполнения должна переопределять обе функции fill-paragraph
(чтобы она работала M-q
) и fill-region
(чтобы она работала evil
).
Предполагая, что у меня есть отдельная программа, format
которая принимает код LaTeX через stdin
и выводит форматированный код stdout
, как мне переопределить две вышеупомянутые функции заполнения для использования format
?
(Примечание: это похоже на vim
's formatprg
вариант.)
M-q
влияетevil-fill-and-move
на так или иначе? Я не использую зло, поэтому мне любопытно. Если регион активен,fill-paragraph
звонкиfill-region
все равно. Таким образом, вы могли бы посоветовать или заменитьfill-region
своей функцией.evil-fill-and-move
связан с последовательностью клавишgq
в нормальном режиме зла. ПерепривязкаM-q
не должна влиять на эту привязку клавиш. В каком-то смысле мой вопрос на самом деле состоит из двух вопросов: 1) Как заменить две функции? 2) Как использовать внешнюю программу? Причина 2) в том, что у меня уже есть внешнее решение, отличное от Elisp.(add-hook 'LaTeX-mode-hook (lambda () local-set-key (kbd "M-q") 'your-fill-function))
гдеyour-fill-function
ваш заказ Elisp DEFUN. Это установит этот ключевой комбо только в Auctex. Возможно, вы могли бы использоватьshell-command-on-region
с аргументом REPLACE для определенияyour-fill-function
.Ответы:
Было бы лучше иметь 2 функции, хотя одну можно реализовать с точки зрения другой. Причина в том, что абзац является неявной областью, поэтому входные данные в обоих случаях должны быть разными
Чтобы заменить функции на другие, независимо от их привязки клавиш, используйте переназначение клавиш:
источник