我正在尝试使用命令对文本文件中的内容进行排序
:1,$sort
这样,行就会按照起始字符的顺序排列 - 符号、大写字母和小写字母
现在如果我使用
:1,$!sort
我收到了一份不同的订单,看起来没有任何意义。一切看起来都乱七八糟。
那么这个命令在这里的作用是什么!
?为什么它会扰乱整个排序行为?根据https://stackoverflow.com/a/1220118/2105986,它应该是一个过滤运算符。
答案1
!
命令模式下的字符导致vi
vi 使用外部应用程序sort
对线条进行排序。
第一个命令:1,$sort
会vi
使用其内部排序机制。第二个命令: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
程序)。