FTP 링크를 로컬로 대체하기위한 Vim 패턴


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 파일이지만 일부는 ptt 및 기타 임의 파일입니다.

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/

그래서 " 'ftp : //'에서 마지막 '/'까지 모든 것을 대체 하시겠습니까?"
akira

가능하다면 파일 이름 자체와 일치하지 않습니다.
webdesserts

답변:


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

나는 약간의 설명으로 질문을 업데이트했습니다. ftp 사이트에는 공통 디렉토리가 없으며이 파일들은 여러 디렉토리에서 링크되므로 패턴이 필요합니다.
webdesserts

하하, 놀랍습니다. 이제이 일을 함수로 바꾸려고 노력하십시오 (도움을 주시지 만 패턴은 좋은 시작입니다). 도와 주셔서 감사합니다! 나중에 어떻게했는지 살펴 보도록하겠습니다. 아직 보지 못한 것들이 많이 있습니다.
webdesserts

0

가지다

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

그리고 그것을 대체하십시오

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

너는 원해

:s#ftp://some/#local/#
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.