Chciałbym napisać cały bufor do standardowego wyjścia ( /dev/stdout
) zamiast do pliku, a następujące polecenie działa zgodnie z oczekiwaniami podczas edycji pliku:
:w >> /dev/stdout
Wskazówka: Naciśnij Control+, Laby odświeżyć ekran.
Ale to nie działa zgodnie z oczekiwaniami, gdy próbuję zrobić to samo z wiersza poleceń ( nieinteraktywnie ), na przykład:
$ echo This is example. | vim - '+:w >> /dev/stdout' '+:q!'
Vim: Reading from stdin...
Tak samo jest z :w !tee
, :x! /dev/stdout
, :%print
i podobne.
Przed zamknięciem, to mówiąc: [Device] 1L, 17C appended
.
Czy jest jakiś sposób na zmuszenie vima do zapisania standardowego wejścia na standardowe wyjście w środku potoku? Może jest jakoś zbuforowany?
command-line
invocation
unix
ex-mode
kenorb
źródło
źródło
vim
do analizowania plików zamiastsed
(np. Masowe powtarzające się złożone zmiany w wielu dużych plikach). Ten przykład nie robi nic, aby uprościć sprawę i nie tworzyć potencjalnej kopii innego postu .Odpowiedzi:
Aby wydrukować bufor do standardowego wyjścia powłoki,
vim
należy uruchomić w trybie Ex, w przeciwnym razie otworzy się „normalny” sposób z własnym oknem i wyczyści wszystkie bufory wyjściowe przy wyjściu.Oto najprostszy działający przykład:
lub nawet krócej:
Uwaga: Polecenie
vim -e
jest zasadniczo równoważneex
poleceniu.Należy określić specjalny deskryptor pliku do standardowego wejścia (
/dev/stdin
), aby uniknąć dodatkowych irytujących komunikatów (jak wyjaśniono poniżej).A oto kilka przykładów z parsowaniem ciągów:
Uwaga: Ostatni przykład pokazuje dodatkową irytującą wiadomość, której nie można ukryć, ponieważ jest to standardowa strategia wczytywania całego pliku do pamięci i mówienia, że został odczytany ze standardowego wejścia. Pierwszy przykład działa bez komunikatu, ponieważ plik generuje niekończące się dane bez sygnału końca pliku ( EOF ), więc nigdy nie osiągnie końca odczytu wejściowego.
Związane z:
źródło
+q!
, a nie+:q!
, prawda?vipe
jest wygodnym narzędziem do edycji potoków, stanowiącym częśćmoreutils
pakietu. Jest to opakowanie dla redaktorów (w tymvi
nadające mu nazwę). Wykorzystuje onaEDITOR
zmienną środowiskową ustawić edytor, tak, jak w przypadku innych narzędzi, które wykorzystująEDITOR
(takich jakcrontab
,visudo
etc.), można działania skrypt za pomocą tej zmiennej. Na przykład możesz to zmienić, aby:Oczywiście skomplikowane działania mogą prowadzić do cytowania piekła, więc możesz napisać skrypt:
I użyj
EDITOR="sh /path/to/script"
.źródło