Czy można wpisać polecenie bash w vi i uzyskać standardowe wyjście?
Uważam, że często nużące jest zamykanie i ponowne otwieranie vi tylko dlatego, że chcę poszukać czegoś w skorupce.
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ępniefg
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.źródło
Ponieważ wspomniałeś o „get stdout”, pamiętaj, że możesz to zrobić
a wynik polecenia zostanie dodany do pliku, lub
aby filtrować zawartość zakresu za pomocą polecenia [np.
:1,$!wc
]źródło
:%!command
wygląda całkiem przydatnie:.,+20 !sort
]Mój preferowany idiom to
co jest skrótem od
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:
Lub
takie jak (na przykład)
aby uruchomić cały bieżący akapit przez powłokę.
źródło
!}
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.
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.
źródło
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
.źródło
Używanie
!
jest oczywiście poprawną odpowiedzią, ale jeśli często się zmieniasz, coś takiego jak screen lub tmux może być pomocne.źródło
Mam to w moim .vimrc. Znalezione w przepełnieniu stosu jakiś czas temu:
źródło
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.
źródło