There are several options related to file backup behavior in Vim/Nvim.
backup
writebackup
backupdir
backupcopy
backupext
In this post, I will explain how these options are related to each other.
Option backup
controls whether to make a physical backup when writing a file.
Option writebackup
makes sure that a file backup be made before overwriting a
file. The backup will be removed when the file is successfully written, unless
backup
option is also on. It reduces the risk that your file is destroyed if
something goes wrong when you are writing the file to disk. For more info about
using backup
and writebackup
together, see :h backup-table
.
The option backext
controls the extension used for backup files. backupext
will be appended to the backup file names (default is ~
). For example, if
your file is test.txt
and backupext
is .bak
, the backup file name will be
test.txt.bak
.
The option backupdir
controls where the backup file will be placed. It is a
list of directories (comma separated) to put the backup files. The first item
in this option will be used. You must make sure that the backup directory
exists, or you will see the following error when writing a file:
E510: Can’t make backup file (add ! to override)
Use the following setting to deal with this error:
let g:backupdir=expand(stdpath('data') . '/backup')
if !isdirectory(g:backupdir)
mkdir(g:backupdir, "p")
endif
let &backupdir=g:backupdir
There is also an option backupcopy
, which needs special attention. The value
of backupcopy
can be yes
, no
or auto
:
yes
: it will copy the original file to the backup location and overwrite the original file.no
: it will rename the original file (i.e., move it to the backup directory) and write a new file with the same name.auto
: Nvim will choose whatever works best for you.
Note that for some applications, you may want to set backupcopy
to yes
to
avoid issues.