2

У меня есть два файла, скажем, a.txt и b.txt , в одном сеансе vim, и я разделил экран, поэтому у меня есть файл a.txt в верхнем окне и b.txt в нижнем окне.

Я хочу переместить строки здесь и там из a.txt в b.txt: я выбираю строку с помощью Shift+v, затем перехожу к b.txt в нижнем окне с помощью Ctrl+w , вставляю с помощью p, возвращаюсь к a.txt с помощью Ctrl+w ↑, и я могу повторить операцию, когда доберусь до другой строки, которую хочу переместить.

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

1 ответ1

5

Это звучит как хороший пример использования макроса. Макросы - это команды, которые можно записать и сохранить в регистре Vim. Каждый регистр обозначается буквой от а до я.

запись

Из записи ключей для повторных заданий - Vim Tips

Чтобы начать запись, нажмите q в обычном режиме, а затем букву (от a до z). Это начинает запись нажатий клавиш в указанный регистр. Vim отображает «запись» в строке состояния. Введите любые команды в обычном режиме или войдите в режим вставки и введите текст. Чтобы остановить запись, снова нажмите q в обычном режиме.

Для этого конкретного макроса я выбрал регистр m (для перемещения), чтобы сохранить его.

Я нажал q m, чтобы записать следующие команды:

  • d d, чтобы удалить текущую строку (и сохранить ее в регистр по умолчанию)
  • Ctrl W j, чтобы перейти к окну ниже
  • p, чтобы вставить содержимое регистра по умолчанию
  • и Ctrl W k, чтобы вернуться в окно выше.

Когда я набрал q, чтобы закончить запись макроса, содержимое регистра m было:

dd^Wjp^Wk

использование

  • Чтобы переместить текущую строку, просто введите @ m в обычном режиме.
  • Чтобы повторить макрос в другой строке, @ @ может использоваться для выполнения последнего использованного макроса.
  • Чтобы выполнить макрос 5 раз (т. Е. Переместить текущую строку со следующими четырьмя строками под ней), используйте 5 @ m или 5 @ @.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .