Luc*_*rri 4 vim bash shell zsh
我已经搜索过此错误,但找不到解决方案。
我正在遵循加入 Linux 世界的基本指南,并且我正在尝试创建一个.txt文件,并使用该脚本在 Vim 中添加一些文本行。它应该有效,但在我的情况下无效。
这是我的简单脚本(我正在使用zsh,如果它可能是重要信息):
#!/bin/sh
filename= test.txt
vim $filename << COMMAND
i
Hello
^[
:x
COMMAND
脚本失败并显示消息:Vim: error reading input。
我哪里错了?
filename变量赋值中有一个拼写错误(一个额外的空格):filename= test.txt。此表达式被解释为使用设置为空字符串的环境变量调用test.txt命令filename。所以你应该删除=.
关于Error reading input消息,请阅读 Vim 文档:help E208:
Run Code Online (Sandbox Code Playgroud)Vim: Error reading input, exiting...当需要输入时 Vim 无法读取键入的字符时会发生这种情况。Vim 卡住了,它唯一能做的就是退出。当 stdin 和 stderr 都被重定向并执行不退出 Vim 的脚本时,就会发生这种情况。
所以 Vim 认为它读取了一个没有退出 Vim 的脚本。您的脚本进入插入模式,输入Hello,然后Esc,最后调用:x命令。万事大吉,:x命令退出Vim,当然是在命令行区输入的。如果您输入^[为Control- V, Esc,则脚本将退出插入模式并:x成功执行命令。因此,您输入^[了两个字符。所以你真正的输入是Hello^[:x(并且脚本没有退出 Vim):
Vim: Error reading input, exiting...
现在如果你用^[实际的转义字符替换这两个字符,并从同一目录执行脚本,它会因为交换文件而失败:
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.
(您可以通过运行阅读详细说明vim test.txt)。您可以使用-n选项忽略交换文件:vim -n "$filename"。现在输出将是:
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: Finished.
这说得通。您实际上不需要 Vim 的交互式版本。所以,你应该使用Ex模式(-e可选),或者更确切地说,改善ex模式(-E选择): vim -n -E "$filename"。
同时,这也是包装在单引号中的值,如果是不应该的内容来解释一个好主意,并在双引号,如果字符串包含shell变量:filename='test.txt'。
固定版本:
Vim: Warning: Input is not from a terminal
(^[在 Vim 中使用Control- v,输入Esc)。
| 归档时间: | 
 | 
| 查看次数: | 4475 次 | 
| 最近记录: |