我正在使用CentOS 6.7
我希望用vi打开test.txt并插入文本“hihi” 然后保存并退出vi。
"rxjs": "^5.0.0-beta.8",
结果如下
#! /bin/bash
vi test.txt << 'END'
i
hihi
press ESC
w
q
END
我该如何解决?
答案 0 :(得分:1)
你不需要使用vi这么简单。您可以使用echo
。例如:
echo "hihi" > test.txt
如果您真的想要做一些更复杂的事情,请发布更多细节。
答案 1 :(得分:1)
从bash调用vim:
vim test.txt +$'i\nhihi' +w +q
您可能还想查看“ed”。这是一个与vi类似命令的编辑器,但它实际上是为从脚本调用而设计的。
答案 2 :(得分:0)
有多种方法可以创建或修改文本文件,范围从any()
到cat
,sed
到awk
。不过,我会假设你有充分的理由想要使用ed
。
尝试此命令:
vi
在操作中,这看起来像:
echo $'ihihi\E:x\n' | vi test.txt
我发现这种方法很脆弱:如果$ echo $'ihihi\E:x\n' | vi test.txt
Vim: Warning: Input is not from a terminal
$ cat test.txt
hihi
遇到错误情况,则不会看到任何消息。
我们需要让vi
看到转义字符。有很多方法可以做到这一点。我选择使用bash的vi
字符串,因为它允许将escape作为简单的两个字符串输入:$'...'
。我们使用的步骤是:
\E
介绍插入模式。
将四个字符i
输入缓冲区。
退出hihi
,退出插入模式。
\E
退出并保存。
答案 3 :(得分:0)
vi
具有历史性的旧编辑器ex
的 visual 模式,是旧版ed
的扩展版本。您始终可以使用ex
或vi -e
恢复旧线路模式。
这样,它只是从标准输入中读取,因此可以很容易地在bash脚本中使用。
这将是
ex test.txt << END
i
hihi
.
wq
END
(点用于退出线模式的输入模式,如ed
)
答案 4 :(得分:0)
在 shell 中使用 vi 命令的工作方式如下:
vi -c "set fileformat=unix | wq" filename.txt
但是,这不适用于 g 之类的命令。
您需要使用两个 -c 参数才能使其工作,例如:
vi -c g/^/m0 -c wq filename.txt
或
vi filename.txt -c g/^/m0 -c wq
快乐编码!
P.S. 在您使用的情况下:
vi test.txt +$'i\nhihi' +wq
这将在内存中的当前行之前插入!
例如,如果您之前使用此命令在第 20 行之前插入了“hihi”:
vi test.txt +20$'i\nhihi' +wq (insert hihi before line 20)
vi test.txt +20$'a\nhihi' +wq (insert hihi after line 20)
然后输入不指定数字将使用内存中的最后一个数字。
vi test.txt +$'i\nhihi' +wq (This command will now insert before line 20)
vi test.txt +$'a\nhihi' +wq (This command will now insert after line 20)
您必须通过指定新编号来重置内存中的行号:
vi test.txt +0$'i\nhihi' +wq (add hihi before line 0 to very top)
vi test.txt +0$'a\nhihi' +wq (add hihi after line 0 to very top)
vi test.txt +1$'i\nhihi' +wq (add hihi before line 1 to very top)
vi test.txt +1$'a\nhihi' +wq (add hihi after line 1 as line 2)
(在最后一行前加上 hihi)
vi test.txt +$(wc -l < test.txt)$'i\nhihi' +wq
或
(在最后一行后添加 hihi)
vi test.txt +$(wc -l < test.txt)$'a\nhihi' +wq