Как экспортировать совпадения только при поиске по шаблону в vim? - PullRequest
1 голос
/ 13 июня 2010

Есть ли способ получить и экспортировать часть соответствия только при поиске по шаблону без изменения текущего файла?

Например, из файла, содержащего:

57","0","37","","http://www.thisamericanlife.org/Radio_Episode.aspx?episode=175"
58","0","37","","http://www.thisamericanlife.org/Radio_Episode.aspx?episode=170"

Я хочуэкспортировать новый файл, содержащий:

http://www.thisamericanlife.org/Radio_Episode.aspx?episode=175
http://www.thisamericanlife.org/Radio_Episode.aspx?episode=170

Я могу сделать это с помощью подстановки следующим образом:

:s/.\{-}\(http:\/\/.\{-}\)".\{-}/\1/g
:%w>>data

Но команда подстановки изменяет текущий файл.Есть ли способ сделать это без изменения текущего файла?

Обновление:

Я ищу такую ​​команду:

:g/pattern/.w>>newfile

Эта команда записывает всю строку, где происходит совпадение.Я хочу экспортировать только совпадение, а не всю строку.

Ответы [ 3 ]

2 голосов
/ 13 июня 2010
redir >>newfile
g/^/let g:match=matchstr(getline(line('.')), pattern) | if g:match!=#"" | silent echo g:match | endif
redir END

Пояснение:

redir >> newfile
Начать перенаправление сообщений в файл newfile, добавить, если он существует.
g/^/
Для каждой строки
getline(line('.'))
получить содержимое строки
let g:match(getline(line('.')), pattern)
найдите часть строки, которая соответствует pattern, и сохраните ее в g:match переменную
if g:match!=#""
если линия соответствует шаблону
echo g:match
выход согласованной строки
silent echo g:match
но только в место, указанное командой redir.
redir END
Прекратить перенаправление вывода.
2 голосов
/ 13 июня 2010

Просто измените ваш заказ:

 :w newfile.txt
 :e newfile.txt
 :%s/.\{-}\(http:\/\/.\{-}\)".\{-}/\1/g
 :w
0 голосов
/ 13 июня 2010

Вы имеете в виду это?

:e currfile.txt
:s/.\{-}\(http:\/\/.\{-}\)".\{-}/\1/g
:w newfile.txt

Или вы хотите продолжить редактирование предыдущего файла?

РЕДАКТИРОВАТЬ: Или вы можете просто отменитьи ').

...