#ubuntu #vim #multiple-instances #yank
#ubuntu #vim #несколько экземпляров #дернуть
Вопрос:
Мне нужно запустить кучу команд в скрипте bash, и я хочу повторить, какая команда выполняется в данный момент:
У меня есть этот файл (который составляет около 100 строк):
nohup command1 param1 param2
nohup command2 p1 p2
nohup cmd3 p1 p2 param3
Я бы хотел:
echo "Running command1" ; nohup command1 param1 param2
echo "Running command2" ; nohup command2 p1 p2
echo "Running cmd3" ; nohup cmd3 p1 p2 param3
Я пробовал yank, но он копирует по 1 строке за раз, есть ли способ скопировать все строки?
Ответ №1:
регулярное выражение — это то, что вам здесь нужно:
:%s/^(nohup) ([a-zA-Z0-9]*)/echo "Running 2"; 1 2/
Комментарии:
1. пожалуйста, перейдите в : вспомогательные разделы справки: [диапазон]s /{шаблон} /{строка} / шаблон: ^ — начало строки (nohup) — равно 1 [a-zA-Z0-9]* — все перечисленные символы 0 или более раз ([a-zA-Z0-9]*) — равно 2
Ответ №2:
Вы могли бы записать макрос.
Предполагая, что вы находитесь на первом символе вашего файла, вы должны ввести:
`qa` "Start recording a macro into a
`w` "move to first word following nohup
`yiw` "copy the word under cursor
`^` "move cursor back to beginning of line
`i` " enter insert mode
`echo "Runnning<ESC>pi";<ESC>` "paste the previously copied word
`j` " go down one line
`^` "move cursor back to beginning of line
`q` " stop recording the macro
`@a` " rexecute macro on second line
Если это работает должным образом, ввод 98@@
должен вызвать последний макрос 98 раз и отформатировать ваш файл.
Ответ №3:
Почему бы просто не использовать sh set -x?
Из bash(1):
-x After expanding each simple command, for command, case
command, select command, or arithmetic for command, dis-
play the expanded value of PS4, followed by the command
and its expanded arguments or associated word list.