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.


или короткий путь vim
ZQ
Заглавная буква. Вы можете использовать его в обычном режиме :-)