Вопрос
Я собираюсь перебирать большую массу html-файлов и заменять ссылки на ftp-сайт локальными ссылками. Я использую vim и пытаюсь найти шаблон для использования с %s/find/replace/g
который будет соответствовать строке, такой как
href="ftp://some/directory/to/a/random.pdf"
и заменить его на
href="local/directory/random.pdf"
по сути, заменяя все, кроме самого имени файла. В одном html-файле будет несколько ftp-каталогов, поэтому шаблон должен соответствовать любому типу ftp-ссылки. Все эти ftp-файлы будут находиться в одном локальном каталоге. Хотя большинство файлов являются PDF-файлами, некоторые из них являются PDF-файлами и другими случайными файлами.
Могут ли шаблоны Vim соответствовать чему-то подобному, и если да, то как будет выглядеть этот шаблон?
Ответ
@akira отлично поработали с регулярным выражением, приведенным в его ответе. Я вышел сам, чтобы найти способ поместить это в функцию многократного использования, и вот что я придумал:
(внутри вашего vimrc) определите функцию, которая позволяет вам передавать строку для замены совпадающей строки
function SwitchFtp(local)
execute ':%s,href="ftp://.*/\(.\+\)",href="'.a:local.'\1",g'
endfunction
(необязательно) назначьте эту функцию команде, чтобы вам не приходилось использовать call
command -nargs=1 SwitchFtp call SwitchFtp(<f-args>)
Это тогда будет называться с чем-то вроде
:SwitchFtp local/directory/