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:
vim - -nes "${vim_cmds[@]}" -c ':q!' | tail -n +2
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:
[-t|--turn-off-mode] - (Default mode)
Every string is a vim command line, e.g., '%g/foo/d' deletes
all lines with foo.
[-e|--exe-mode] - Translated to '%g/$1/exe "norm $2"', see examples below
[-s|--simple-mode] - Like exe-mode, but runs on 1st line only
Patrz na to:
$ echo "Hello World" | vims -s "ea Beautiful"
Hello Beautiful World
Więc e
idzie do końca Hello
, a potem a
zacznie dołączanie.
Coś bardziej fantazyjnego, w trybie exe, do komentowania linii zawierających my_bad_var
i usuwających poprzednią linię.
cat my_script.cpp | vims -e 'my_bad_var' 'I//\<esc>kdd'
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!)
|
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 -
.