每隔一段时间我就会在命令行中犯一个错误,并在子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.
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函数.