当前一个Vim会话崩溃时,您会看到“交换文件…已存在!对于在上一个会话中打开的每个文件。
你能使这个Vim恢复提示更聪明吗? (不关闭恢复!)具体来说,我在想:
>如果交换的版本不包含未保存的更改,并且编辑过程不再运行,您可以使Vim自动删除交换文件吗?
>您可以自动化建议的过程,将恢复的文件保存在一个新名称下,将其与磁盘上的文件合并,然后删除旧的交换文件,从而需要最少的交互?特别是当交换版本和磁盘版本相同时,一切都应该是自动的。
我发现了SwapExists自动命令,但我不知道它是否可以帮助这些任务。
我有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窗口中显示,因此我可以合并到未保存的更改中。
– 用户