比管道命令更合适的vim组合操作

我们知道xargs命令是专业的管道命令,也就是说它可以比较灵活地把前面命令的输出作为后面命令的输入,好处是比较灵活,而且对于没有管道输入能力的程序它可以较好的处理,便于实现各种一行式操作。

但是当我们拿find\locate\xargs和vim一起用的时候,就会遇到严重的问题。

首先vim会警告你,输入不是来自键盘,然后你硬要用,OK。

vim拿到第一个参数,你编辑完,退出,就会发现终端完全没响应了,按键盘上任何东西都看不到输出,你还以为是命令卡死了,按什么退出组合键都没有。

 

你看到不你输入的命令。

这说明什么呢,说明终端的模式被破坏了,也就是说终端能看到输入的命令,是因为终端默认的配置是允许看到命令的,如果不允许,当然看不到。此时需要用如下命令修复:

stty echo

但这样是不是解决了问题呢?

很遗憾,删除键,也就是backspace不能用了,你按退格键,它会被显示为类似^?的东东。

需要用一个stty erase ^?来解决。注意,后面那个^?不是两个字符,而是用退格键输入得到的。

但是即使是这样,输出的样式也是乱七八糟的,总之用着很别扭。

不过stty有一个强大的参数sane,stty sane可以直到类似复位的作用,使得一切看起来都恢复正常,但这只是看起来正常而已。

所以很显然,有xargs配合vim是很危险的。

与其这样,不如直接引用命令来得方便,至少没有特别严重的副作用。

像这样:

vim `locate index.php`

纵然结果仍然是会提示你多个文件等着编辑,至少不会出现“死机”的假像

发表评论

电子邮件地址不会被公开。 必填项已用*标注