! 如何影响 vim 中的排序

! 如何影响 vim 中的排序

我正在尝试使用命令对文本文件中的内容进行排序

:1,$sort

这样,行就会按照起始字符的顺序排列 - 符号、大写字母和小写字母

现在如果我使用

:1,$!sort

我收到了一份不同的订单,看起来没有任何意义。一切看起来都乱七八糟。

那么这个命令在这里的作用是什么!?为什么它会扰乱整个排序行为?根据https://stackoverflow.com/a/1220118/2105986,它应该是一个过滤运算符。

答案1

!命令模式下的字符导致vivi 使用外部应用程序sort对线条进行排序。

第一个命令:1,$sortvi使用其内部排序机制。第二个命令:1,$!sort会提取所有行并将其作为标准输入提供给应用程序sort

只需尝试此vi命令::!ls -la。您将看到 的输出ls,按下后Enter您将返回vi。该机制通常(例如)编译 编写的代码而vi无需关闭并重新打开文件。

所以你看,!在这种情况下使用会导致完全不同的机制。ubuntusort实用程序的排序可能与内部实用程序不同vi

答案2

根据该答案1,$!sort前任-mode 版本。通过Q在正常模式下键入,您可以进入 ex-mode。此命令的正常模式版本是1G!Gsort根据该 SO 答案。否则,正如 chaos 所说,!会导致 vim 打开 shell 并sort在其中执行(从而调用sort程序)。

相关内容