Odpowiedzi:
Tak, np. Jeśli chcesz to zrobić ls
, spróbuj:
:!ls
Aby spawnować powłokę, użyj
:shell
:w !sudo tee %
nano
Zwykle używam ctrl+z
do spania vi, uruchamiam to, czego potrzebuję w powłoce, a następnie fg
wznawiam vi. Nie do końca odpowiedź na twoje pytanie, ale uważam, że jest to bardzo szybki sposób na pracę.
Jeśli zapomnisz, że masz otwarte vi w tle (może się to zdarzyć, gdy jesteś zajęty), kiedy spróbujesz wylogować się z powłoki ctrl+d
, zostaniesz ostrzeżony, że masz uruchomione zadania w tle i możesz je zamknąć, lub naciśnij ctrl + d ponownie, aby się wylogować. Ponadto, jeśli spróbujesz ponownie otworzyć ten sam plik dwukrotnie, pojawi się ostrzeżenie o odzyskiwaniu, więc możesz nacisnąć, a
aby przerwać, i uruchomić klawisz fg, aby wrócić do vi.
Ponieważ wspomniałeś o „get stdout”, pamiętaj, że możesz to zrobić
:r! command
a wynik polecenia zostanie dodany do pliku, lub
:<range>!command
aby filtrować zawartość zakresu za pomocą polecenia [np. :1,$!wc
]
:%!command
wygląda całkiem przydatnie
:.,+20 !sort
]
Mój preferowany idiom to
!!command
co jest skrótem od
:.!command
który poprowadzi bieżącą linię przez polecenie i wstawi dane wyjściowe do pliku. Najczęstszym przypadkiem jest dla mnie edycja polecenia za pomocą vi i uruchomienie:
!!sh
Lub
!<motion>command
takie jak (na przykład)
!apsh
aby uruchomić cały bieżący akapit przez powłokę.
!}
musisz znaleźć się na początku akapitu, spróbuj !ap
. (Nie wiem, czy to jest w każdym vi czy tylko vimie)
Używając dwukropka i wykrzyknika, możesz uruchomić dowolne polecenie na ścieżce powłoki i skryptach powłoki, pamiętaj, że polecenie działa pod użytkownikiem uruchamiającym program vi / vim i korzystającym z jego środowiska.
:!<command>
Ponieważ vi korzysta ze środowiska, które obowiązywało podczas jego uruchamiania, używa tej samej ścieżki, która była w poleceniu nadrzędnym. Pamiętaj, że niektóre powłoki przechowują pamięć podręczną programów na ścieżce, a vi może nie działać z tą pamięcią podręczną (w zależności od powłoki, której używa i jej wersji), więc możesz skończyć z uruchomieniem niewłaściwego pliku binarnego, jeśli masz więcej niż jeden plik binarny o tej samej nazwie.
Możesz wyświetlić dane wyjściowe polecenia, wpisując na przykład :!ls -lh
w trybie polecenia.
Jeśli chcesz wstawić wynik polecenia do edytowanego pliku, po prostu dodaj r
. Na przykład :r!which perl
.
Mam to w moim .vimrc. Znalezione w przepełnieniu stosu jakiś czas temu:
" Executes the current line in a bash shell; syntactically similar to slimv's ,d feature
:nmap ,,d Y:!<C-R>"<C-H><CR>
Poradziłbym sobie z tym łatwo w Linuksie, otwierając dwa okna wiersza poleceń terminalu, uruchamiając vi w jednym i drugim dostępnym do innej pracy w tym samym czasie.