1

В моем .vimrc я определил следующую переменную:

let $VIMFILES = "~/.vim"

Далее в моем .vimrc я пытаюсь установить опцию backupdir следующим образом:

set backupdir=$VIMFILES/backup
" `set backupdir?` will return: backupdir=~/.vim/backup

Однако это не работает. Попытка :w файла потерпит неудачу и вернет следующее:

"foo" E510: Can't make backup file (add ! to override)

Как ни странно, установка backupdir с помощью следующего метода работает просто отлично ...

exec "set backupdir=" . $VIMFILES . "/backup"
" Like the first method, `set backupdir?` will
" also return: backupdir=~/.vim/backup

Может кто-нибудь пролить свет на то, почему первый метод дает сбой, а второй работает, несмотря на то, что backupdir имеет желаемое значение в обоих случаях? Использую ли я какие-либо неподходящие методы, и если да, что я должен использовать вместо этого?

1 ответ1

2

Я могу воспроизвести это, и действительно, это выглядит довольно загадочно. Одна хитрость в том, что :set backupdir? не обязательно печатать фактическое значение опции; он выполняет некоторые преобразования, поэтому то, что вы видите, не всегда используется.

Я думаю, что проблема заключается в использовании ~/ в переменной $VIMFILES . Когда вы напрямую :set опцию (как эмулируется последней попыткой :execute ), Vim, кажется, автоматически расширяет ее. Но когда вы присваиваете это переменной среды, она сохраняется дословно, и из-за отсутствия раскрытия происходит сбой :write . Обратите внимание, что вывод идентичен, потому что Vim, по-видимому, автоматически переводит /home/username обратно в ~ в выводе.

Я бы решил это путем явного расширения значения переменной:

let $VIMFILES = expand("~/.vim")

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