【讨论】分享一个 Neovim 插件 Yode-nvim,不知道 Emacs 有没有实现过类似功能

大概意思就是跨文件的 narrow region 编辑,减少干扰项。

Yode-Nvim - Focused Code Editing_哔哩哔哩_bilibili

逛推的时候发现的这个插件,然后我把介绍视频从油管搬到了哔哩哔哩。

2 个赞

hoschi/yode-nvim: Yode plugin for NeoVim

Focus on the important parts of the code. Hide the rest, literally. With Yode-Nvim you can go deeper than the file level, picking out the lines that are important for the current task. Whether you want to focus on important parts of a large file, or collect small parts of many files, you can see everything at a glance. Zoom from the focused part back into the file to briefly expand your context or adjust your focus. Everything happens in the editor, the rest of the tool chain still works, this makes Yode-Nvim work for any programming language, framework, etc.

For the past six months, I’ve been using this MVP in its various stages in development for Yode-Nvim itself. Currently I am working on fixing minor bugs and integrating more plugins.

作者 2017 年在油管介绍过自己的理念,今年发展成了一个比较稳定的 Neovim 插件。

看起来不错,有人实现一个吗

clone-indirect-buffer-other-window + narrow 可实现,我用很久了。

还有一个现成的包 EmacsWiki: Narrow Indirect ,我没用过。

3 个赞

这个narrow-indirect包可以对region、defun块进行narrow到一个独立的indirect buffer中

主要的问题是,narrow多个不同的文件的不同的region,就会开多个独立的indirect buffer,无法像Yode-nvim一样,集中在一处

所以emacs是否有将多个不同的buffer,垂直按顺序排列展开,合并为一个parent buffer的功能,将这些不同的indirect buffer垂直排列,共用一份scroll bar,就像一个聚合的buffer一样?

类似的包有2012年的multifiles包, 这个包可以实现类似的功能,且是在同一个buffer中;它使用的mirror overlay来与原文件进行内容同步,每输入一个字符(post-command),都会将region中的内容,同步给mirror overlay,替换掉整个region,显然效率上没有indirect buffer高(未做过实验,只是感觉);

而且multifiles的这个buffer,只是一个普通的buffer,只有一种major mode,如果clone了不同major mode的region,那么最后一次的clone的major mode生效,可能可以使用mmm-mode支持多major mode

所以,multifiles包有待进步,还不能足以做为实际工作使用,不知道目前emacs是否有能与Yode-nvim接近的用于内容聚合的包?

当然,还有org block的tangle, detangle功能,可以双向同步外部文件内容

不过,会在外部文件中插入相应的ref标记,造成了一定的侵入(当然也不是完全不可接受)