Vi:“$ s / $ / done /”是“不是编辑器命令”?

时间:2017-02-03 17:24:01

标签: vim vi

我在bash中写了一个无限循环:

while :
do
   (whatever)
done

但是,当我尝试以这种方式插入“完成”行时

vi -c "$s/$/\rdone\r/g" -c "w!" -c "q!"

我得到的是“$ s / $ / \ rdone \ r / g”不是编辑器命令。但是,当我使用gvim时,这种方法很好。

有人知道为什么会这样吗?我做错了吗?

2 个答案:

答案 0 :(得分:3)

只需用单个引号替换双引号:

vim yourfile -c '$s/$/\rdone\r' -c 'wq!'

首先用bash解析双引号,它特别是$符号的问题。

答案 1 :(得分:0)

vi是一个古老的工具。我没有它的副本,所以我无法在vi中测试你的命令,但如果我使用vim你的命令对我来说很好。试着这样做:

vim file -c "$s/$/\rdone\r/g" -c "w!" -c "q!"

另外,作为旁注,wq命令可以合并为

vim file -c "$s/$/\rdone\r/g" -c "wq!"

并且不需要全局标记(/g),因为$只能在该行上匹配一次。

vim file -c "$s/$/\rdone\r" -c "wq!"

这应该更有效率。