2016-11-14 10 views
1

私は自分の.vimrcに、私が現在編集しているファイルを最後の 'save'(:w)のタイムスタンプ(Modified)で自動的に更新する関数を持っています。vi/vimでファイルヘッダのファイルパスをautocmdで自動更新する方法は?

また、ファイル名とファイルパスも更新したいと思います。私はファイル名を更新するautocmdを持っています( "%")。ファイルパスについては、ドキュメントで読んだところからexpand( "%: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

あなたは、ファイルパスにエスケープ適切な実行する必要がある、と(Unix形式)代替パスもそれに/セパレータを持っています。 :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''設定に依存します。通常はオンですので、 '&'と '〜'もエスケープする必要があります。 –

関連する問題