Chcę uruchomić następującą powłokę.
wea-this is the end of the second word | vim j
exit 0
Miałem nadzieję, że w
przesunie naciśnięcia klawiszy (przesunie słowo do przodu), potem e
(koniec słowa), potem a
(dopisze), a następnie -this is the end of the second word
(tekst) do określonego dokumentu Vima, j
który już zawiera słowa.
Podczas uruchamiania skryptu powłoki wystąpił następujący błąd.
/root/bin/tt.sh: line 1: wea-this: command not found
Vim: Warning: Input is not from a terminal
Używam Ubuntu 14.04. Docenione zostaną dwa rodzaje odpowiedzi:
- Jak korzystać z orurowania, aby osiągnąć pożądany rezultat.
- Inna metoda, za pomocą której mogę użyć „poleceń Vima” (nie poleceń ed i sed) do edycji dokumentu tekstowego ze skryptu powłoki.
invocation
Jason Basanese
źródło
źródło
|
rury postać wyjście jednego polecenia do drugiego.wea-this
nie jest rozkazem. Rurociągów nie można również wykorzystać do osiągnięcia tego, co chcesz zrobić; spowoduje, że stimin Vima będzie aplikacją na lewą rękę, a nie na klawiaturze. Jeśli chcesz się stdin do bufora w vim, uruchom go z minusem do pliku:echo Hello, world! | vim -
.Odpowiedzi:
Aby wstawić ciąg
"hello"
w pierwszym wierszu plikuj
, możesz wpisać w powłoce następujące polecenie:vim +"1 | put! ='hello'" j
:1
przesuwa kursor do pierwszego wiersza bufora:put! ='hello'
wkleja ciąg „hello” powyżej bieżącej liniiAby wstawić ciąg,
"hello"
a następnie zapisać i zamknąć plik:vim +"1 | put! ='hello' | x" j
Tak samo jak poprzednio, właśnie dodaliśmy polecenie Ex,
:x
które zapisuje i wychodzi.Mówiąc bardziej ogólnie, możesz wykonać dowolną sekwencję poleceń Ex na pliku, z interaktywnej powłoki lub ze skryptu bash, jak poniżej:
vim +'Ex command1 | Ex command2 | ...' file
Jeśli masz wiele poleceń Ex, możesz zapisać je wszystkie w dedykowanym pliku (wywoływanym na przykład
myExCommands.vim
), po jednym poleceniu w wierszu, a następnie z powłoki lub skryptu, z którego możesz je uzyskać (za pomocą polecenia Ex:source
lub wersji skróconej):so
) lubię to:Edytować
Widzę, że zredagowałeś swoje pytanie.
Myślę, że poprzednia odpowiedź nadal obowiązuje, ponieważ można wykonać dowolne normalne polecenie z trybu Ex za pomocą poleceń Ex
:normal
i:execute
.Załóżmy na przykład, że chcesz:
1G
)_
)w
)e
)a
)hello
:x
)Aby to zrobić w pliku
j
, wpisz z powłoki:Aby uzyskać więcej informacji, zobacz:
źródło
:normal
i:execute
rób co chcesz?Oto sposób, w jaki możesz użyć poleceń trybu normalnego, a nie tylko poleceń ex, aby edytować strumień prezentowany Vimowi ze standardowego wejścia. To nie jest bardzo przydatny przykład, ale ilustruje zastosowane techniki. Zakłada, że twoja skorupa to bash.
Na
-
końcu mówi Vimowi, aby czytał tekst (nie polecenia) ze standardowego wejścia.-s
Mówi Vima wykonać klawiszy z określonego pliku. W tym przypadku plik jest wynikiem podstawienia procesu bash.<(...)
Zastępuje nazwy nazwanego potoku. Dane wyjściowe potoku są danymi wyjściowymi polecenia w nawiasach. Wwcwred\e
przesuwa kursor o jedno słowo i zmiany, które w przyszłym słowored
.:wq! foo\n
Zapisuje wynik do plikufoo
, nawet jeśli plik już istnieje. Wynik końcowy to plik o nazwiefoo
zawierającej tekstThe red fox jumped.
Aby uzyskać więcej informacji na temat niektórych z tych tematów, zobacz
Zobacz także
Process Substitution
sekcję stronybash(1)
man.źródło
vimx () { vi -s <(echo "$1"':wq') "$2" &> /dev/null; }
. Teraz mogęvimx 'iThe brow fox jumped.\e' foo; vimx 'wcwred\efjdwiclimbed\e' foo; cat foo
. Schludny!Odkryłem, że metoda pobierania danych wyjściowych programu jako przekierowanej z podpowłoki jest bardzo łatwa:
Przykład:
źródło
Miałem dokładnie takie samo pragnienie jak ty: chciałem napisać normalne polecenia vima i umożliwić im edycję strumienia potokowego. Byłem rozczarowany trudnością korzystania z normalnego vima w ten sposób (tak wielu flag!), Jak zapewniają domyślne opcje vim.
Dlatego napisałem małe opakowanie na vimie, aby to zrobić: https://github.com/MilesCranmer/vim-stream/ . To się nazywa
vims
.Sercem opakowania jest następujące polecenie:
Używając tego, przy generowaniu poleceń, które wykonuję, okazuje się, że jest dość zwięzły, a ponieważ vim jest edytorem modalnym, stworzyłem
vims
edytor modalnych strumieni. Istnieją trzy główne tryby przydatne w mentalności edycji potokowej:Patrz na to:
Więc
e
idzie do końcaHello
, a potema
zacznie dołączanie.Coś bardziej fantazyjnego, w trybie exe, do komentowania linii zawierających
my_bad_var
i usuwających poprzednią linię.Co przekłada się na
vims '%g/my_bad_var/exe "norm I//\<esc>kdd"'
-I
jest to polecenie, aby rozpocząć wstawianie na początku wiersza, i//
jest sekwencją komentarzy.\<esc>kdd
naciska klawisz Escape, przesuwa się w górę linii, a następnie usuwa linię.Mam 11 przykładów na repo, zachęcam do ich sprawdzenia. Znowu działa to na vimie, to tylko sposób, aby vim bardziej przypominał sed do wprowadzania strumieniowego (ale zachowując wszystkie twoje ukochane makra vim!)
źródło
To dość stare pytanie, ale czułem, że warto było wnieść wkład, że jeśli dana dystrybucja / system operacyjny ma dostęp
moreutils
, możesz go zainstalować i po prostu użyćvipe
jako standardowego dodatku dovim
:moreutils
jest także bardzo przydatny w przypadku innych narzędzi i bardzo polecam je, jeśli jesteś poważnym użytkownikiem wiersza poleceń! :) Spójrz na wstęp autora (poprzedni link), aby uzyskać więcej informacji.moreutils
powinny być ogólnie dostępne dla większości * podobnych do nix dystrybucji za pośrednictwem menedżera pakietów i Homebrew na Macu . Na przykład...moreutils
jest również częścią repozytorium pakietów MSYS2 , więc możesz technicznie używać go również w systemie Windows. :)źródło