Seninle tamamen aynı arzum vardı: Normal vim komutları yazmak ve bunların bir boru hattı akışını düzenlemesini istedim. Varsayılan vim seçenekleri tarafından sağlanan normal vim (bu kadar çok bayrak!) Bu şekilde kullanmanın zorluğu beni hayal kırıklığına uğrattı.
Bu nedenle, vim üzerinde bunu yapmak için küçük bir paket yazdım: https://github.com/MilesCranmer/vim-stream/ . Denir vims
.
Sargının kalbi aşağıdaki komuttur:
vim - -nes "${vim_cmds[@]}" -c ':q!' | tail -n +2
Bunu kullanarak, yaptığım komut üretimi ile oldukça özlü olur ve vim kalıcı bir editör olduğu için kalıcı vims
bir akış editörü yaptım . Boru hattı düzenleme zihniyeti için yararlı olan üç ana mod vardır:
[-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
Şunu izle:
$ echo "Hello World" | vims -s "ea Beautiful"
Hello Beautiful World
Böylece, e
sonuna kadar gider Hello
, sonra a
eklemeye başlar.
Exe-modunda, my_bad_var
önceki satırı içeren satırları yorumlamak ve silmek için bir şey meraklısı .
cat my_script.cpp | vims -e 'my_bad_var' 'I//\<esc>kdd'
Bu da demektir vims '%g/my_bad_var/exe "norm I//\<esc>kdd"'
- I
satırın başlangıcında ekleme başlatma komutu //
olmak ve yorum sırası olmak.
\<esc>kdd
çıkış tuşuna basar, bir satırı yukarı taşır, ardından satırı siler.
Repo hakkında toplam 11 örneğim var, onları kontrol etmenizi öneririz. Yine, bu vim üstünde çalışıyor, bu sadece vim akış girişi için sed gibi yapmak için bir yoldur (ancak tüm sevgili vim makrolarınızı koruyarak!)
|
Karakter boruları başka bir komutun çıktısı.wea-this
bir komut değildir. Borulama yapmak istediğiniz şeyi elde etmek için kullanılamaz; Vim'in stdin'inin klavye değil sol el uygulaması olmasına neden olur. Eğer vim bir tampon içine stdin'i almak istiyorsanız, dosya adı için bir eksi başlatın:echo Hello, world! | vim -
.