Как правильно использовать неопределенные переменные окружения в .vimrc? - PullRequest
4 голосов
/ 29 февраля 2012

Я хотел бы открыть NERDTree при запуске vim с определенным корневым каталогом в зависимости от переменной среды.

Заданные переменные среды будут правильно расширены, например $HOME.Документация гласит, что неопределенные переменные будут расширены до пустой строки .

Так что эта корректно работает с NERD_TREE_ROOT, установленным в существующий каталог.Но не будет, если он не определен.Вместо этого $NERD_TREE_ROOT будет использоваться как строка.

autocmd VimEnter * NERDTree $HOME/$NERD_TREE_ROOT

Как правильно использовать неопределенные переменные среды в качестве пустой строки?

РЕДАКТИРОВАТЬ: Для пояснения.Вот чего я хотел избежать:

if empty($NERD_TREE_ROOT)
    autocmd VimEnter * NERDTree $HOME
else
    autocmd VimEnter * NERDTree $HOME/$NERD_TREE_ROOT
endif

Если это невозможно, то все равно будет.

Ответы [ 2 ]

5 голосов
/ 04 марта 2012

То, что вы наблюдаете, не имеет ничего общего с eval или выражениями: echo eval('$HOME/$NERD_TREE_ROOT') приводит к -2147483648 так же, как echo 0/0, потому что обе переменные при выполнении числовой операции оказываются нулями.Расширение $HOME выполняется vim из-за присутствия -complete=dir в определении команды :NERDTree.Это довольно неожиданно и, кстати, является третьим типом расширения: :echo expand('$HOME/$NERD_TREE_ROOT') приводит к $HOME/$NERD_TREE_ROOT, тогда как :echo expand('$HOME/$HOME') приводит к /home/zyx//home/zyx.Я не вижу способа исправить это, но вы всегда можете сделать

execute 'autocmd VimEnter * NERDTree '.fnameescape($HOME.'/'.$NERD_TREE_ROOT)

.Это единственный случай, когда расширение работает, как описано в документе, потому что это единственный способ, когда есть какие-либо выражения.

5 голосов
/ 29 февраля 2012

Проверьте, пусто ли оно до autocmd:

if !empty($NERD_TREE_ROOT)
    autocmd VimEnter * NERDTree $HOME/$NERD_TREE_ROOT
endif
...