按“标签”对行进行排序,并在行后附加输出

时间:2012-09-27 19:50:38

标签: vim

我刚刚发布了一个关于"How to search a Dictionary with the contents of a list"的问题,并得到了El Isra,romainl和Zyx的回答,解决了这个问题。

但是我(在todo列表的观点中)发现以特定方式显示结果可能会很有趣,即按类别(或#34;标签")创建的视图。 / p>

结果行是:

Call Tom about the Foo project @Tom &Foo
Complete the summary of the Bar project and send it to Thomas &Bar @Tom
Have Susan send me and Tom her forecasts for the Foo project @Susan @Tom &Foo

是否可以在Vim中按类别(或"标签")以这种方式显示这些结果(用空行分隔):

Call Tom about the Foo project @Tom &Foo
Complete the summary of the Bar project and send it to Thomas &Bar @Tom
Have Susan send me and Tom her forecasts for the Foo project @Susan @Tom &Foo

@Tom
Call Tom about the Foo project &Foo
Complete the summary of the Bar project and send it to Thomas &Bar
Have Susan send me and Tom her forecasts for the Foo project @Susan &Foo

@Susan
Have Susan send me and Tom her forecasts for the Foo project @Tom &Foo

&Foo
Call Tom about the Foo project @Tom
Have Susan send me and Tom her forecasts for the Foo project @Susan @Tom

&Bar
Complete the summary of the Bar project and send it to Thomas @Tom

事实上,我记得这是方式("观点")Lotus Agenda继续进行,虽然以更复杂的方式......

2 个答案:

答案 0 :(得分:1)

我认为您实际上并不希望将这些分组结果插入到原始待办事项文件中,而是要使用已过滤的单独列表。为此,quickfix列表是理想的。

我会编写一个函数来迭代传递的类别列表,并在你的待办事项列表上执行:vimgrepadd命令,从而产生以下调用:

:vimgrep /@Tom/ %
:vimgrepadd /@Susan/ %
:vimgrepadd ...

这可以让您在quickfix列表中按类别分组,您可以通过:copen打开它。现在,仍然缺少的是任何类别的隔离。您可以使用setqflist()插入分隔线,但我可能会在每个:vimgrep之后存储quickfix元素的数量,然后构建一个使用这些行号折叠每个类别的自定义'foldexpr'。这是一些实施工作,但你已经要求超出通常的文本编辑领域。

答案 1 :(得分:0)

即使可以在Vim中执行此操作,我认为像解耦这样的任务在其他编程语言中更好:Vim脚本仅用于增强一些部分编辑功能。这就是为什么Vim没有内置sort命令(更新:它现在在Vim 7中实际执行)的原因:因为这个命令执行的任务也很有用其他编辑/命令。

如果您创建一组Python / Perl脚本来为您执行此文本处理(可以说是比Vimscript更好的文本处理语言),将它们与Vim结合起来很容易,例如:

:%!python myscript.py

将当前缓冲区的全部内容发送到myscript.py并将结果替换为缓冲区。您还可以查看:help read!