Как повторить редактирование нескольких строк в Vim?

Я знаю, что в Vim я часто повторяю команду, просто добавляя число перед ним. Например, можно удалить 5 строк:

5dd

Также часто можно указать диапазон строк для применения команды, например

:10,20s:hello:goodbye:gc

Как я могу выполнить "вертикальное редактирование"? Например, я хотел бы вставить конкретный символ, например запятую, в начале (пропуская пробелы, то есть то, что вы получите, если вы введете запятую после Shift-I в командном режиме) каждой строки в заданном ассортимент. Как это можно достичь (не прибегая к периоду вниз-вниз-вниз-вниз-вниз-периоду)?

Ответ 1

:10,20s/^/,/

Или используйте макрос, запись с помощью:

q a i , ESC j h q

использовать с:

@ a

Объяснение: q a начинает запись макроса для регистрации a, q завершает запись. Для этого доступны регистры a до z.

Ответ 2

Ctrl - v переходит в визуальный режим по блоку. Затем вы можете перемещать (h j k l -wise, как обычно), и если вы хотите вставить что-то на несколько строк, используйте Shift - i.

Итак, для текста:

abc123abc
def456def
ghi789ghi

если вы нажмете Ctrl - v указателем мыши на 1, дважды нажмите j, чтобы спуститься на два столбца, затем Shift - i , ESC, ваш текст будет выглядеть например:

abc,123abc
def,456def
ghi,789ghi

(многострочная вставка имеет небольшое отставание и не будет отображаться до тех пор, пока вы не нажмете ESC).

Ответ 3

То, что означает команда: norm (al) для:

:10,20 normal I,

Ответ 4

Если вы уже используете '.' чтобы повторить вашу последнюю команду много, я нашел этот самым удобным решением. Это позволяет вам повторять последнюю команду в каждой строке визуального блока с помощью

" allow the . to execute once for each line of a visual selection
vnoremap . :normal .<CR>

Ответ 5

Я считаю, что самый простой способ сделать это -

1) запишите макрос для одной строки, назовите его 'a'; в этом случае один тип

q a I, ESC j q

2) выберите блок строк, который вы хотите применить к макросу

3) используйте функцию 'norm' для выполнения макроса 'a' над этим блоком строк, т.е.

:'<,'>[email protected]

Ответ 6

Я думаю, что проще всего записать макрос, а затем повторить макрос столько раз, сколько захотите. Например, чтобы добавить запятую в начале каждой строки, введите:

q a I , ESC j q

чтобы повторить это 5 раз, вы вводите

5 @ a

Ответ 7

Я использую блокировать визуальный режим. Это позволяет выполнять вставки/изменения в нескольких строках (например, "вертикальные изменения" ).

Ответ 8

Помимо макросов, как уже было сказано, для конкретного случая вставки запятой в ряд строк (например, из строки 10-20) вы можете сделать что-то вроде:

:10,20s/\(.*\)/,\1

То есть вы можете создать нумерованное групповое совпадение с\(и \) и использовать \1 в заменяющей строке, чтобы сказать "заменить содержимое совпадения".