backup
并启用了writebackup
,Vim将在编辑会话期间创建备份文件,然后将其删除。但是,即使进行了这些设置,即set nobackup
set writebackup " Enabled!
set noswapfile
set noundofile
我也看不到创建任何其他文件。
#1 楼
backup
和writebackup
是两个独立但相互交织的选项;它们本质上是同一整体的两半。我认为,解释这两个选项的最简单方法是详细说明当您尝试使用这些选项的某些组合覆盖文件时发生的情况。现有文件foo.txt
。您对其进行了一些更改(不只是附加到其上),然后发出:write
命令... 如果启用了
backup
或writebackup
(或同时启用了两者),则在写入文件之前,Vim将创建备份(位置取决于backupdir
设置)。之后,Vim将尝试写入原始文件。此时,行为取决于backup
设置:如果
nobackup
,则在成功写入原始文件后立即删除备份文件。如果
backup
,则备份文件将被保留,以后将被覆盖。就这样;行为确实取决于
backup
的设置。应当注意,在启用前者而禁用后者的情况下,例如,backup
将覆盖writebackup
。 :set backup nowritebackup
。换句话说,它与:set backup writebackup
相同。:h backup-table
的这张表概述了同一件事: *backup-table*
'backup' 'writebackup' action
off off no backup made
off on backup current file, deleted afterwards (default)
on off delete old backup, backup current file
on on delete old backup, backup current file
关于选项名称
您可能会认为这些选项的名称应该互换,因为每个选项的名称似乎可以更准确地描述另一个选项的名称。我最初持有相同的观点,但我将在此处反映KRyan的有见地的评论:为了帮助理解命名约定,请考虑以下问题:
backup
始终产生备份,而writebackup
产生备份写入过程中的备份。换句话说,write并不是动词,而是形容您要启用的备份类型的形容词。评论
为了帮助理解命名约定,请考虑以下事项:备份始终会生成一个备份,而写备份则会在写过程中生成一个备份。换句话说,write并不是动词,而是形容您要启用的备份类型的形容词。
– KRyan
18年7月22日在22:35
“ write不是用作动词,而是形容词”。太精彩了。
–零骑士
18年7月22日在22:39
很高兴你喜欢!如果愿意,可以将其合并到您的答案中。
– KRyan
18年7月22日在22:40
#2 楼
就像@ZeroKnight在:set nobackup writebackup
中说的那样,备份文件将在:write
期间使用,但之后将被删除。官方文档在这里:backup
和writebackup
。问题(我的重点)
nowritebackup
实际做什么?您可以使用inotify进行查找。进行测试,然后将上面指定的设置保存为测试vimrc文件,然后将文件写入该测试目录,并查看inotify的输出。像这样:
第一个终端窗口
mkdir test-dir
cat > test-dir/vimrc <<EOF
set nobackup
set writebackup " Enabled!
set noswapfile
set noundofile
EOF
inotifywait -m -r test-dir
第二个终端窗口
vim test-dir/foo
:w
>对于我来说,输出看起来像这样:
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
test-dir/ OPEN foo
test-dir/ CREATE foo~
test-dir/ OPEN foo~
test-dir/ ATTRIB foo~
test-dir/ CLOSE_WRITE,CLOSE foo~
test-dir/ ATTRIB foo~
test-dir/ CLOSE_NOWRITE,CLOSE foo
test-dir/ OPEN foo
test-dir/ MODIFY foo
test-dir/ ATTRIB foo
test-dir/ CLOSE_WRITE,CLOSE foo
test-dir/ DELETE foo~
评论
您到底在寻找什么行为?使用nobackup进行writebackup意味着成功写入后将立即删除备份文件。@ZeroKnight因此,据我了解,此处有关nowritebackup的信息不正确?
关于备份文件持续到会话结束的一行是不正确的。它们是临时的或一直保留到您删除它们为止,具体取决于备份设置。看看:h备份表。