Lorsque vous utilisez Vim pour lire à partir de stdin, il imprime un message informatif:
$ echo foo | vim -
Vim: Reading from stdin...
$
C'est juste un exemple. L'utilisation réelle ne permet pas les constructions shell. vim <(echo foo)
n'est pas une option.
Puis-je supprimer cela en utilisant uniquement les options Vim et / ou les paramètres vimrc?
Au cas où vous auriez besoin de savoir à quoi cela sert, j'essaie d'utiliser Vim pour lire les pages de manuel (plug sans vergogne). GNU man n'autorise pas les constructions de shell dans MANPAGER
, et en utilisant ftplugin/man.vim
et d'autres choses, j'ai réussi à avoir une expérience confortable en utilisant juste MANPAGER="vim -"
. Le dernier ennui restant est le message disgracieux imprimé après chaque page de manuel que j'ai consultée.
export MANPAGER='vim -c "%! col -b" -c "set ft=man nomod nolist ignorecase" -'
ouexport MANPAGER="vim -"
je ne vois aucun problème?man ls
ouvre la page de manuel comme prévu.echo foo | vim -Nu NONE -
: help less
donne quelques informations pour l'utiliser comme pager.Réponses:
À partir de Vim 8.0.1308 (novembre 2017), vous pouvez utiliser l'
--not-a-term
option pour supprimer ce message; par exemple avecquit
:Ou avec
exit
:la source
cat
, mais il peut toujours être utile pour appliquer Vimscript à l'entrée, par exemple+'runtime! syntax/2html.vim'
pour exporter du texte surligné en HTML stylisé (en supposant un type de fichier déduit ou spécifié). Il existe quelques options autres que celles mentionnées jusqu'à présent; le premier qui me vient à l'esprit est d'utilisermktemp
pour stocker la sortie de la commande et de l'utiliser comme entrée de Vim. Vous pouvez ajouter les commandes de redirection et de shell de Vim pour «coller» le résultat de la commande dans le tampon, mais cela demande un peu plus de travail. (Les fichiers de script Vim peuvent automatiser de longues invocations au lieu d'utiliser des alias.)--not-a-term
dans Vim 7.4.1689 dans Ubuntu 16.04 (mais pas 7.4.8056 sur Mac), mais cela ne supprime pas le message.:help version8.txt
.--not-a-term
L'option elle-même a été ajoutée7.4.1419
et son comportement a été modifié pour supprimer également le message Reading from stdin ... dans8.0.1308
. (Soit dit en passant, les fichiers N pour modifier le message doivent également être supprimés8.1.1258
)La réponse à votre question exacte :
est: non, ce n'est pas possible à cause de la partie suivante du code
ce qui signifie que si vous donnez
-
comme argument à vim, il affichera mécaniquement ce message.cependant, en guise de solution, si vous utilisez une redirection de fichier au lieu de l'
-
argument, vous vous débarrasserez du message:et voici un exemple de
MANPAGE
réglage qui fonctionne juste ™ (tiré des intertubes):la source
ALWAYS_USE_GUI
défini, savez-vous?echo "foo" | vim < /dev/tty
travail de contournement . Le faire donne[2]+ Stopped echo "foo" | vim < /dev/tty
.echo "foo" | gvim /dev/stdin
(bien que le vim non-GUI émettra toujours une plainte à ce sujet:)Vim: Warning: Input is not from a terminal
.<(col -b)
partie. C'est essentiellement une version sophistiquée de l'cat
impression des pages de manuel, et vous pouvez enfin vous débarrasser du message du vim avececho test | vim < /dev/tty <(cat>
Dans Vim, ce problème a été résolu dans
234d162
commit (> = v8.0.1387).Le message ne s'affiche donc que lorsque l'utilisateur n'a pas redirigé le stdin.
Un problème similaire a été résolu dans la version récente de Neovim ( > = v0.2.2-dev ) que vous pourriez utiliser à la place de Vim.
Une fois NVim v0.2.2 publié, vous devriez pouvoir exécuter:
sans avoir le message.
la source
Avec vim de la version 8.0.1387 et plus récente, vous pouvez utiliser l'
--not-a-term
option.Pour une version plus ancienne, utilisez l'astuce suivante:
$ echo foo | bash -c 'vim < /dev/tty <(cat)'
Le premier argument
/dev/tty
incite en quelque sorte Vim à penser que l'entrée vient du clavier. Je suppose que c'est parce que isatty (3) renvoie True pour ce fichier. Et le deuxième argument passe tout simplement de son entrée standard à l'entrée standard de Vim. Enfin, unbash -c
préfixe est requis pour que la construction spéciale<(...)
fonctionne si le shell ne la prend pas en charge. En bash, la solution originale peut être simplifiée pour$ echo foo | vim < /dev/tty <(cat)
la source