Jak przekierować dane wyjściowe polecenia do vima w bash?


87

Próbuję przekierować dane wyjściowe polecenia bash do nowego pliku.

Jeśli spróbuję potoku, jak poniżej:

ls -la | vim

Bash pokazuje mi błędy:

Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.

Wiem, że mogę otworzyć Vima, a następnie użyć:

:r !ls -la

Ale czy istnieje sposób, aby to zrobić w samym bashu, aby Vim został otwarty, a dane wyjściowe wklejone tam automatycznie?

Odpowiedzi:




19

Oto inne podejście, mam nadzieję, że nauczy kogoś czegoś nowego.

Jeśli wiesz, że polecenie :r !ls -ladziała w vimie, możesz wykonać następujące czynności, aby otworzyć vim i sprawić, aby uruchomił polecenie, gdy tylko się otworzy, prosto z bash:

vim -c ':r! ls -la'

Jest to odpowiednik otwarcia, vima następnie wykonania polecenia :r! ls -la. Powinno to działać z każdym vimpoleceniem, w którym polecenie występuje po -copcji.


12

Możesz powiedzieć vimowi, aby otworzył standardowe wejście:

ls -la | vim -

1

Jeśli Twoim celem jest po prostu umieszczenie danych wyjściowych w pliku tekstowym, nie musisz wywoływać vima. Bash może to zrobić sam

ls -la > outputfile.txt

1

setlocal buftype=nofile

Jest to dobra opcja, jeśli zamierzasz utworzyć alias, aby zastąpić less:

seq 100 | vim +':setlocal buftype=nofile' -

Teraz nie musisz pisać! do wyjścia.

Inną opcją jest:

seq 100 | vim +'nnoremap q :quit!' -

więc możesz wyjść za pomocą just q<enter>.


Dobry pomysł. Zdecydowanie krótszy niż pisanie tak długo! :)
kode
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.