如何防止git vimdiff以只读方式打开文件?

时间:2013-08-31 03:36:44

标签: git readonly vimdiff difftool

我正在尝试使用vimdiff作为Git的差异工具,但由于某种原因,文件始终以只读模式打开。它对原始文件有意义,但对我修改过的文件没有意义(因为我还没有提交它们)。

这是我目前的.gitconfig:

[diff]
        tool = vimdiff
[merge]
        tool = vimdiff
[difftool]
        prompt = false

知道可能导致这种情况的原因吗?

3 个答案:

答案 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。有几种解决方案可以写入文件:

  1. 在vim中使用:w!。即使以只读方式打开,这也会强制写入。

  2. 您可以编辑~/.gitconfig以覆盖不带-R的vimdiff命令

    [difftool "vimdiff"]
    cmd = vimdiff "$LOCAL" "$REMOTE"
    
  3. 您可以编辑~/.vimrc以使vimdiff可写。 (这会影响所有vimdiff,而不仅仅是git。)

    if &diff
        set noreadonly
    endif