[英]how to auto update file path in file header with autocmd in vi/vim?
我的.vimrc中有一個函數,它使用最后一次'save'(:w)的時間戳(修改)自動更新我正在編輯的文件。
我還想更新文件名和文件路徑。 我有一個更新文件名的autocmd(通過expand(“%”)。至於Filepath,從我在文檔中讀到的內容,使用expand(“%:p:h”)應允許我插入路徑(不包括文件名),但它不起作用。
任何人都可以告訴我如何在我的標題中插入Filepath?
我想要更新的文件頭的示例:
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
謝謝! 中號
您需要在文件路徑上執行正確的轉義,因為您在:substitute
使用/
both作為分隔符,並且(Unix風格)替換路徑中也包含/
separator。 :substitute
會提醒你通過E488: Trailing characters
,但你已經:silent!
它。
快速解決方法是切換:substitute
分隔符,希望#
永遠不會出現在文件路徑中:
silent! execute "1," . 10 . "g/Filepath:.*/s##Filepath: " .expand("%:p:h")
最好做適當的逃避:
silent! execute "1," . 10 . "g/Filepath:.*/s//Filepath: " .escape(expand("%:p:h"), '/\'. (&magic ? '&~' : ''))
或者,您可以使用表達式替換:
silent! execute "1," . 10 . "g/Filepath:.*/s//\\='Filepath: ' .expand('%:p:h')"
您的文件名擴展也將受益於此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.