4 votes

La commande Vim exec en ligne de commande, et Vim : Avertissement : L'entrée ne provient pas d'un terminal

vi.sh

vim -c "set ft=unix" -c "x" $1

main.sh

sh vi.sh file1
sh vi.sh file2

Si j'exécute sh vi.sh file1 o sh main.sh il n'y a pas d'avertissement.

Mais si j'exécute cat main.sh | sh il donnerait : Vim: Warning: Input is not from a terminal .

Quelle est la différence ? Comment puis-je écarter ce message d'avertissement lorsque j'exécute cat main.sh | sh ?

2voto

kenorb Points 2464

Il faut faire une pseudo-attribution de quotas. Essayez quelque chose comme ( vi.sh ) :

#!/bin/sh
exec vim -c "set ft=unix" -c "x" "$@" < /dev/tty

En rapport :

1voto

Ade YU Points 1229

Il est facile de supprimer l'avertissement.

main.sh

sh vi.sh file1 2>/dev/null
sh vi.sh file2 2>/dev/null

Mais notez que cela supprime en fait tous les avertissements.

La raison est probablement que Vim a trouvé que votre pipe est ouvert alors que la commande de Vim n'était pas de lire quoi que ce soit à partir de stdin . L'avertissement n'est donc qu'un rappel.

Une meilleure solution est donc de sauvegarder les commandes quelque part, par ex. make.sh lui-même et le lancer.

Une autre question sur ce sujet ici https://superuser.com/questions/336016/invoking-vi-through-find-xargs-breaks-my-terminal-why

0voto

jthill Points 10384

En ~/bin/r

[ $# -eq 0 ] && set -- -;
vim -R "$@"

dans mon .vimrc :

au StdinReadPost * set buftype=nofile

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X