6

Кажется, что при работе с файлом в VIM он в основном использует резервную копию файла, а затем перезаписывает оригинал при сохранении. Это проблема при использовании символических ссылок в Windows (например, mklink link_path target_path), так как это уничтожает символическую ссылку.

Кто-нибудь знает способ обойти это? Я уже видел это в FAQ, в котором говорится конкретно об этой проблеме, но рекомендуемый обходной путь не работает. Может быть, это было в какой-то момент, но не для Vim 7.3 (под Windows 7 x64).

4 ответа4

2

Гул на окнах, символическая ссылка перемещается для создания файла резервной копии. Затем исправления пишутся с именем. (Примечание: временный файл все еще связан с исходным файлом)

Они говорят, что «Единственный способ исправить это в текущей версии - это не создавать файл резервной копии :set nobackup nowritebackup »

Это обходной путь, о котором вы говорили? Потому что это работает на мою перспективу.

РЕДАКТИРОВАТЬ: Конечно, у вас не будет резервных копий.

2

Если вам все еще нужны резервные копии, вы можете использовать:

set bkc=yes

(Зачем? читай :h bkc) это решает проблему на винде.

Если исходный файл доступен только для чтения, перед открытием файла необходимо удалить флаг только для чтения. В качестве альтернативы при редактировании файла вы можете убрать флаг «только для чтения» и запустить :set modifiable затем сохранить его.

Существует альтернатива, использующая resol () для разрешения пути, на который указывает ссылка. Я использую версию 7.3, а метод resol (), похоже, не может разрешить ссылки, созданные с помощью команды mklink в Windows):

http://vim.1045645.n5.nabble.com/How-do-I-make-e-path-completion-follow-symlinks-td1175347.html

1

Использование опции backupcopy может быть лучше, если у вас есть только определенные файлы или каталоги, в которых вы ожидаете найти символические ссылки. Например, я использую ссылки sym для редактирования файлов времени выполнения в моем хранилище исходного кода vim и вижу изменения, отраженные в моем каталоге ~/vimfiles:

" for some reason, backupcopy=auto doesn't work on Windows to keep
" symbolic links. I use these in my vimfiles directory to override some
" runtime files which I really edit in the vim source repository.
autocmd BufWritePre ~/vimfiles/* set backupcopy=yes
autocmd BufWritePost ~/vimfiles/* set backupcopy&

Обратите внимание, что значением по умолчанию для «backupcopy» является SUPPOSED, чтобы сохранять символические ссылки при записи, согласно:help.

См. Http://groups.google.com/group/vim_dev/browse_thread/thread/a85f18df1b543fec.

1

Эта ошибка была исправлена в 7.3.1182. Vim 7.4 - первый выпуск на vim.org, включающий этот патч (выпущен 2013-08-10).

Для поддержки старых версий vim вы можете использовать что-то вроде этого в вашем vimrc:

" Writing files on Windows doesn't preserve file attributes seen via cygwin
" (presumably because the created backup copy didn't inherit them correctly).
if has('win32') && v:version < 704
    set backupcopy=yes
endif

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .