EMACS-DOCUMENT

=============>集思广益

如何同时Narrow同一buffer的不同区域

写博客的一大乐趣在于能从评论中学习到各种知识. 之前我写过一篇关于fancy-narrow 的博文,结果引起了一场 WilfredPhil 之间的争论. Wilfred对比了一下 fancy-narrownarrow-to-region-indirect. 我以为 narrow-to-region-indirect 是一个我还不熟悉的标准命令或函数,就打算找个时间研究一下它. 结果Phil告诉我它其实是一段好用的自定义代码.

narrow-to-regioin-indirect 的思路是,多次复制当前buffer,然后在各个克隆buffer中narrow不同region. 如果你不清楚怎么实现,Zane Ashby写过一篇很好的帖子,不仅给出了一个使用场景 还给出了一个实现该功能的函数的源代码. 正如Phil所评论的,在他看到这段代码之前,他都是手工来操作的.

你可能会觉得,完全可以打开一个文件,然后将buffer分割成多份,再在不同的window上去narrow不同的region. 但是这样是行不通的,因为在其中一个buffer中narrow会同时影响到所有其他window中的buffer. 解决问题的关键在于创建indirect buffers, 这些indirect buffers可以分别narrow不会相互影响. 此外在任何indirect buffer中所做的内容修改同时会反映到其他clone bufer及基础buffer中去. 这样你修改完内容后,只需要删掉那些clone buffer然后保存基础buffer就可以了.

你可以在Ashby的博客中找到相关代码,grayswx也在这里 中实现了一个稍微有些差异的版本. 如果你需要同时操作同一buffer的不同部分,尤其当你想对不同部分使用不同mode时,不妨试试这种方法.