24

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

这是我当前的 .gitconfig:

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

知道是什么原因造成的吗?

4

3 回答 3

21

git 用于 vimdiff 的默认命令是:(通过检查进程列表找到)

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"'

引用很棘手。我会复制粘贴它。

于 2014-08-11T21:33:53.967 回答
17

这是 vimdiff 的默认行为。您可以使用取消设置:set noro

或者在你的 .vimrc 配置中,添加这个:

" Default to not read-only in vimdiff
set noro
于 2013-08-31T10:35:00.880 回答
8

发生这种情况的原因是 gitvimdiff使用-R(readonly) 选项调用。有几种解决方案可以写入文件:

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

  2. 您可以编辑~/.gitconfig以覆盖 vimdiff 命令,而无需-R

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

    if &diff
        set noreadonly
    endif
    
于 2018-04-26T11:47:08.977 回答