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

时间:2017-09-26 16:57:11

标签: bash vim

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

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

Vim: Warning: Output not to a terminal

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

我知道我可能会弄清楚这个vim实例的进程ID并将其删除,但是如果可能的话我想要一个更好的解决方案,因为我倾向于在不同的tmux窗格/窗口中运行许多不同的vim实例。谢谢!

4 个答案:

答案 0 :(得分:15)

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

此外,虽然Ctrl-C不起作用,但Ctrl-Z会将vim放入后台,然后您可以使用kill %1将其终止。

答案 1 :(得分:13)

你可以很容易地防止它首先开始。考虑在.bashrc

中添加以下函数定义
vim() {
  [ -t 1 ] || { echo "Not starting vim without stdout to TTY!" >&2; return 1; }
  command vim "$@"
}

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

...将$HOME/bin放在PATH的第一位,让该垫片完成工作而不依赖shell函数。

答案 2 :(得分:11)

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

答案 3 :(得分:6)

您可以直接输入并按Enter键,即使它仍未显示在标准输出中也是如此:

  1. 键入以下内容 :q!

  2. 执行键盘键 返回/输入