Скопируйте несколько строк и текст до пробела в VIM

#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.