【问题标题】:VIM: how to update text when savingVIM:保存时如何更新文本
【发布时间】:2011-03-09 19:42:36
【问题描述】:

我正在努力养成使用一个编辑器(Windows XP 上的 gVim 7.3)完成所有编程和开发任务的习惯。

我想在使用 :w 保存时更新任何打开文件中的标题

标题如下所示(在 C 文件中):

/* Filename: hello.c
 * Filesize: 345 bytes
 * Last Modified: Fri Feb 25, 2011  01:55PM
 */

我实际上已经想出了如何更新 Last Modified,方法是在我的 _vimrc 文件中包含以下内容:

" If buffer modified, update any 'Last modified: ' in the first 20 lines.
" 'Last modified: ' can have up to 10 characters before (they are retained).
" Restores cursor and window position using save_cursor variable.
function! LastModified()
  if &modified
    let save_cursor = getpos(".")
    let n = min([20, line("$")])
    keepjumps exe '1,' . n . 's#^\(.\{,10}Last Modified:\).*#\1' .
          \ strftime(' %a %b %d, %Y  %I:%M%p') . '#e'
    call histdel('search', -1)
    call setpos('.', save_cursor)
  endif
endfun

autocmd BufWritePre * call LastModified()   

我的问题是,使用类似的方法,我怎样才能同时更新文件名和文件大小?感谢您的帮助。

【问题讨论】:

  • 为什么要这样做?您的版本控制系统存储相同的信息,因此您只需手动复制自动保存的内容...

标签: vim configuration header editor


【解决方案1】:

不要这样做。

您的版本控制系统存储相同的信息。如果您没有使用,请开始。

【讨论】:

  • 在这种情况下,即使是文件系统也存储了相同的信息。
  • 不仅信息已经存储在其他地方,而且您可能会通过将其存储在文件中来使其更难进行版本控制。 (想象一下试图合并......)
【解决方案2】:

您可以使用@%添加当前文件名:

keepjumps exe '1,' . n . 's#^\(.\{,10}Filename:\).*#\1' .
      \ ' ' . @% . '#e'

不过,不知道文件大小。

更不用说您实际上会通过添加文件大小来修改文件大小,因此可能无法正确。

【讨论】:

  • 当然,我们都想知道:你到底为什么要这样做?
  • 这很好用,谢谢。如果有人知道文件大小,将不胜感激。
  • 我猜您可以通过编程方式拉出整个文件,然后使用strlen(@")(或您拉入的任何寄存器),前提是您的编码中的字符和字节之间存在一对一的映射/内容。再次注意,通过在文件本身中写入文件大小,您可能会更改文件大小,从而使您刚刚插入的值立即过时。
猜你喜欢
  • 2014-04-29
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多