有时候我会在命令行中犯错误,并在子shell中使用vim。
当然,这会锁定该终端窗口并输出一堆错误信息,其中主要的错误是:
Vim: Warning: Output not to a terminal
有没有办法让我配置vim,当它发生这种情况时自动关闭,并且不会挂起我的终端?
我知道我可以找到这个vim实例的进程ID并杀死它,但如果可能的话,我想要一个更好的解决方案,因为我通常会在不同的tmux面板/窗口中运行许多不同的vim实例。谢谢!
有时候我会在命令行中犯错误,并在子shell中使用vim。
当然,这会锁定该终端窗口并输出一堆错误信息,其中主要的错误是:
Vim: Warning: Output not to a terminal
有没有办法让我配置vim,当它发生这种情况时自动关闭,并且不会挂起我的终端?
我知道我可以找到这个vim实例的进程ID并杀死它,但如果可能的话,我想要一个更好的解决方案,因为我通常会在不同的tmux面板/窗口中运行许多不同的vim实例。谢谢!
我不知道有任何配置选项可以做到这一点,但当发生这种情况时,如果你输入:q<Enter>
,它将退出vim。
此外,虽然Ctrl-C无法使用,但Ctrl-Z会将vim放到后台,然后您可以使用kill %1
来杀死它。
vim $(vim /tmp/it.json)
,有时当我回忆起最后一个命令来编辑文件时,我没有先进行扩展。 - Brad Parksvim $(vim x)
这种情况,你可以通过输入 :q<Enter>
两次来退出。 - toth<ESC>
然后强制退出使用 :q<Enter>
。 - wittich或者vim的快捷键
ZQ
大写字母。您可以在正常模式下使用它 :-)
Ctrl-Z
和Ctrl-C
都没用,它返回了一个消息“作业无法挂起”,什么也做不了。这个ZQ
很有效,谢谢! - Rens Tillmann.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
的最前面,并让该代理程序(shim)执行工作,而不依赖于shell函数。
vim
函数? - user2023370即使它没有显示在标准输出中,您仍然可以输入以下内容并按Enter键:
键入以下内容 :q!
执行键盘上的回车/输入键
esc
,然后使用以下任一方法。:qa
或者
SHIFT ZZ