Saya memiliki keinginan yang sama persis seperti Anda: Saya ingin menulis perintah vim normal dan meminta mereka mengedit aliran pipa. Saya kecewa dengan kesulitan menggunakan vim normal dengan cara ini (begitu banyak flag!), Seperti yang disediakan oleh opsi vim default.
Oleh karena itu, saya menulis pembungkus kecil di vim untuk melakukannya: https://github.com/MilesCranmer/vim-stream/ . Itu disebut vims
.
Inti bungkusnya adalah perintah berikut:
vim - -nes "${vim_cmds[@]}" -c ':q!' | tail -n +2
Dengan menggunakan ini, dengan generasi perintah yang saya lakukan, hasilnya cukup ringkas, dan karena vim adalah editor modal, saya membuat vims
editor aliran modal. Ada tiga mode utama yang berguna untuk mentalitas penyuntingan pipa:
[-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
Menonton ini:
$ echo "Hello World" | vims -s "ea Beautiful"
Hello Beautiful World
Jadi, e
lanjutkan ke akhir Hello
, lalu a
mulai menambahkan.
Sesuatu yang lebih menarik, dalam mode exe, untuk mengomentari baris yang berisi my_bad_var
, dan menghapus baris sebelumnya.
cat my_script.cpp | vims -e 'my_bad_var' 'I//\<esc>kdd'
Yang diterjemahkan menjadi vims '%g/my_bad_var/exe "norm I//\<esc>kdd"'
- I
perintah untuk mulai memasukkan di awal baris, dan //
menjadi urutan komentar.
\<esc>kdd
menekan tombol escape, bergerak ke atas garis, lalu menghapus garis.
Saya punya 11 contoh total pada repo itu, saya mendorong Anda untuk memeriksanya. Sekali lagi, ini berjalan di atas vim, itu hanya cara untuk membuat vim lebih seperti sed untuk input stream (tetapi menjaga semua makro vim kesayangan Anda!)
|
pipa karakter output dari satu perintah yang lain.wea-this
bukan perintah. Perpipaan tidak dapat digunakan untuk mencapai apa yang Anda inginkan; itu akan menyebabkan stdin Vim menjadi aplikasi sebelah kiri, bukan keyboard. Jika Anda ingin mendapatkan stdin ke dalam buffer di vim, mulai dengan minus untuk nama file:echo Hello, world! | vim -
.