Przesyłaj dane wyjściowe polecenia powłoki (!) Do nowego bufora w Vimie
35
Jak mogę potokować wyjście polecenia powłoki do nowego bufora w Vimie? Następujące rzeczy oczywiście nie działają, ale możesz zobaczyć, o co mi chodzi:
Nie można potokować danych wyjściowych polecenia powłoki do polecenia, które tworzy nowy bufor, ale można utworzyć nowy bufor i odczytać dane wyjściowe polecenia powłoki do tego bufora za pomocą jednego wpisu w wierszu poleceń Vima. Działająca wersja twojego przykładu to
:tabnew | r !echo <c-r>=bufname("#")<cr>
Zauważ, że symbol potoku w tym przypadku jest separatorem między poleceniami ex Vima, a nie potokiem powłoki. Zobacz też
To prawie dokładnie to, czego potrzebuję, na odwrót, aby uzyskać dostęp do nazwy pliku bieżącego bufora. Uwaga: zaktualizowałem pytanie, aby, mam nadzieję, wyjaśnić pożądany wynik końcowy.
Richie Marquez,
@Richard Marquez: zaktualizowałem tę odpowiedź. nowa karta jest teraz otwierana ze „starą” nazwą pliku, więc możesz wywołać
:!
Ale nie :r!echobez zmiany bufora.
Luc Hermitte,
2
@garyjohn, akira: dzięki za pomoc. Część „<cr> = ...” popełniła błędy wyrzucania Vima, ale udało mi się go uruchomić z „: tabnew | r! Echo #”.
Richie Marquez,
1
Warto również zauważyć, że jeśli chcesz zamapować to na klucz w .vimrc, musisz zastąpić | znak za pomocą <bar>.
Richie Marquez
16
Oto co robię. Nawiązuje to do komentarzy w powyższych odpowiedziach.
:new | r ! <cmd>
:new | r ! <cmd> # (# is replaced with filename)
Przykład 1 : Znajdź wszystkie pliki tekstowe w/tmp
:new | r ! find /tmp -name '*.txt'
Przykład 2 : Edytujesz plik foo.txt i chcesz uruchomić ls -la foo.txti pobrać dane wyjściowe do bufora:
:new | r ! ls -la #
Jest #on zastępowany nazwą pliku oryginalnego bufora, który edytujesz. Jest to szczególnie przydatne w przypadku poleceń kontroli źródła ad hoc, np
:new | r ! hg annotate -un #
:newtworzy podział poziomy, użyj, :vnewjeśli chcesz zamiast tego podział pionowy i :tabnewdla nowej karty.
Odpowiedzi:
Nie można potokować danych wyjściowych polecenia powłoki do polecenia, które tworzy nowy bufor, ale można utworzyć nowy bufor i odczytać dane wyjściowe polecenia powłoki do tego bufora za pomocą jednego wpisu w wierszu poleceń Vima. Działająca wersja twojego przykładu to
Zauważ, że symbol potoku w tym przypadku jest separatorem między poleceniami ex Vima, a nie potokiem powłoki. Zobacz też
źródło
:r!echo
bez zmiany bufora.Oto co robię. Nawiązuje to do komentarzy w powyższych odpowiedziach.
Przykład 1 : Znajdź wszystkie pliki tekstowe w
/tmp
Przykład 2 : Edytujesz plik foo.txt i chcesz uruchomić
ls -la foo.txt
i pobrać dane wyjściowe do bufora:Jest
#
on zastępowany nazwą pliku oryginalnego bufora, który edytujesz. Jest to szczególnie przydatne w przypadku poleceń kontroli źródła ad hoc, np:new
tworzy podział poziomy, użyj,:vnew
jeśli chcesz zamiast tego podział pionowy i:tabnew
dla nowej karty.źródło
%
następnym buforem oprócz E499.pracuje dla mnie.
źródło
Jeśli naprawdę potrzebujesz zapisać wynik w nowym buforze, ale potrzebujesz informacji ze starego bieżącego bufora, możesz użyć
system()
:lub zapisz bieżącą nazwę bufora na później :
źródło