2016-11-14 19 views
1

내 .vimrc에 마지막으로 '저장'(: w)의 타임 스탬프 (수정 됨)로 현재 편집중인 파일을 자동으로 업데이트하는 기능이 있습니다.vi/vim에서 파일 헤더의 파일 경로를 autocmd로 자동 업데이트하는 방법은 무엇입니까?

Filename과 Filepath도 업데이트하고 싶습니다. 나는 ("%") 확장을 통해 파일 이름을 업데이 트 autocmd 있습니다. 파일 경로에 관해서는, 문서에서 읽은 확장 ("% : p : h"를 사용하여 경로를 삽입 할 수 있어야합니다 (제외 파일 이름은), 그러나 그것은 작동하지 않습니다

누구 내 헤더 파일 경로를 삽입하는 방법을 말해 줄 수 내가 원하는 파일 헤더의

예 업데이트 :.? 내가

Modified: November 13 2016 
Filename: myfile 
Filepath: /home/me/path/tomyfile/ 

코드가 현재 :

autocmd BufWritePre * call UpdHeader() 

function! UpdHeader() 
    " update path <<<<<< DOES NOT WORK >>>>>>> 
    silent! execute "1," . 10 . "g/Filepath:.*/s//Filepath: " .expand("%:p:h") 

    " update filename <<WORKS>> 
    silent! execute "1," . 10 . "g/Filename:.*/s//Filename: " . expand("%") 

    " update last mod date <<WORKS>> 
    silent! execute "1," . 10 . "g/Modified:.*/s//Modified: " . strftime("%d %B %Y%t%t%T (%z)%tBy : ") . $USER 
    ... 
endf 

thx! 당신이 :substitute에서 구분 기호로 /을 모두 사용으로 M

답변

0

당신은, 파일 경로에 탈출 적절한 수행해야하고, (유닉스 스타일) 교체 경로는 또한에 / 구분이있다. :substituteE488: Trailing characters을 통해 알리 겠지만, :silent!입니다.

빠른 수정 # 파일 경로에 표시되지 않습니다 바라고, :substitute 구분으로 전환 될 것이다 : 또는

silent! execute "1," . 10 . "g/Filepath:.*/s//Filepath: " .escape(expand("%:p:h"), '/\'. (&magic ? '&~' : '')) 

, 당신이 대체 할 수

silent! execute "1," . 10 . "g/Filepath:.*/s##Filepath: " .expand("%:p:h") 

더 나은 적절한 이스케이프 할 표현식 :

silent! execute "1," . 10 . "g/Filepath:.*/s//\\='Filepath: ' .expand('%:p:h')" 

파일 이름 확장은 그로부터 혜택을 볼 것입니다.

+0

감사합니다. Ingo, 제안 된 모든 솔루션 3 개가 예상대로 작동합니다. :). 나는 2 번째 것을 사용하고, 적절한 도피로 가장 잘 보인다. (파일 이름 확장도 유사하게 수정합니다.) –

+0

오, 잉고, '(& magic?'& ~ ':' '))'부분을 제발 설명해 주시겠습니까? –

+0

교체 부분의 탈출은 ''magic ''설정에 달려 있습니다. 대개 켜져 있으므로'&'와'~'도 이스케이프해야합니다. –