Ответ 1
:10,20s/^/,/
Или используйте макрос, запись с помощью:
q a i , ESC j h q
использовать с:
@ a
Объяснение: q a
начинает запись макроса для регистрации a
, q
завершает запись. Для этого доступны регистры a
до z
.
Я знаю, что в Vim я часто повторяю команду, просто добавляя число перед ним. Например, можно удалить 5 строк:
5dd
Также часто можно указать диапазон строк для применения команды, например
:10,20s:hello:goodbye:gc
Как я могу выполнить "вертикальное редактирование"? Например, я хотел бы вставить конкретный символ, например запятую, в начале (пропуская пробелы, то есть то, что вы получите, если вы введете запятую после Shift-I в командном режиме) каждой строки в заданном ассортимент. Как это можно достичь (не прибегая к периоду вниз-вниз-вниз-вниз-вниз-периоду)?
:10,20s/^/,/
Или используйте макрос, запись с помощью:
q a i , ESC j h q
использовать с:
@ a
Объяснение: q a
начинает запись макроса для регистрации a
, q
завершает запись. Для этого доступны регистры a
до z
.
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).
То, что означает команда: norm (al) для:
:10,20 normal I,
Если вы уже используете '.' чтобы повторить вашу последнюю команду много, я нашел этот самым удобным решением. Это позволяет вам повторять последнюю команду в каждой строке визуального блока с помощью
" allow the . to execute once for each line of a visual selection
vnoremap . :normal .<CR>
Я считаю, что самый простой способ сделать это -
1) запишите макрос для одной строки, назовите его 'a'; в этом случае один тип
q a I, ESC j q
2) выберите блок строк, который вы хотите применить к макросу
3) используйте функцию 'norm' для выполнения макроса 'a' над этим блоком строк, т.е.
:'<,'>[email protected]
Я думаю, что проще всего записать макрос, а затем повторить макрос столько раз, сколько захотите. Например, чтобы добавить запятую в начале каждой строки, введите:
q a I , ESC j q
чтобы повторить это 5 раз, вы вводите
5 @ a
Я использую блокировать визуальный режим. Это позволяет выполнять вставки/изменения в нескольких строках (например, "вертикальные изменения" ).
Помимо макросов, как уже было сказано, для конкретного случая вставки запятой в ряд строк (например, из строки 10-20) вы можете сделать что-то вроде:
:10,20s/\(.*\)/,\1
То есть вы можете создать нумерованное групповое совпадение с\(и \) и использовать \1 в заменяющей строке, чтобы сказать "заменить содержимое совпадения".