我们知道xargs命令是专业的管道命令,也就是说它可以比较灵活地把前面命令的输出作为后面命令的输入,好处是比较灵活,而且对于没有管道输入能力的程序它可以较好的处理,便于实现各种一行式操作。
但是当我们拿find\locate\xargs和vim一起用的时候,就会遇到严重的问题。
首先vim会警告你,输入不是来自键盘,然后你硬要用,OK。
vim拿到第一个参数,你编辑完,退出,就会发现终端完全没响应了,按键盘上任何东西都看不到输出,你还以为是命令卡死了,按什么退出组合键都没有。
你看到不你输入的命令。
这说明什么呢,说明终端的模式被破坏了,也就是说终端能看到输入的命令,是因为终端默认的配置是允许看到命令的,如果不允许,当然看不到。此时需要用如下命令修复:
stty echo
但这样是不是解决了问题呢?
很遗憾,删除键,也就是backspace不能用了,你按退格键,它会被显示为类似^?的东东。
需要用一个stty erase ^?来解决。注意,后面那个^?不是两个字符,而是用退格键输入得到的。
但是即使是这样,输出的样式也是乱七八糟的,总之用着很别扭。
不过stty有一个强大的参数sane,stty sane可以直到类似复位的作用,使得一切看起来都恢复正常,但这只是看起来正常而已。
所以很显然,有xargs配合vim是很危险的。
与其这样,不如直接引用命令来得方便,至少没有特别严重的副作用。
像这样:
vim `locate index.php`
纵然结果仍然是会提示你多个文件等着编辑,至少不会出现“死机”的假像