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 vimsedytor 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 eidzie do końca Hello, a potem azacznie dołączanie.
Coś bardziej fantazyjnego, w trybie exe, do komentowania linii zawierających my_bad_vari 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"'- Ijest to polecenie, aby rozpocząć wstawianie na początku wiersza, i //jest sekwencją komentarzy.
\<esc>kddnaciska 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-thisnie 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 -.