Kiedy używasz Vima do czytania ze standardowego wejścia, drukuje komunikat informacyjny:
$ echo foo | vim -
Vim: Reading from stdin...
$
To tylko przykład. Rzeczywiste użycie nie pozwala na konstrukcje powłoki. vim <(echo foo)
nie jest opcją.
Czy mogę ukryć to używając tylko opcji Vima i / lub ustawień vimrc?
Jeśli musisz wiedzieć, do czego to służy, próbuję użyć Vima do czytania stron podręcznika (bezwstydna wtyczka). GNU man nie zezwala na konstrukcje powłoki MANPAGER
, a dzięki użyciu ftplugin/man.vim
i innym rzeczom udało mi się wygodnie korzystać z samego MANPAGER="vim -"
. Ostatnią irytacją jest brzydka wiadomość drukowana po każdej wyświetlonej stronie.
export MANPAGER='vim -c "%! col -b" -c "set ft=man nomod nolist ignorecase" -'
lubexport MANPAGER="vim -"
widzę żadnego problemu?man ls
otwiera stronę podręcznika zgodnie z oczekiwaniami.echo foo | vim -Nu NONE -
: help less
podaje kilka informacji na temat używania go jako pagera.Odpowiedzi:
Począwszy od wersji Vim 8.0.1308 (listopad 2017 r.), Możesz użyć
--not-a-term
opcji, aby ukryć ten komunikat; na przykład zquit
:Lub z
exit
:źródło
cat
, ale nadal może być przydatne do zastosowania Vimscript do danych wejściowych, np.+'runtime! syntax/2html.vim'
Do eksportowania wyróżnionego tekstu jako stylu HTML (przy założeniu dedukcji lub określonego typu pliku). Istnieje kilka innych opcji niż te wspomniane do tej pory; pierwsze, co przychodzi na myśl, to użyciemktemp
do przechowywania danych wyjściowych polecenia i użycie ich jako danych wejściowych Vima. Możesz dodać polecenia przekierowania i powłoki Vima, aby „wkleić” wynik polecenia do bufora, ale wymaga to nieco więcej pracy. (Pliki skryptów Vima mogą automatyzować długie wywołania zamiast używać aliasów.)--not-a-term
w Vim 7.4.1689 w Ubuntu 16.04 (ale nie 7.4.8056 na Macu), ale to nie tłumi wiadomości.:help version8.txt
.--not-a-term
Sama opcja została dodana w7.4.1419
, a jego zachowanie zostało zmienione również tłumić wczytuje ze standardowego wejścia ... wiadomości w8.0.1308
. (Nawiasem mówiąc, N plików do edycji wiadomości jest również tłumione od8.1.1258
)Odpowiedź na dokładne pytanie:
jest: nie, nie jest to możliwe z powodu następującej części kodu
co oznacza, że jeśli podasz
-
vim jako argument, to mechanicznie wyświetli ten komunikat.jednak w ramach obejścia problemu, jeśli zamiast
-
argumentu użyjesz przekierowania pliku, pozbędziesz się wiadomości:a oto przykład
MANPAGE
ustawienia, które po prostu działa ™ (wzięte z intertubes):źródło
ALWAYS_USE_GUI
zdefiniowany, czy wiesz?echo "foo" | vim < /dev/tty
. Robienie tego daje[2]+ Stopped echo "foo" | vim < /dev/tty
.echo "foo" | gvim /dev/stdin
(chociaż vim bez GUI nadal będzie narzekał na to:)Vim: Warning: Input is not from a terminal
.<(col -b)
częściowo. To w istocie wyrafinowana wersjacat
do drukowania stron podręcznika i możesz w końcu pozbyć się wiadomości vima zecho test | vim < /dev/tty <(cat>
W Vimie ten problem został rozwiązany w
234d162
commit (> = v8.0.1387).Więc komunikat jest wyświetlany tylko wtedy, gdy użytkownik nie przekierował standardowego wejścia.
Podobny problem został rozwiązany w najnowszej wersji Neovim ( > = v0.2.2-dev ), której można użyć zamiast Vima.
Po wydaniu NVim v0.2.2 powinieneś być w stanie uruchomić:
bez wiadomości.
źródło
W wersji vim 8.0.1387 i nowszych możesz użyć
--not-a-term
opcji.W przypadku starszej wersji użyj następującej sztuczki:
$ echo foo | bash -c 'vim < /dev/tty <(cat)'
Pierwszy argument w
/dev/tty
jakiś sposób zmusza Vima do myślenia, że dane wejściowe pochodzą z klawiatury. Chyba dlatego, że isatty (3) zwraca True dla tego pliku. Drugi argument po prostu przekazuje wszystko, od standardowego wejścia do standardowego wejścia Vima. Wreszciebash -c
prefiks jest wymagany, aby specjalna konstrukcja<(...)
działała, jeśli powłoka jej nie obsługuje. W bash oryginalne rozwiązanie można uprościć$ echo foo | vim < /dev/tty <(cat)
źródło