.emacs .txt 文件视觉线模式与缪斯模式同时

Posted

技术标签:

【中文标题】.emacs .txt 文件视觉线模式与缪斯模式同时【英文标题】:.emacs .txt file visual-line-mode simultaneously with muse-mode 【发布时间】:2013-01-28 15:05:05 【问题描述】:

我通过以“#title”开头将我的缪斯模式文件(通常以 .txt 后缀命名)表示为缪斯模式。为此,我有

;; *.txt 文件上的缪斯模式,如果是#title 或 sect。标题在前 4 行 (add-hook '文本模式挂钩 (拉姆达() (除非 (或 (eq major-mode 'muse-mode) (不是 (stringp buffer-file-truename))) (当(等于(文件名扩展缓冲区-文件-真名)“txt”) (保存游览 (转到第 5 行) (if (re-search-backward "\* [A-Z][a-z]+.*\\|#title " 1 t) (缪斯模式)))))))

如果我也有

(添加到列表 'auto-mode-alist '("\\.txt$" . visual-line-mode))

在 .emacs 中(按照上面的代码),然后 muse-mode 不再起作用。虽然如果我在 muse 文件上的 emacs 中使用 Meta-x 调用视觉线模式,它不会搞砸。

理想情况下,我希望在所有 .txt 文件上都使用视觉线模式,但又不会弄乱缪斯。否则,我想以可视行模式启动所有 .txt 文件,除非它们是 muse 文件。

【问题讨论】:

【参考方案1】:

变量'auto-mode-alist选择主要模式。

visual-line-mode 是一个 minor 模式,通过将其添加到 'auto-mode-alist 您可以让它像 major 模式一样,它取代了 @987654327 @你开始了。

改为将turn-on-visual-line-mode-in-txt 添加到text-mode-hook,如下所示:

(add-hook `text-mode-hook 'turn-on-visual-line-mode)

(defun turn-on-visual-line-mode-in-txt ()
  (when (and (buffer-file-name)
             (string-match ".txt$" (buffer-file-name)))
    (turn-on-visual-line-mode)))

有关差异的更多信息,请阅读major 和minor 模式的手册。

【讨论】:

可爱。但是,我的要求是为所有 .txt 文件激活可视行模式,而不是所有文本模式文件。也就是说,我认为我不希望它用于 .tex 文件,例如,尽管根据您的建议产生的行为判断,.tex 文件包含在 text-mode-hook 中。 @ChristopherBarrington-Leigh 已更新。【参考方案2】:

我认为@treyJackson 发现了问题,但这里有一些额外的 cmets:

顺便说一句,您使用text-mode-hook 切换到muse-mode 在各种情况下都会出现问题(因为您首先切换到文本模式,然后在中途激活缪斯模式,然后文本结束-模式激活(通常,剩下的工作不多,但 text-mode-hook 上可能有更多功能可以运行)仍将执行)。一种更强大的方法可能是:

(add-to-list 'auto-mode-alist '("\\.txt\\'" . text-or-muse-mode))

(defun text-or-muse-mode ()
  (if (save-excursion
        (goto-line 5)
        (re-search-backward "\\* [A-Z][a-z]+.*\\|#title " 1 t))
      (muse-mode)
    (text-mode)))

当然,您也可以在第一行使用-*- muse -*-,或者改用magic-mode-alist

【讨论】:

非常感谢。这很有用。但是,如果我已经正确测试了它,这会影响缓冲区名称中带有 .txt 的所有文件吗?而不是那些以 .txt 结尾的? 我不这么认为:"\\.txt\\'" 专门匹配文件名末尾的.txt(而不是"\\.txt$",它也可以匹配中间的.txt的名称,如果它后跟换行符)。

以上是关于.emacs .txt 文件视觉线模式与缪斯模式同时的主要内容,如果未能解决你的问题,请参考以下文章

emacs 控制台模式 Org-mode 删除线未按预期显示

9.Emacs进阶之文本模式大纲模式

在不活动期间隐藏 Emacs 回声区域

如何让 Emacs Python 模式为缩进生成 TAB?

Emacs 系列:Org 模式之文档与演示稿 | Linux 中国

emacs使用本地emacs server模式打开远程文件