我有 vim 将我的交换文件存储在一个本地目录中,通过在我的 .vimrc 中有这个:
set directory=~/.vim/swap,.
除了其他好处之外,这使得交换文件很容易一次找到。现在,当我的笔记本电脑断电或其他什么情况下,我开始备份一堆交换文件时,我只需运行我的cleanswap
脚本:
TMPDIR=$(mktemp -d) || exit 1
RECTXT="$TMPDIR/vim.recovery.$USER.txt"
RECFN="$TMPDIR/vim.recovery.$USER.fn"
trap 'rm -f "$RECTXT" "$RECFN"; rmdir "$TMPDIR"' 0 1 2 3 15
for q in ~/.vim/swap/.*sw? ~/.vim/swap/*; do
[[ -f $q ]] || continue
rm -f "$RECTXT" "$RECFN"
vim -X -r "$q" \
-c "w! $RECTXT" \
-c "let fn=expand('%')" \
-c "new $RECFN" \
-c "exec setline( 1, fn )" \
-c w\! \
-c "qa"
if [[ ! -f $RECFN ]]; then
echo "nothing to recover from $q"
rm -f "$q"
continue
fi
CRNT="$(cat $RECFN)"
if diff --strip-trailing-cr --brief "$CRNT" "$RECTXT"; then
echo "removing redundant $q"
echo " for $CRNT"
rm -f "$q"
else
echo $q contains changes
vim -n -d "$CRNT" "$RECTXT"
rm -i "$q" || exit
fi
done
这将删除所有与真实文件保持同步的交换文件。任何不匹配的内容都会在 vimdiff 窗口中显示,以便我可以合并未保存的更改。
——乔瑟