У меня нет компьютера с Windows, но я смог воспроизвести и изолировать эту проблему в системе Mac OS X 10.6.
Либо создайте C:\TMP
или C:\TEMP
(:help 'directory'
говорит, что оба имеют значение по умолчанию опции directory
в сборках Windows Vim), либо добавьте существующий каталог со значением опции directory
.
Я использую временный каталог, специфичный для Vim, в своем домашнем каталоге (опять же, здесь нет Windows) и добавляю две конечные косые черты (~/tmp/.vim-swaps//
). Этот тип настройки централизует файлы подкачки, но дает им уникальные имена на основе каталогов редактируемых файлов. См. «Преимущества» и «Недостатки» в :help :swapname
, а также
Бит «если каталог заканчивается двумя разделителями пути» в :help 'directory'
.
Используйте ^=
для добавления 1 вашего каталога (чтобы он всегда использовался, если он существует):
set directory^=C:\\some\\existing\\directory//
Или используйте +=
, чтобы добавить свой каталог (чтобы он использовался только в том случае, если он существует и других применимых записей directory
не существует):
set directory+=C:\\some\\existing\\directory//
Ответ Чарльза предполагает, что $TMP
(ссылка на переменную среды) может быть хорошим значением для Windows:
set directory+=$TMP//
Основная причина связана со значением по умолчанию опции directory
в сочетании с путем к псевдо-файлу индекса :Gdiff
.
В буфере для индексной части представления :Gdiff
используется специальный путь, который выглядит как fugitive:///path/to/repository/.git//0/path/to/file/under/repository
(беглец захватывает операции чтения и записи в так называемые буферы и перенаправляет их в индекс, вызывая команды Git «plumbing»).
Первая запись в directory
обычно .
. Это означает, что Vim попытается поместить файл подкачки в тот же каталог, что и отредактированный файл (т. Е. foo/bar.txt
попытается использовать foo/.bar.swp
). Если этот предпочтительный файл подкачки не может быть создан, то будут испробованы последующие записи из directory
.
С .
в качестве первого directory
предпочтительный файл подкачки для fugitive:///path/to/repository/.git//0/path/to/file/under/repository
будет fugitive:///path/to/repository/.git//0/path/to/file/under/.repository.swp
. Основные компоненты этого пути (fugitive:
, path
, to
и т. Д.), Вероятно, не существуют, поэтому Vim перейдет к следующей записи от directory
. Если ни одна из других записей directory
не может использоваться для создания файлов подкачки (например, они не существуют), вы получите ошибку E302.
Мне удалось воспроизвести вашу проблему в системе Unix-y, используя set directory=.,~/no-such-dir,/var/no-such-dir,/no-such-dir
(т.е. принимая значение Unix по умолчанию и меняя вхождения от tmp
до no-such-dir
). Ни один из каталогов «no-such-dir» фактически не существовал. Я получаю ту же ошибку при использовании :Gdiff
.
1
:help :set^=
только говорит «добавить», но код показывает, что set listopt^=…
зависит от того, как добавляется set listopt+=…
(как это задокументировано для последнего). Оба должны автоматически вставлять запятые по мере необходимости (хотя в этой области могли быть ошибки).