更智能的Vim恢复?
发布时间:2020-12-15 16:29:16 所属栏目:安全 来源:网络整理
导读:当前一个Vim会话崩溃时,您会看到“交换文件…已存在!对于在上一个会话中打开的每个文件。 你能使这个Vim恢复提示更聪明吗? (不关闭恢复!)具体来说,我在想: 如果交换的版本不包含未保存的更改,并且编辑过程不再运行,您可以使Vim自动删除交换文件吗?
当前一个Vim会话崩溃时,您会看到“交换文件…已存在!对于在上一个会话中打开的每个文件。
你能使这个Vim恢复提示更聪明吗? (不关闭恢复!)具体来说,我在想: >如果交换的版本不包含未保存的更改,并且编辑过程不再运行,您可以使Vim自动删除交换文件吗? 我发现了SwapExists自动命令,但我不知道它是否可以帮助这些任务。
我有vim存储我的交换文件在一个本地目录,通过在我的.vimrc:
set directory=~/.vim/swap,. 除了其他好处,这使得交换文件容易一次找到所有。 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窗口中显示,因此我可以合并到未保存的更改中。 – 用户 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |