1

Вопрос

Я собираюсь перебирать большую массу 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/

2 ответа2

1
:%s,href="ftp://.*/\(.\+\)",href="local/directory/\1",g
0

Принять

href="ftp://some/directory/to/a/random.pdf"

и заменить его на

href="local/directory/to/a/random.pdf"

ты хочешь

:s#ftp://some/#local/#

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