Bash: убить Vim, когда " Vim: предупреждение: вывод не на терминал"
время от времени я делаю ошибку в командной строке и использую vim в подсхеме.
Это, конечно, блокирует это окно терминала и выводит кучу ошибок, при этом основной ошибкой является
Vim: Warning: Output not to a terminal
есть ли способ настроить vim, чтобы он автоматически умирал, когда это происходит, и не зависает мой терминал?
Я знаю, что, вероятно, мог бы выяснить идентификатор процесса этого экземпляра vim и убить его, но я хотел бы лучшее решение, если это возможно, поскольку я, как правило, запускаю множество различных экземпляров vim в разных областях tmux/окнах. Спасибо!
3 ответов
вы можете предотвратить его от начала в первую очередь достаточно легко. Рассмотреть следующее определение функции в .bashrc
:
vim() {
[ -t 1 ] || { echo "Not starting vim without stdout to TTY!" >&2; return 1; }
command vim "$@"
}
на command
builtin предотвращает рекурсию, гарантируя, что он вызывает внешнюю команду (а не просто снова вызывает функцию).
аналогично, вы можете создать скрипт $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
, и пусть эта прокладка делает работу, не полагаясь на оболочку функция.
не известно о какой-либо опции конфигурации, которая делает это, но когда это происходит, если вы вводите :q<Enter>
, он выйдет из vim.
кроме того, в то время как Ctrl-C не будет работать, Ctrl-Z поставит vim в фоновом режиме, а затем вы можете убить его с помощью kill %1
.