Как скопировать весь текст hlsearch в буфер обмена в Vim - PullRequest
2 голосов
/ 30 мая 2011

file.txt

abc123
456efg
hi789j

команда

:set hlsearch
/\d\+

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

123
456
789

Так же, как

egrep -o '[0-9]+' file.txt

Спасибо.

Ответы [ 3 ]

5 голосов
/ 30 мая 2011

Можно выполнить следующую процедуру.

  1. Очистить регистр (например, "a).

    qaq
    

    или

    :let @a = ''
    
  2. Выполнить команду 1

    :g/\d\+/norm!//e^Mv??^M"Ay
    

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

    :g/\d\+/norm!//e^Ma^M^[??^Mv$"Ayu
    

    Введите ^M как Ctrl + V , затем Введите (или Ctrl + M ), введите ^[ as Ctrl + V затем Esc (или * * 1 042 Ctrl + [* * 1045). Чтобы не перепечатывать шаблон которые только что были использованы в поиске, можно нажать Ctrl + R , / для автоматической вставки последний шаблон поиска.

    Также можно записать команду для выполнения в согласованных строках (часть следующий norm!) в качестве макроса. Это позволяет увидеть действия сразу на пробной линии и убедиться, что они правильные. Затем, макрос можно применить, используя :global:

    :g/\d\+/norm!@z
    

1 На верхнем уровне команда представляет собой :global, выполняющую Ex команда norm!//e^Mv??^M"Ay на каждой из строк, которые соответствуют шаблону \d\+. Команда Ex начинается с команды norm! для выполнения Normal Команды режима //e^Mv??^M"Ay. Это три команды, разделенные символ возврата каретки ^M. Первый, //e, ищет поиск шаблон (который установлен на шаблон, используемый в глобальной команде) и положить курсор на последний символ совпадения (из-за флага e, см. :help search-offset). Затем команда v запускает визуальный режим. Выглядит команда ?? для последнего шаблона поиска в обратном направлении (и поместите курсор на первый символ совпадения), таким образом выбирая текст, который соответствует последнему поиску шаблон. Последняя команда "Ay возвращает выбранный текст, добавляя его к a зарегистрироваться.

2 Вторая глобальная команда напоминает первую в общих чертах. На каждой совпавшей строке он перемещает курсор к последнему символу совпадения и вставляет символ новой строки после этого символа. Затем он помещает курсор в начало соответствия и выбирает (в визуальном режиме) все до конца строки (включая только что вставленный перевод строки). Наконец, команда добавляет выбранный текст в регистр и отменяет вставку новой строки.

3 Всегда можно увидеть действия, записанные в конкретном макросе проверяет содержимое соответствующего регистра, используя :di z или "zp, например.

2 голосов
/ 30 мая 2011

Если ваш текст соответствует опубликованному вами шаблону, вы можете запустить визуальный режим блочно с помощью Ctrl + V и выбрать от 1 в первой строке до 9 в последней линия. Затем вы просто копируете в регистр +, который является системным буфером обмена, набирая "+y.

Edit:

Я протестировал это новое решение для текста:

abc123
456efg
hi789j

Заменить все нецифровые на ничто с :%s/\D//g, и результат будет:

123
456
789

Скопируйте его в буфер обмена, набрав "+y%, затем отмените изменения с помощью u и все готово.

0 голосов
/ 01 июля 2012

Используйте эту команду, чтобы извлечь все URL и добавить в конец файла:

:let urls = [] | %s/http:[^"]*/\=add(urls, submatch(0))[-1]/g | call setline(line('$')+1, urls)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...