我试图在vim中模仿类似于TextEdit.app的行为。
在我工作的时候,我经常打开很多文件来记笔记,并保存它们而不保存它们。当我重新启动笔记本电脑时,由于AutoSave,TextEdit文件仍然存在并打开。如果我对vim(特别是MacVim)做同样的事情,文件(如预期的那样)没有保存,我丢失了内容。
我解决这个问题的方法有两位。第一个是在我不使用文件时自动保存文件,因此使用如下命令:
autocmd BufLeave,FocusLost * silent! wall
这适用于已保存的文件,但忽略了尚未保存的文件。这是第二位发挥作用的地方,我希望vim自动为这些文件提供一个默认名称,如果它试图保存它们并且它们还没有名称。可能我还希望有一个默认的保存目录。
理想的解决方案是,当未命名的文件/缓冲区失去焦点时,它会保存为~/Documents/notes/note_1.txt
,第二个note_2.txt
等等。
我确实四处寻找可以帮助任何方向的任何指针(默认名称和默认目录 - 虽然后者不是基本的),但找不到任何东西。
有人可以帮忙吗?
答案 0 :(得分:5)
我不喜欢你的想法,但这是可行的。
你需要一个功能:
function! SaveIt()
if bufname("%")==''
exec 'w /path/note_'.localtime()
else
w
endif
endfunction
并在您的自动命令中,只需调用该函数即可。您需要注意以下几点:
文件名为/path/note_( ms since 1970)
。你的1,2,3..
索引将使vim检查文件系统找出索引。这可能是一个更好的名称,例如note_2013-09-11_11:11:11.233
您只需更改localtime()
当您尝试保存只读缓冲区时,这可能会抛出异常。 (帮助,qf ......)你可以检查一下。
请注意,我没有在!
cmd中添加w
。
它可能不适用于您的autocmd wall
。如果你想这样做,你必须遍历所有缓冲区,并为每个缓冲区调用该函数。
在所有功能显示了如何完成它的方向后,它(质量)仍然离“生产”水平很远。