簡體   English   中英

如何在vi / vim中使用autocmd自動更新文件頭中的文件路徑?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM