У мене було таке саме бажання, як і у вас: я хотів написати звичайні команди vim і редагувати потік конвеєра. Мене розчарувало труднощі використання звичайного vim таким чином (так багато прапорів!), Як це передбачено параметрами vim за замовчуванням.
Тому я написав невелику обгортку на vim, щоб це зробити: https://github.com/MilesCranmer/vim-stream/ . Це називається vims
.
Серце обгортки - така команда:
vim - -nes "${vim_cmds[@]}" -c ':q!' | tail -n +2
Використовуючи це, з генерацією команд, яку я роблю, це виявляється досить стислим, і тому що vim - модальний редактор, я зробив vims
редактор модальних потоків. Є три основні режими, які корисні для менталітету редагування конвеєра:
[-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
Дивитися це:
$ echo "Hello World" | vims -s "ea Beautiful"
Hello Beautiful World
Отже, e
йде до кінця Hello
, потім a
починає додавати.
Щось фантазії в exe-режимі прокоментувати рядки, що містять my_bad_var
і видалити попередній рядок.
cat my_script.cpp | vims -e 'my_bad_var' 'I//\<esc>kdd'
Що означає vims '%g/my_bad_var/exe "norm I//\<esc>kdd"'
- I
команда, яку слід починати вставляти на початку рядка, і //
бути послідовністю коментарів.
\<esc>kdd
натискає клавішу втечі, рухається вгору по лінії, а потім видаляє лінію.
У мене є 11 загальних прикладів на репо, радимо перевірити їх. Знову ж таки, це працює поверх vim, це просто спосіб зробити vim більше схожим на sed для введення потоку (але зберігши всі ваші улюблені макроси vim!)
|
характер труби виведення однієї команди до іншої.wea-this
не є командою. Трубопроводи не можна використовувати для досягнення того, що ви хочете зробити; це призведе до того, що Vdin's stdin буде лівою програмою, а не клавіатурою. Якщо ви хочете , щоб отримати стандартний ввід в буфер в Vim, запустіть його з мінусом для імені файлу:echo Hello, world! | vim -
.