当前一个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窗口中显示,因此我可以合并到未保存的更改中。
– 用户
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。