vim:如何像这样管道命令?

vim:如何像这样管道命令?

我有一个文本文件..

value #value2
 value2 #value3
...

我想对 -f 进行排序并在 # 之前添加两个选项卡,所以我这样做了

:'<,'>norm f#i^I^I |!sort -f

但给我一个糟糕的输出!我知道一个解决方法,使用两个单独的命令

:'<,'>norm f#i^I^I^I
:'<,'>!sort -f

但问题是:可以通过管道传输这些命令吗?

答案1

如果你看一下:help :normal你会发现

该命令后面不能跟另一个命令,因为任何“|”被视为命令的一部分。

另请注意,这|不是管道。这只是“连接”命令的一种方法。有点像用 分隔两个 shell 命令;。因此,应用于一个命令的范围不会延续到后续命令。

我能想到的最接近的替代方案是不涉及自定义函数或类似函数,即使用:substitute并重新指定范围:

:'<,'>s/#/\t\t\t#/ | '<,'> !sort -f

相关内容