Bash:杀死Vim时"Vim:警告:输出不到终端"

Bra*_*rks 16 vim bash

每隔一段时间我就会在命令行中犯一个错误,并在子shell中使用vim.

这当然会锁定该终端窗口,并输出一堆错误,主要错误是

Vim: Warning: Output not to a terminal
Run Code Online (Sandbox Code Playgroud)

有没有办法让我配置vim,以便在发生这种情况时自动死机,并且不会挂起我的终端?

我知道我可能会弄清楚这个vim实例的进程id,然后杀死它,但是如果可能的话我想要一个更好的解决方案,因为我倾向于在不同的tmux窗格/窗口中运行许多不同的vim实例.谢谢!

tot*_*oth 21

不知道任何配置选项执行此操作,但如果您键入:q<Enter>,这将发生,它将退出vim.

此外,虽然Ctrl-C不起作用,Ctrl-Z会将vim放在后台,然后你可以用它来杀死它kill %1.

  • @BradParks,对于那种情况`vim $(vim x)`你可以通过键入`:q <Enter>`两次退出. (2认同)

Kri*_*day 14

或者vim捷径
ZQ
大写字母.你可以在正常模式下使用它:-)


Cha*_*ffy 13

你可以很容易地防止它首先开始.考虑在您的下面添加以下函数定义.bashrc:

vim() {
  [ -t 1 ] || { echo "Not starting vim without stdout to TTY!" >&2; return 1; }
  command vim "$@"
}
Run Code Online (Sandbox Code Playgroud)

所述command内置防止递归,通过确保它调用一个外部命令(而不是仅仅再次调用功能).

同样,您可以创建一个脚本$HOME/bin/vim:

#!/bin/sh
if [ -t 1 ]; then
  exec /usr/bin/vim "$@"
else
  echo "Not starting vim without stdout to TTY!" >&2
  exit 1
fi
Run Code Online (Sandbox Code Playgroud)

... $HOME/bin先放入你的PATH,然后让垫片完成工作,而不依赖于shell函数.


小智 8

您只需键入并按回车键,即使它没有出现在标准输出中,它仍在输入中:

  1. 输入以下内容:q!

  2. 执行键盘键 Return/Enter