2

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

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

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

autocmd BufLeave,FocusLost * silent! wall

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

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

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

有人可以帮忙吗?

4

1 回答 1

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 ...)不过,您可以检查它们。

  • 请注意,我没有!wcmd 中添加。

  • 它可能不适用于您的 autocmd wall。如果你想这样做,你必须遍历所有缓冲区,并为每个缓冲区调用函数。

  • 毕竟功能显示了它如何完成的方向,它(质量)离“生产”水平还很远。

于 2013-09-11T23:11:08.477 回答