У меня было то же самое желание, что и у вас: я хотел написать обычные команды 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
нажимает клавишу escape, перемещается вверх по строке, затем удаляет строку.
У меня есть всего 11 примеров по репо, я призываю вас проверить их. Опять же, это работает поверх vim, это просто способ сделать vim более похожим на sed для потокового ввода (но сохранив все ваши любимые макросы vim!)
|
характер трубы вывода одной команды к другой.wea-this
это не команда. Трубопровод не может быть использован для достижения того, что вы хотите сделать; это приведет к тому, что стандартный ввод Vim будет левой рукой, а не клавиатурой. Если вы хотите , чтобы получить стандартный ввод в буфер в Vim, запустите его с минусом для имени файла:echo Hello, world! | vim -
.