我正在使用vim在阅读学术文章时做笔记。我更喜欢为我拍的每个音符都有一个新的文本文件,但是组织它们会变得单调乏味。
我想做的是设置一个自动命令来检测我是否在某个目录中,写入新文件,然后将当前日期和时间写入我写的任何文件名。
所以,如果我有:
:pwd
/path/to/projects
当我输入
:w Notes
我想将vim保存为
“Notes - <CURRENT DATE - TIME >.txt
”
我认为它涉及在我的vimrc中声明类似下面的内容:
autocmd BufNewFile,BufWrite "/path/to/projects/*" <command involving strftime("%Y-%m-%d_%H-%M")>
但我无法弄清楚是什么。有任何想法吗?我在Debian Linux上使用Vim 7.3。
答案 0 :(得分:4)
你非常接近。我认为最好在创建文件时重命名该文件;在写入过程中弄乱文件名会使这更加困难(例如,如果重新打开现有注释,或者只是再次写入缓冲区会怎样?)
:file
命令可用于重命名当前文件;当前文件名位于%
特殊标识符中。在创建新文件时触发,这可以完成工作:
autocmd BufNewFile /path/to/projects/* execute 'file' fnameescape(expand('%') . strftime(" - %Y-%m-%d_%H-%M.txt"))
如果您不想考虑原始文件名,这会变得更加容易:
autocmd BufNewFile /path/to/projects/* execute 'file' fnameescape(strftime("Notes - %Y-%m-%d_%H-%M.txt"))
答案 1 :(得分:1)
您可能正在寻找以下内容:
function! SaveWithTS(filename) range
execute "save '" . a:filename . strftime(" - %Y-%m-%d_%H-%M.txt'")
endfunction
command! -nargs=1 SWT call SaveWithTS( <q-args> )
使用.vimrc中的上述内容,执行:SWT注意会将文件保存为Note - YYYY-MM-DD_HH-MM.txt。这样做的缺点是不会自动发生,所以你必须记住使用:SWT而不是:w第一次写你的文件,但它确实让你等到你准备保存以决定你的文件名应该是什么(即你每次都不会被注意到。)
编辑:上面版本的SaveWithTS实际上用文件中的单引号保存到文件名(我的测试结果不好)。下面是一个应该修复它的版本,还允许您指定文件的扩展名(但默认为.txt)
function! SaveWithTS(filename) range
let l:extension = '.' . fnamemodify( a:filename, ':e' )
if len(l:extension) == 1
let l:extension = '.txt'
endif
let l:filename = escape( fnamemodify(a:filename, ':r') . strftime(" - %Y-%m-%d_%H-%M") . l:extension, ' ' )
execute "write " . l:filename
endfunction