0.0
No commit activity in last 3 years
No release in over 3 years
A utility for finding and recovering Vim swapfiles
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

~> 1.13
~> 10.0
 Project Readme

vim-recovery

vim-recovery is a utility to find and recover swapfiles.

Rationale

After a system crash, my system is often littered with Vim swapfiles. I usually want to do two things. (1) Recover my in-progress work (unsaved files) and (2) remove any unmodified files to prevent Vim from prompting me about the swapfile whenever I open a file.

find . -type f -name "*.sw[a-p]" doesn't take into account the actual type of the file. For example, it finds Shockwave Flash files (*.swf).

vim-recovery searches directories for swap files and checks the header of the file to determine if it actually is a Vim swapfile.

Installation

$ gem install vim-recovery

Usage

$ vim-recovery --help
Usage:  vim-recovery [options] [paths...]
Commands:
    -l, --list                       Find and list Vim swapfiles
        --clean                      Delete unmodified swapfiles if process is not still running
Options:
    -r, --recursive                  Also search subdirectories
    -v, --verbose                    Be more verbose

        --version                    Show version
    -h, --help                       Display this help

Finding swapfiles

The "M" flag means the file was modified, and the "R" flag means the process is still running. The output is tab-delimited to make it easier to parse with tools such as cut.

$ vim-recovery --list
[ R]	./.gitignore.swp	~speckins/git/vim-recovery/.gitignore
[MR]	./.README.md.swp	~speckins/git/vim-recovery/README.md
[ R]	./.vim-recovery.gemspec.swp	~speckins/git/vim-recovery/vim-recovery.gemspec
[  ]	./.crashed.txt.swp	~speckins/git/vim-recovery/crashed.txt

Removing unmodified swapfiles

$ vim-recovery --clean --verbose
./.crashed.txt.swp

$ vim-recovery --list
[ R]	./.gitignore.swp	~speckins/git/vim-recovery/.gitignore
[MR]	./.README.md.swp	~speckins/git/vim-recovery/README.md
[ R]	./.vim-recovery.gemspec.swp	~speckins/git/vim-recovery/vim-recovery.gemspec

Recursively cleaning swapfiles

$ vim-recovery --clean --recursive --verbose
./.crashed.txt.swp
./lib/vim_recovery/.crashed.txt.swp

Filtering the output of --list

$ vim-recovery --list --recursive
[ R]	./.gitignore.swp	~speckins/git/vim-recovery/.gitignore
[MR]	./.README.md.swp	~speckins/git/vim-recovery/README.md
[ R]	./.vim-recovery.gemspec.swp	~speckins/git/vim-recovery/vim-recovery.gemspec
[M ]	./.crashed.txt.swp	~speckins/git/vim-recovery/crashed.txt

$ vim-recovery --list --recursive | grep -a '^\[M \]' | cut -f2
./.crashed.txt.swp

Vim options

The directory option can be added to .vimrc to make it easier to find swapfiles. This is not necessary to use vim-recovery, but it can make it faster. (It takes a long time to search the 900,000+ files in my home directory.)

" .vimrc:
set directory=~/tmp/swapfiles//

For Unix and Win32, if a directory ends in two path separators "//" or "\\", the swap file name will be built from the complete path to the file with all path separators substituted to percent '%' signs. This will ensure file name uniqueness in the preserve directory.