That's the default desired behaviour for vimdiff. You can unset using :set noro
.
Or in your .vimrc config, add this:
" Default to not read-only in vimdiff
set noro
Question
I'm trying to use vimdiff as a diff tool for Git but, for some reason, the files are always open in read-only mode. It makes sense for the original file but not for the ones that I have modified (since I haven't committed them yet).
This is my current .gitconfig:
[diff]
tool = vimdiff
[merge]
tool = vimdiff
[difftool]
prompt = false
Any idea what could be causing this?
Solution 2
That's the default desired behaviour for vimdiff. You can unset using :set noro
.
Or in your .vimrc config, add this:
" Default to not read-only in vimdiff
set noro
OTHER TIPS
The deafult command that git uses for vimdiff is: (found by inspecting process list)
vim -R -f -d -c "wincmd l" -c 'cd "$GIT_PREFIX"' "$LOCAL" "$REMOTE"
You can override this (to not use -R
, readonly mode) by setting the difftool.vimdiff.cmd
variable.
$ git config --global difftool.vimdiff.cmd 'vim -f -d -c "wincmd l" -c '\''cd "$GIT_PREFIX"'\'' "$LOCAL" "$REMOTE"'
The quoting is tricky. I would copy-paste it.
The reason this happens is because git invokes vimdiff
with the -R
(readonly) option. There are several solutions to be able to write to the file:
Use :w!
in vim. That will force write even though it was opened as readonly.
You can edit ~/.gitconfig
to override the vimdiff command without -R
[difftool "vimdiff"]
cmd = vimdiff "$LOCAL" "$REMOTE"
You can edit ~/.vimrc
to always make vimdiff writeable. (This will affect all vimdiff, not just git.)
if &diff
set noreadonly
endif