[VIM] 解决gVim 7.4会出现无法写入暂存档的问题
在新的机器上装了 gVim 7.4,要使用档案比较 (diff) 等功能时,都会出现以下错误讯息,告知无法读写暂存档:
E810: Cannot read or write temp files
E97: Cannot create diffs
上网查了一下,大家的说法都是要改掉 _vimrc 里的 MyDiff() 这个 function。
参考 "Can't run Vimdiff (7.4) on Windows 7" 这篇,拿以下这段去置换原本的 MyDiff() function 就可以了:
set diffexpr=MyDiff()
function MyDiff()
let opt = '-a --binary '
if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
let arg1 = v:fname_in
if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
let arg2 = v:fname_new
if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
let arg3 = v:fname_out
if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
if $VIMRUNTIME =~ ' '
if &sh =~ '\<cmd'
if empty(&shellxquote)
let l:shxq_sav = ''
set shellxquote&
endif
let cmd = '"' . $VIMRUNTIME . '\diff"'
else
let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
endif
else
let cmd = $VIMRUNTIME . '\diff'
endif
silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3
if exists('l:shxq_sav')
let &shellxquote=l:shxq_sav
endif
endfunction
_vimrc 会在 vim 的安装路径,可能是自订的路径,预设会在 C:\Program Files\vim。
这个问题和先前遇过的又不一样:[VIM] 修复「无法开启暂存档」的错误 ,特此笔记。