Emacs有可以在代码中做笔记的包吗?

Emacs有什么包可以实现以下的代码笔记功能吗:

  1. 在项目中选择某些区域的代码,然后可以给选择的这部分代码添加笔记。
  2. 可以全局总览项目下的所有笔记(类似magit可以overview项目下的所有改动)。
  3. 当代码有改动时,可以自动更新笔记对应的link,不需要手动更新笔记link到代码的哪个文件哪几行。

如果没有的话,大家有什么实现的思路吗?

3 个赞

试试这个?

也可以试试 org-remark

5 个赞

这个看着很不错呀,周末试试,感谢!

在org中自定义一个link type就可以记录对应代码文件的路径和行号,但有个问题是,如果在文件内容修改了,怎么更新位置信息。

是的,这就是我开这个帖子的原因。。。

我也有类似需求

我看代码经常喜欢在org中这样记录

- func1 说明
  - func2 说明
  - func3 说明
- func_s 说明

我希望func3是个链接,点击一下func3,就可以打开代码文件并跳转到对应位置。

有个 org-remark

为什么不把笔记直接写在代码注释里呢?

有可能是别人的源码

  1. 这个项目有可能是我需要做修改的,如果不是单纯阅读学习的项目,把笔记加在注释里感觉不太好,开发完了最后还要去掉,感觉有点麻烦。
  2. 面对需要结合项目里分散在不同地方的代码才能理解的情况,注释可能就没法很好地标记了。
  3. 把阅读笔记加到注释里感觉会和正常代码注释混淆,可能可以通过手动加一些标记来区分,不过感觉也很麻烦。

可以试试这个。

我需要记录的时候,会用 org-capture 创建一个独立的 heading 到一个 org 文件里,然后在 heading 下做记录。

这个包可以复制粘贴代码位置,将位置粘贴在一个文件里,自己备注相关信息,从而实现追踪一个功能上下文。

应该能满足你的第 1, 2 点的需要吧,不过好像链接是不会自动更新的。

1 个赞

我写过一个包anote(或者anotes),看起来大概能满足你的需求。

不过有这么几个问题:

  1. 在buffer里是用margin显示注释,所以没法多行,太长了也会只显示注释开始的一部分。
  2. 如果是在外部修改了代码,注释位置没法跟随改动更新。

可以在我github账户zbelial下找找,看合不合适。

1 个赞

我之前读某些源文件时,因为文件的某些位置太难找(层级超级多),文件关掉后下次在找到这个位置不容易,如果记录行号,行号位置会变,更新麻烦。 于是我就在注释里打了一些16进制符号,如c-q c-n,,这个类型的符号在emacs中显示为一个像^+大写字母的样子,在浏览器或其它编辑器显示就是方框了。

然后下次我要找到这个位置,就搜索这个符号能定位到。代码有改动时也不影响,还是能找到原来的位置,但如果把我打在注释里的特殊符号 删除掉,那个就没办法了

注:这个符号我写上面文字时是打上去的,但论坛应该是做了什么过滤显示不出来

1 个赞

Org 文学编程不就是干这个的吗?

如果代码文件夹好几层,org-remark 会在每个目录下生成一个总的 marginalia.org 文件。

喜欢少生成一些无关文件的话,可能 annotate.el 更适合一些,只会有一个单独的数据库文件。

fork一份专门写注释,后续还能merge

我觉得你这个需求最适合用doxygen……供参考

1 个赞

可以用关键词/正则表达式匹配

#+LINK: workflow file:~/codes/T-field/workflow.py::def %s
#+LINK: workflow_c file:~/codes/T-field/workflow.py::class %s
#+LINK: workflow_reg file:~/codes/T-field/workflow.py::/^\(class\|def\).*%s/ 


跳转到 workflow.py 的 Accumulator 类:
[[workflow_c:Accumulator]]  

跳转到 workflow.py 的 drop 函数:
[[workflow:drop]]  

跳转到 workflow.py 的带有 drop 关键词的类或函数的签名行:
[[workflow_reg:drop]]  

当然如果你改了项目地址和函数签名之类的,还是得手动更新链接

2 个赞

是个好思路。