Wstaw wyjście polecenia systemowego w bieżącej lokalizacji w vimie


33

In vim, kiedy używam

:r !ls somefilename

wstawia wyjście tego polecenia w nowym wierszu poniżej bieżącego wiersza.

Jeśli zrobię

let @a = system("ls")

i później

"ap

nadal wstawia wyjście w nowym wierszu poniżej bieżącego wiersza.

Czy istnieje sposób, aby vim wstawiał wyjście w bieżącej lokalizacji?


Zapoznaj się z tą przydatną odpowiedzią Wykonaj bieżącą linię w bash z vima
Rohan Ghige

Odpowiedzi:


14

Możesz wkleić zawartość bufora schowka między znakami za pomocą Ctrl-R * w trybie wstawiania (i podobne podejście w przypadku innych buforów). Więc jeśli możesz dostać polecenie systemowe do bufora, powinieneś być ustawiony. (Źródło: https://stackoverflow.com/questions/1491135/paste-multi-line-string-into-gvim-at-cursor-position ).

:let @a=system("ls -l")umieści wyjście z ls -lrejestru a. Następnie możesz go wkleić (w trybie wstawiania) za pomocą ^R-a.


Ponadto na większości platform schowek jest zsynchronizowany z rejestrem (zwykle *), więc jeśli potokujesz wyjście polecenia do schowka, będzie ono "*do użycia.
Bruno Bronosky

39
:r !command 

odczyta dane wyjściowe z polecenia i wstawi je do wiersza pod bieżącym wierszem. W ten sposób programuje się vi, nie można zmienić zachowania.

Ale powiedzieć, że jeśli jesteś w linii numer 3. Jeśli spróbujesz :r !date. Wstawi wartość daty do wiersza 4.

Jeśli chcesz, aby wartość daty pojawiła się w wierszu nr 3, spróbuj :2r !datewstawić wartość daty w wierszu nr 3.


4
To wstawia inną linię, ale nadal własną linię. Chcę wstawić go w bieżącej lokalizacji!
deshmukh

13

Oto alternatywny sposób wklejania danych wyjściowych z zewnętrznego polecenia przed kursorem:

:exe 'norm i' . system("ls -l")

lub użyj wyrażenia register ( :help @=):

"=system('ls -la')

następnie uderzył P. Lub krócej poprzez:

<CTRL-R>=system('ls -la')<CR>

4
Oto odpowiedź.
Jacob

1
Zgoda! To naprawdę powinna być poprawna odpowiedź, ponieważ zawiera bardziej programowe rozwiązanie (z :exe), które może być zawarte w poleceniach.
metasoarous
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.