请教:想给txt文件加个目录索引,大家有没有比较好的插件推荐?

最近在看一些txt文件,有中文有英文,有些还挺长的。有没有好的插件可以方便的给txt文件生成一个目录索引,可以比较方便的跳转?比如用ctags自定义匹配规则在一个窗口显示出来目录的哪种? 多谢大家;

可能你想要的是deft管理?

不是插件方式,不知道是不是能满足你的要求。

例如文件名叫 a.txt,内容是

1.1 hello
hello
1.2 world
world
1.3 hahaha
hahaha


可以这样处理

  1. awk '/[1-9]\.[1-9].*/' a.txt > index.txt
  2. etags --regex="/[1-9]\.[1-9].*/" a.txt (两个正则需要保持一致)

在emacs中 M-x visit-tags-table RET TAGS,一个窗口打开 index.txt, 1个窗口打开a.txt。

在index.txt窗口中 M-. 可跳转到a.txt中。

你指的是像orgMode的 imenu list 那样的效果吗?

对啊对啊,就是这种效果,但是普通的txt文件没有orgmode这种层级标记,不知道有没有插件可以针对txt的各级目录匹配自动生成imenu呢?

现成的插件肯定是没有的,得自己写代码。首先要确定txt的各级目录有没有统一的格式,这样可以搜索匹配,然后可以研究一下imenu的实现原理和txt的目录结合下。

示 例 文 件 ?

有的,如果你的层级目录有一定规律的话,可以用outline。你可以查查outline-mode。基本上设置一个outline-regexp匹配到各级目录就可以。outline给你目录的跳转折叠,还有imenu等等。

你甚至可以用hi-lock高亮层级目录,不过那个麻烦一点。

文件上传个链接并且附上截图看看, 不然怎么讨论?

遇到这种, 我一般是把它转换成orgmode格式, 一劳永逸

转换成org-mode?怎么转换呢?直接强制为org-mode模式吗? 可以再描述一下吗?多谢啊

手工转换的, 搜索替换, 在txt文件里找到章节的地方, 替换成orgmode格式的标题

如果不需要保存index只是要在emacs中查看,用imenu非常简单:

(defun my/setup-txt-imenu ()
  (setq imenu-generic-expression
        '(("number" "^\\([[:digit:]]+\.[[:digit:]]+\\)" 1) ; 1.1 1.2 ...
          ("English" "^\\(No\.[[:digit:]]+\\)" 1) ; No.1 No.2 ...
          )))

(add-hook 'text-mode-hook 'my/setup-txt-imenu)

需要注意当imenu-create-index-functionimenu-default-create-index-function时才能使用imenu-generic-expression,很多programming major mode会修改imenu-create-index-function

1 个赞