如何在vim中保存时自动命名文件

时间:2013-09-11 22:43:47

标签: vim

我试图在vim中模仿类似于TextEdit.app的行为。

在我工作的时候,我经常打开很多文件来记笔记,并保存它们而不保存它们。当我重新启动笔记本电脑时,由于AutoSave,TextEdit文件仍然存在并打开。如果我对vim(特别是MacVim)做同样的事情,文件(如预期的那样)没有保存,我丢失了内容。

我解决这个问题的方法有两位。第一个是在我不使用文件时自动保存文件,因此使用如下命令:

autocmd BufLeave,FocusLost * silent! wall

这适用于已保存的文件,但忽略了尚未保存的文件。这是第二位发挥作用的地方,我希望vim自动为这些文件提供一个默认名称,如果它试图保存它们并且它们还没有名称。可能我还希望有一个默认的保存目录。

理想的解决方案是,当未命名的文件/缓冲区失去焦点时,它会保存为~/Documents/notes/note_1.txt,第二个note_2.txt等等。

我确实四处寻找可以帮助任何方向的任何指针(默认名称和默认目录 - 虽然后者不是基本的),但找不到任何东西。

有人可以帮忙吗?

1 个答案:

答案 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。如果你想这样做,你必须遍历所有缓冲区,并为每个缓冲区调用该函数。

  • 在所有功能显示了如何完成它的方向后,它(质量)仍然离“生产”水平很远。