我正在尝试使用vimdiff作为Git的差异工具,但由于某种原因,文件始终以只读模式打开。它对原始文件有意义,但对我修改过的文件没有意义(因为我还没有提交它们)。
这是我目前的.gitconfig:
[diff]
tool = vimdiff
[merge]
tool = vimdiff
[difftool]
prompt = false
知道可能导致这种情况的原因吗?
答案 0 :(得分:16)
git用于vimdiff的deafult命令是:(通过检查进程列表找到)
vim -R -f -d -c "wincmd l" -c 'cd "$GIT_PREFIX"' "$LOCAL" "$REMOTE"
您可以通过设置-R
变量来覆盖此设置(不使用difftool.vimdiff.cmd
,只读模式)。
git config --global difftool.vimdiff.cmd 'vim -f -d -c "wincmd l" -c '\''cd "$GIT_PREFIX"'\'' "$LOCAL" "$REMOTE"'
报价很棘手。我会复制粘贴它。
答案 1 :(得分:13)
这是vimdiff的默认所需行为。您可以使用:set noro
取消设置。
或者在.vimrc配置中,添加:
" Default to not read-only in vimdiff
set noro
答案 2 :(得分:1)
发生这种情况的原因是因为git使用vimdiff
(只读)选项调用-R
。有几种解决方案可以写入文件:
在vim中使用:w!
。即使以只读方式打开,这也会强制写入。
您可以编辑~/.gitconfig
以覆盖不带-R
的vimdiff命令
[difftool "vimdiff"]
cmd = vimdiff "$LOCAL" "$REMOTE"
您可以编辑~/.vimrc
以使vimdiff可写。 (这会影响所有vimdiff,而不仅仅是git。)
if &diff
set noreadonly
endif