web-dev-qa-db-fra.com

Bash: tuer Vim lorsque "Vim: avertissement: sortie non vers un terminal"

De temps en temps, je fais une erreur sur la ligne de commande et j'utilise vim dans un sous-shell.

Bien sûr, cela verrouille cette fenêtre de terminal et génère un tas d'erreurs, l'erreur principale étant

Vim: Warning: Output not to a terminal

Existe-t-il un moyen pour moi de configurer vim afin qu'il s'éteigne automatiquement lorsque cela se produit et ne bloque pas mon terminal?

Je sais que je pourrais probablement comprendre l'ID de processus de cette instance de vim et le tuer, mais j'aimerais une meilleure solution si possible, car j'ai tendance à exécuter beaucoup d'instances de vim différentes dans différents volets/fenêtres tmux. Merci!

16
Brad Parks

Vous pouvez l'empêcher de démarrer en premier lieu assez facilement. Pensez à mettre la définition de fonction suivante dans votre .bashrc:

vim() {
  [ -t 1 ] || { echo "Not starting vim without stdout to TTY!" >&2; return 1; }
  command vim "$@"
}

La fonction intégrée command empêche la récurrence, en s'assurant qu'elle appelle une commande externe (plutôt que d'appeler simplement la fonction à nouveau).

De même, vous pouvez créer un 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

... mettre $HOME/bin en premier dans votre PATH, et laissez ce shim faire le travail sans compter sur une fonction Shell.

13
Charles Duffy

Pas au courant d'une option de configuration qui fait cela, mais lorsque cela se produit si vous tapez :q<Enter>, il quittera vim.

De plus, alors que Ctrl-C ne fonctionnera pas, Ctrl-Z mettra vim en arrière-plan et vous pourrez ensuite le tuer avec kill %1.

20
toth

Ou le raccourci vim
ZQ
Majuscules. Vous pouvez l'utiliser en mode normal :-)

13