Every once in awhile I make a mistake at the command line, and use vim in a subshell.
This of course locks up that terminal window, and outputs a bunch of errors, with the main error being
Vim: Warning: Output not to a terminal
Is there a way for me to configure vim so it automatically dies when this happens, and doesn't hang my terminal?
I know I could probably figure out the process id of this vim instance, and kill it, but I would like a better solution if possible, as I tend to run lots of different vim instances in different tmux panes/windows. Thanks!
Not aware of any configuration option that does this, but when this happens if you type :q<Enter>
, it will quit vim.
Also, while Ctrl-C will not work, Ctrl-Z will put vim in the background and then you can kill it with kill %1
.
Or the vim short cutZQ
Capital letters. You can use it in normal mode :-)
You can prevent it from starting in the first place easily enough. Consider putting the following function definition in your .bashrc
:
vim() {
[ -t 1 ] || { echo "Not starting vim without stdout to TTY!" >&2; return 1; }
command vim "$@"
}
The command
builtin prevents recursing, by ensuring that it invokes an external command (rather than just calling the function again).
Similarly, you could create a script $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
...put $HOME/bin
first in your PATH
, and let that shim do the work without relying on a shell function.
You can just type this and hit enter, even though it is not showing up in the stdout it is still being input:
type the below :q!
Execute keyboard key Return/Enter
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With