在LaTeX模式下覆盖填充段


9

我想更改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

(注意:这类似于vimformatprg选项。)


绑定是否M-q会产生影响evil-fill-and-move?我不使用邪恶,所以我很好奇。如果区域处于活动状态,则仍要fill-paragraph呼叫fill-region。因此,您可能会建议或替换fill-region为您的功能。
Vamsi 2014年

我没有尝试过,但我相信没有。在邪恶的正常模式下evil-fill-and-move绑定到按键序列gq。重新绑定M-q不应影响此键绑定。从某种意义上讲,我的问题实际上是两个问题:1)如何替换两个功能?2)如何使用外部程序?2)的原因是我已经有一个外部的非Elisp解决方案。
凯文

1
在这种情况下,您可以通过自定义elisp defun (add-hook 'LaTeX-mode-hook (lambda () local-set-key (kbd "M-q") 'your-fill-function))在哪里解决部分问题your-fill-function。这将仅在Auctex中设置该键组合。您可能可以使用shell-command-on-regionREPLACE参数来定义your-fill-function
Vamsi 2014年

Answers:


7

最好有两个功能,尽管一个功能可以用另一个来实现。原因是一个段落是一个隐式区域,因此两种情况下的输入应不同

(defun my-format-region (beg end)
  (interactive "r")
  (shell-command-on-region beg end "format"))

(defun my-format-paragraph ()
  (interactive)
  (save-excursion
    (mark-paragraph)
    (my-format-region (point) (mark))))

为了将功能替换为其他功能,无论其键绑定如何,请使用重映射键绑定:

 (define-key LaTeX-mode-map [remap fill-region] 'my-format-region)
 (define-key LaTeX-mode-map [remap fill-paragraph] 'my-format-paragraph)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.