Wenn Vim zum Lesen von stdin verwendet wird, wird eine informative Nachricht ausgegeben:
$ echo foo | vim -
Vim: Reading from stdin...
$
Dies ist nur ein Beispiel. Die tatsächliche Verwendung erlaubt keine Shell-Konstrukte. vim <(echo foo)
ist keine Option.
Kann ich das unterdrücken, indem ich nur Vim-Optionen und / oder Vimrc-Einstellungen verwende?
Für den Fall, dass Sie wissen müssen, wofür dies ist, versuche ich, Vim zum Lesen von Manpages (schamloser Plug) zu verwenden. GNU Man lässt keine Shell-Konstrukte zu MANPAGER
, und durch die Verwendung ftplugin/man.vim
und anderer Dinge habe ich es erfolgreich geschafft, eine komfortable Erfahrung mit nur zu haben MANPAGER="vim -"
. Der letzte verbleibende Ärger ist die unansehnliche Nachricht, die nach jeder von mir betrachteten Manpage gedruckt wird.
export MANPAGER='vim -c "%! col -b" -c "set ft=man nomod nolist ignorecase" -'
oderexport MANPAGER="vim -"
sehe ich kein Problem?man ls
Öffnet die Manpage wie erwartet.echo foo | vim -Nu NONE -
: help less
einige Informationen zur Verwendung als Pager.Antworten:
Ab Vim 8.0.1308 (Nov 2017) können Sie
--not-a-term
diese Meldung mit der Option unterdrücken. zum Beispiel mitquit
:Oder mit
exit
:quelle
cat
kann aber dennoch nützlich sein, um Vimscript auf die Eingabe anzuwenden, z. B.+'runtime! syntax/2html.vim'
um hervorgehobenen Text als formatiertes HTML zu exportieren (vorausgesetzt, es handelt sich um einen abgeleiteten oder angegebenen Dateityp). Es gibt einige andere als die bisher genannten Optionen. Das erste, was mir in den Sinn kommt, ist,mktemp
die Ausgabe des Befehls zu speichern und diese als Eingabe von Vim zu verwenden. Sie können die Umleitungs- und Shell-Befehle von Vim hinzufügen, um das Befehlsergebnis in den Puffer einzufügen. Dies erfordert jedoch etwas mehr Arbeit. (Vim-Skriptdateien können längere Aufrufe automatisieren, anstatt Aliase zu verwenden.)--not-a-term
in Vim 7.4.1689 in Ubuntu 16.04 (aber nicht 7.4.8056 auf einem Mac), aber es unterdrückt die Nachricht nicht.:help version8.txt
.--not-a-term
Die Option selbst wurde hinzugefügt7.4.1419
und ihr Verhalten wurde geändert, um auch das Einlesen der Nachricht von stdin ... in zu unterdrücken8.0.1308
. (By the way, die N - Dateien zu bearbeiten Nachricht wird auch von unterdrückt werden8.1.1258
)Die Antwort auf Ihre genaue Frage:
ist: nein, es ist wegen des folgenden Teils des Codes nicht möglich
Dies bedeutet, dass, wenn Sie
-
vim als Argument angeben, diese Meldung automatisch angezeigt wird.Wenn Sie jedoch eine Dateiumleitung anstelle des
-
Arguments verwenden, wird die folgende Meldung entfernt:und hier ist ein Beispiel für eine
MANPAGE
Einstellung, die gerade funktioniert ™ (aus den Zwischenrohren):quelle
ALWAYS_USE_GUI
definiert, wissen Sie?echo "foo" | vim < /dev/tty
Arbeit nicht bekommen . Es zu tun gibt[2]+ Stopped echo "foo" | vim < /dev/tty
.echo "foo" | gvim /dev/stdin
(obwohl das Nicht-GUI-Vim immer noch eine Beschwerde darüber ausstellen wird:)Vim: Warning: Input is not from a terminal
.<(col -b)
Teil. Das ist im Wesentlichen eine raffinierte Versioncat
für das Drucken von Manpages, und Sie können die Nachricht des Vims mitecho test | vim < /dev/tty <(cat>
In Vim wurde dieses Problem in
234d162
commit (> = v8.0.1387) behoben.Daher wird die Nachricht nur angezeigt, wenn der Benutzer die Standardeingabe nicht umgeleitet hat.
Ähnliches Problem wurde angesprochen in der jüngsten Version von Neovim ( > = v0.2.2-dev ) , die Sie anstelle von Vim benutzen konnten.
Nach der Veröffentlichung von NVim v0.2.2 sollten Sie in der Lage sein, Folgendes auszuführen:
ohne die Nachricht zu haben.
quelle
Ab Version 8.0.1387 können Sie die
--not-a-term
Option verwenden.Verwenden Sie für ältere Versionen den folgenden Trick:
$ echo foo | bash -c 'vim < /dev/tty <(cat)'
Das erste Argument
/dev/tty
täuscht Vim irgendwie vor, dass die Eingabe von der Tastatur kommt. Ich denke, das liegt daran, dass isatty (3) für diese Datei True zurückgibt. Und das zweite Argument durchläuft einfach alles von der Standardeingabe bis zur Standardeingabe von Vim. Schließlich ist einbash -c
Präfix erforderlich, damit das spezielle Konstrukt<(...)
funktioniert, wenn die Shell es nicht unterstützt. In Bash kann die ursprüngliche Lösung vereinfacht werden$ echo foo | vim < /dev/tty <(cat)
quelle