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

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

5dd

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

:10,20s:hello:goodbye:gc

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

120 vim
10.12.2008 12:39:14
9 ОТВЕТОВ
РЕШЕНИЕ

:10,20s/^/,/

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

q a i , ESC j h q

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

@ a

Пояснение: q aначинает запись макроса для регистрации a, qзаканчивает запись. Есть регистры aв zналичии для этого.

107
22.07.2017 21:34:38
Спасибо. Что делать, если я хотел эквивалент смены-я? То есть, пропуская начальные пробелы?
saffsd 10.12.2008 12:49:42
Объяснение: ^\(\s*\)захватывает начальные пробелы и сохраняет его в регистр, который затем можно прочитать \1.
Svante 10.12.2008 12:59:00

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

q a I , ESC j q

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

5 @ a
16
10.12.2008 12:45:20

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

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

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

1
10.12.2008 13:03:30

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

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

abc123abc
def456def
ghi789ghi

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

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

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

127
23.09.2016 02:39:46
Ницца. Ctrl-V означает прописные буквы, кстати, можно сказать Ctrl-Shift-v
Svante 10.12.2008 14:05:27
на самом деле это либо CTRL-v, либо CTRL-V. Vim нечувствителен к регистру CTRL-кодов (см .: help CTRL- {char}).
rampion 10.12.2008 21:37:47
после небольшого поиска причины того, почему этот метод не работал, потому что он использует заглавную I (shift-i) вместо i (также это был только ctrl-v, поскольку ctrl-shift-v переместил меня в конец)
Willyfrog 9.01.2012 16:36:03
Мне любопытно. Почему они просто не используют iбез клавиши Shift?
off99555 16.11.2016 00:41:27
я без сдвига вставляю в текущую позицию. shift + i - вставка в начале строки
Kevin P 2.04.2020 20:01:14

Вот для чего предназначена команда: norm (al):

: 10,20 нормальный я,
59
16.03.2011 21:37:39

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

2
6.01.2009 23:33:04
ваша ссылка не работает
Christopher Hunter 6.11.2017 21:58:06

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

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

Qa I, ESC JQ

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

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

:'<,'>norm@a
22
28.11.2009 11:21:59

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

" allow the . to execute once for each line of a visual selection
vnoremap . :normal .<CR>
44
9.11.2011 11:53:09
Это полезно, но также ограничено, так как .работает в линейном режиме в визуальном режиме. Я думаю, что визуальный режим в этом случае иногда может быть удобен для выбора линейного диапазона. Но команды и макросы в этом случае более гибкие и мощные.
Bohr 2.10.2013 02:12:45

После того, как ваши изменения уже сохранены в .операторе, сделайте следующее:

  1. Выделите текст, к которому вы хотите применить оператор, используя визуальный режим
  2. Затем запустите команду :norm .
-1
14.02.2019 16:47:52