2013-07-18 15 views
8

Chcę użyć Vima, aby zobaczyć wynik history (nie w powłoce). Myślę history | vim zadziała (użyj wynik history jako wejście vim), ale zwraca się z:Dlaczego funkcja "history | vim" nie działa?

$history | vim 
Vim: Warning: Input is not from a terminal 
Vim: Error reading input, exiting... 

Vim: Finished. 

Czy ktoś to wyjaśnić?

+1

Jeśli chcesz używać vim jako pager [vimpager] (https://github.com/rkitover/vimpager) wydaje się działać całkiem nieźle. – FDinoff

Odpowiedz

23

Po podłączeniu do vim zmieniasz standardowy strumień wejściowy. Ponieważ vim jest programem interaktywnym, wymaga standardowego wejścia jako konsoli.

Jeśli chcesz zobaczyć w vim, należy poinformować go czytasz plik ze standardowego wejścia (dostarczając argumentu -):

history | vim - 

Alternatywnie, można po prostu użyć więcej lub mniej:

history | more 
history | less 

Te dwa ostatnie są preferowane. Jeśli podłączysz się do vim, zobaczysz swój "plik" jako modyfikację, więc nie możesz wyjść z prostej komendy :q. Zamiast tego musisz wymusić zamknięcie przez :q!, co jest nieco niezgrabne.

Z drugiej strony, można wyjść więcej lub mniej prostu wpisując q. Spójrz na stronę podręcznika dla tych dwóch programów. Użyjesz ich dużo.


Zgodnie z zaleceniami Russell Silva w komentarzach, można otworzyć vim w trybie tylko do odczytu podczas odczytu ze standardowego wejścia. Wystarczy podać argument -R. Następnie można wyjść normalnie, bez konieczności override:

history | vim -R - 
+0

Próbowałem 'vim | historia' również ... Wydaje się, że stało się coś strasznego ..W rezultacie powłoka nie jest odpowiedzialna .. Nie mogę wprowadzić żadnych instrukcji. Czy mógłbyś mi to wyjaśnić? – Sayakiss

+3

Och kochanie. To, co zrobiłeś, to powiązanie wyjścia 'vim' z danymi wejściowymi' history'. To nie jest dobry pomysł. Pamiętaj, że 'vim' nadal działa, ponieważ jest to program interaktywny. Nadal możesz wysyłać polecenia, ponieważ wciąż czyta ze standardowego wejścia, ale nie możesz go zobaczyć, ponieważ wyprowadzasz jego wyjście do innego programu. Jeśli wpiszesz ': q!' I naciśniesz enter, powinieneś wrócić do powłoki. Może być konieczne kilkukrotne naciśnięcie klawisza 'Esc', jeśli przejdziesz do innego trybu edycji. – paddy

+0

Wow ... kiedy wpisuję ': q!' I wciskam enter, wracam do powłoki ... Działa. Naprawdę dziękuję ~ – Sayakiss

1

oprócz vim -, można spróbować bash polecenia zmiany jak:

vim <(history) 

Zobacz także:

+1

+1. Podoba mi się to rozwiązanie (również pomyślnie przetestowane na Ubuntu, ponieważ "vi" to w rzeczywistości dowiązanie symboliczne do '/ usr/bin/vim.tiny'). Ucieka mnie, dlaczego masz do tego pretekst. Ludzie czasami mogą być okrutni. :) – syntaxerror

-1

To wydarzyło mi próbuje wysłać go do konsoli tła (&)

jeden skrypt używany:

... 
vi "$file" & 
... 
# change to just: 

vi "$file" 

usuwania & problemów odszedł.

+1

Nie ma to związku z pytaniem ... –

Powiązane problemy