Emacs:键入某些字符串后如何切换模式?

时间:2013-09-09 19:34:08

标签: emacs latex elisp markdown

我正在编写包含大量LaTeX内容的R Markdown(.Rmd)文件。主要模式是Markdown-mode。但我想要的是:当我尝试在$$之间键入一些LaTeX命令时,我想自动打开LaTeX主模式,并在我用$$或{{1}结束LaTeX块之后它可以关闭LaTeX主模式并再次打开Markdown模式。

LaTeX的内联格式是

$

LaTeX的等式(displaymath)格式为

$\alpha$

类似的例子是当我写一个$$ \alpha + \beta $$ 文件时,主要模式是LaTeX,但是当我编辑R时 代码块:

.Rnw

<<>>= y <- 1000 @ <<>>=之间,它会启用ESS模式。

那么有人可以帮我在Markdown-LaTeX案件中做类似的事吗?谢谢!


Inaimathi回答后的更新:

关注http://www.emacswiki.org/emacs/MultipleModes#toc6,我需要修改two-mode-mode.el

@

和emacs 24

- (if (string= to-mode mode-name)
+ (if (string= to-mode major-mode)

然后,通过Inaimathi,我将以下内容放在我的- (make-local-hook 'post-command-hook)

.emacs

然后主要模式在(require 'two-mode-mode) (setq default-mode (list "Markdown" 'markdown-mode) second-modes (list (list "LaTeX" "\\\[" "\\\]" 'latex-mode))) \[之间切换。

1 个答案:

答案 0 :(得分:1)

如果您在导航时更改主要模式,two-mode-mode应该能够满足您的需求。您需要包含.el,然后添加一个类似于

的块
(require 'two-mode-mode)
(setq default-mode (list "Haskell" 'haskell-mode)
      second-modes (list (list "Markdown" "\[markdown|" "|\]" 'markdown-mode)))

~/.emacs。以上是我在编辑Elm代码时突出显示markdown块的操作。对于您的特定用例,您可能需要

(require 'two-mode-mode)
(setq default-mode (list "Markdown" 'markdown-mode)
      second-modes (list (list "Latex" "\$\$" "\$\$" 'latex-mode)
                         (list "Latex" "<<>>=" "@" 'latex-mode)))

相反。这是完全未经测试的,包括不保修等等。

理想情况下,在这种情况下我想要的是缓冲区的其余部分保持markdown-mode突出显示,并且只在latex-mode或其他任何地方突出显示特定区域。接近我可以说,没有一个现成的,一般的解决方案,但如果你想要一些Elisp黑客,你可以给this读一读,看看你能想出什么。