Emacs:左侧的TODO指示器

20
我希望在源代码中的每一行左侧都有一种指示器。 #TODO:某些注释
// TODO: 一些注释
这种指示器可以只是一个标记,我已经启用了Emacs中显示的行号。
2个回答

21

这个命令会做出类似于你想要的操作。

(defun annotate-todo ()
  "put fringe marker on TODO: lines in the curent buffer"
  (interactive)
  (save-excursion
    (goto-char (point-min))
    (while (re-search-forward "TODO:" nil t)
      (let ((overlay (make-overlay (- (point) 5) (point))))
        (overlay-put overlay 'before-string (propertize "A"
                                                        'display '(left-fringe right-triangle)))))))

你可以根据需要自定义位图
为了使其适用于所有文件,您可以将其添加到'find-file-hooks中。
(add-hook 'find-file-hooks 'annotate-todo)

或者,如果您只想在特定模式下使用它,可以将其添加到这些模式钩子中。

请参见FringesThe 'display' PropertyOverlays以及最重要的before-string属性。

注意:代码已于2010年2月27日更新,改为使用覆盖层而不是直接向当前文本添加文本属性。


这很好用。不幸的是,我启用了行号显示功能。因此,行号覆盖了TODO:标记。有什么办法可以同时显示两者? - user90150
@Trey Jackson。现在它运行得非常好。我在行号指示器旁边添加了“下一个”。非常感谢。 - user90150
酷!但是..... :) ...更有用的是在边缘显示红色条形图,其长度按比例缩放到文档的长度。换句话说,如果TODO出现在文档的75%处,则指示器也会出现在边缘栏的75%处,而不考虑滚动状态以及TODO是否在屏幕上可见。一些差异工具可以做到这一点。有了这种指示器,您可以在边缘中看到TODO项目的存在,而无论它们当前是否在屏幕上可见。 - Cheeso
这似乎是通过字体锁定实现的东西。叠加层似乎过于笨重和不灵活。 - jrockway
@jrockway 这会很不错,但我没有看到任何将字体与在边距中显示内容相关联的方法。但我总是乐于学习新的方法... - Trey Jackson
显示剩余2条评论

6
我喜欢emacs-fu中这篇文章所描述的方法,它将TODO/FIXME/...添加到需要的模式的字体锁定设置中。与Trey的方法相比,这种方法应该在您输入时突出显示单词,而他的方法只能在您打开文件时突出显示单词(或者我理解错了吗)。
无论如何,由你决定。一个好的谷歌搜索可能会给你更多的想法:http://www.google.com/search?q=emacs+highlight+todo 更新:你的问题已经得到回答:Emacs, highlight all occurences of a word

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接