更智能的Vim恢复?

前端之家收集整理的这篇文章主要介绍了更智能的Vim恢复?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当前一个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窗口中显示,因此我可以合并到未保存的更改中。

用户

猜你在找的Bash相关文章