Повторяя через строки в VIM

8

У меня есть несколько строк текста, как это:

firstName
lastName
email

Теперь я добавляю private readonly stringв начало первой строки. Как мне повторить это редактирование для других строк? (конечно, не посещая каждую строку вручную) (Кстати, я понимаю, что это можно сделать с помощью регулярного выражения, но я ищу «путь vi», если это возможно)

На всякий случай пользуюсь VsVim

Маурисио Шеффер
источник

Ответы:

8

Перейдите firstNameв обычный режим и введите

qaIprivate readonly string <ESC>jq

Это запишет макрос (в регистре a) того, что вы добавили «частную строку только для чтения» в начало строки, а затем переместились на одну строку вниз. Если вы хотите повторить этот макрос дважды (таким образом , повторяя команду в течение следующих двух строк), в командном режиме типа 2@aна lastNameлинии, которая будет выполнять макрос в два раза больше.


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

Если вы набираете текст, на private readonly stringкоторый вы возражаете, быстрое решение состоит в том, чтобы отредактировать текст в первой строке, а затем перейти вниз к каждой строке, которую вы хотите отредактировать, и использовать .в обычном режиме. Это будет повторять вашу последнюю команду (в этом случае добавление текста в строку) без суеты.

Зик
источник
круто, я на самом деле искал способ повторить, .но я думаю, что в этом случае это невозможно ...
Маурисио Шеффер
@muasch: Ну, вы можете просто использовать в qa.jqкачестве макроса (повторите команду, затем перейти на одну строку вниз) и использовать 2@aдля его воспроизведения. Это немного грязно, хотя.
Зик
+1 Макрос qa ... q гибкий и может решить много проблем, это полезно знать. Немного излишне для этого вопроса, но это, вероятно, сэкономит вам много времени в будущем.
Йохан
7

Другой способ сделать это - использовать режим Visual Block :

  1. Начните с вашего курсора в начале первой строки.
  2. Нажмите Ctrl+, vчтобы войти в режим визуальной блокировки.
  3. Нажмите jдля перемещения вниз, расширяя выделение, чтобы включить желаемые линии.
  4. Нажмите, Iчтобы перейти в (предваряющий) режим вставки.
  5. Тип private readonly string.
  6. Нажмите Esc. Это заставит вас вернуться в командный режим, и набранный вами текст будет повторяться в каждой строке перед началом выбора визуального блока (в данном случае в начале каждой строки, поскольку именно там вы начали выделение) ,
Майк Сепловиц
источник
Чтобы расширить выбор до каждой строки в файле, шаг 1 может быть ggи шаг 3 может быть G0.
Деннис Уильямсон
7

: нормально тоже отлично (и короче)


:.,+2norm Iprivate readonly string 

  • .,+2- отсюда до 2 двух строк ниже (или вы можете выбрать строки, используя визуальный режим shift+, vа затем набрав, :чтобы войти в режим ex)
  • norm - введите эти команды, как будто я набрал их в обычном (командном) режиме
  • I(...) - вставьте следующую строку в начало строки
Кибер Оливейра
источник
+1 не знал про: норма, это довольно приятно
Johan
3

Просто наберите "private readonly string" в первой строке. Затем для оставшихся 2 строк введите 2 (точка), например 2. из второй строки.

adithya
источник
1

Дайте это попробовать:

:%s/^/private readonly string /

Я полагаю, вы могли бы написать сценарий, но почему?

Деннис Уильямсон
источник
извините, я сказал, что ищу "путь vi", а не регулярное выражение. Я уже знаю регулярные выражения и пытаюсь выучить vim.
Маурисио Шеффер
0

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

  1. Вставьте текст, как вы это обычно делаете Iв первой строке.

  2. Включите визуальный режим нажатием vили Vили <c-v>.

  3. Схватите все строки, которые вы хотите применить изменения. В этом случае jjсделаем.

  4. Хит, :norm .затем введите.

off99555
источник