Skip to main content
  1. Posts/

File Backup in Neovim

··340 words·2 mins·
Table of Contents

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.

References
#

Related

Migrating from Packer.nvim to Lazy.nvim
··651 words·4 mins
Pylsp setup for Neovim in 2023
··1020 words·5 mins
Work with JSON File in Neovim
·299 words·2 mins