Самый эффективный способ заменить весь буфер?

10

В настоящее время у меня есть два аналогичных метода для замены всего буфера другим текстом (скажем, в буфере обмена).

Способ № 1:

  1. удалить все строки: :%d.

  2. вставить текст: "+P(или аналогичный:) :put+.

Способ № 2:

  1. визуально выделить все строки: ggVG.

  2. вставить текст: "+P.

Однако я не мог найти способ сделать это одним выстрелом. Самый близкий, который я нашел, это :changeкоманда. Но это не очень хорошо работает с регистрами. Конечно, я могу создать некоторую функцию и / или сопоставить ключ для этого. Но прежде чем я смогу выполнить все эти настройки, я хочу убедиться:

Есть ли какая-то встроенная команда для замены диапазона строк другим текстом? Мол, вы могли :%replace+бы заменить весь буфер текстом в буфере обмена?

Naitree
источник
2
Я ничего не знаю о моей голове, но если вы делаете это много, почему бы не создать отображение / команду?
Мэтт Бём
5
Хм, 1,$s/\_./\=@+это не решение: P, :%d|put+ближе, но не совсем там.
Runium
1
Я забыл звездочку после точки ... 1,$s/\_.*/\=@+, где \_.совпадает любой символ, включая перевод строки.
Runium
2
Вы должны повторно использовать буфер, или было бы приемлемо начать новый буфер?
200_success
3
Я думаю, что Сукминдер :%d|put+отвечает всем требованиям. Это коротко и незабываемо. Другая команда слишком загадочна, чтобы ее можно было запомнить и правильно ввести.
Ли Райан

Ответы:

2

Вы можете сделать, ggvG<CTRL-G>чтобы визуально выделить весь буфер и войти Select-mode. Это самый простой способ заменить буфер текстом, который вы планируете печатать. Возможно, вы даже сможете составить Select-modeкарту, :smapкоторая решит вашу проблему.

Аарон Мэсси
источник
0

Один из способов заменить весь буфер буфером обмена - использовать внешнюю команду, например:

:%!pbpaste
:%!echo my_text

См. Также: совместное использование буфера обмена Mac OS X

Или с помощью замены:

:%s/\_.*/\=@+/
:%s/\_.*/my text/

В качестве альтернативы используйте :%d|put+(как уже предлагалось в комментариях).

kenorb
источник