
Я пытаюсь написать команду примерно следующего содержания:
vim -c "XXXXXX" myFile
Вместо «XXXXX» я хочу предоставить vim несколько команд для добавления текста в произвольную точку файла, как путем указания точного номера строки, так и, в другом сценарии, путем поиска определенной строки и последующей вставки в строку выше.
То, что я пытаюсь сделать, это своего рода умное "добавление", где я могу добавлять строки к блоку кода или функции внутри скрипта. В конечном счете я стремлюсь получить скрипт установки, который пойдет и изменит, может быть, дюжину системных файлов.
В идеале он должен включать только один флаг -c и в идеале его должен быть понятен любому, кто понимает команды обычного режима. Изначально я думал о чем-то вроде: « "ggjjjiInsertingOnLine4:wq"
Как только я смогу перевести его в обычный режим».
решение1
Диапазоны командной строки можно использовать для выбора определенной строки, которую необходимо отредактировать. Затем можно использовать шаблон замены для выполнения редактирования (добавления).
Например, чтобы добавить текст «привет» в начало строки 3:
vim -c "3 s/^/hi/" -c "wq" file.txt
Чтобы добавить текст «привет» в конец строки 3:
vim -c "3 s/$/hi/" -c "wq" file.txt
Чтобы найти больше вариантов и объяснений:
vim -c "help cmdline-range"
Еще несколько примеров
Чтобы найти строку поиска «привет» и добавить строку «все» в строку 3:
vim -c "3 s/\(hi\)/\1 everyone/" -c "wq" file.txt
Чтобы найти строку поиска «hi» и добавить строку «say» в начало строки 3:
vim -c "3 s/\(hi\)/say \1/" -c "wq" file.txt
Если номер строки неизвестен, то для добавления первых вхождений строки «hi» в каждой строке к «all»:
vim -c "1,$ s/\(hi\)/\1 all/" -c "wq" file.txt
Чтобы добавить все вхождения строки «hi» в каждой строке с помощью «all»:
vim -c "1,$ s/\(hi\)/\1 all/g" -c "wq" file.txt
Более подробную информацию о заменах можно найти здесь:
vim -c "help substitute"