Vim: источник на основе строки - PullRequest
17 голосов
/ 08 мая 2009

Я не могу найти ответ на этот вопрос ни в одном из многочисленных онлайн-учебников по Vim-скриптингу. Я хочу создать имя файла скрипта из переменных среды и затем создать его. И я хочу сделать это в Vim.

Если бы я делал это в оболочке, я бы сделал что-то вроде этого:

source ${HOME}/.vim/myscript_${FOO}.vim

Как мне это сделать в Vim?

Ответы [ 2 ]

36 голосов
/ 08 мая 2009

Вы можете создать строку и затем использовать команду execute:

exec "source " . $HOME . "/.vim/myscript_" . l:foo . ".vim"

(Здесь l:foo является примером использования локальной переменной из функции.)


Edit:

Но на самом деле exec излишне в этом конкретном случае. Как показывает rampion , задачу OP можно выполнить напрямую с помощью:

source $HOME/.vim/myscript_$FOO.vim

Хотя vim не позволяет нам аккуратно оборачивать имена переменных в ${...}, как в оболочке, в этом случае нам повезло, что HOME завершается / и FOO .

Как правило, exec потребуется , если вы хотите следовать за одной из переменных не заканчивающимся символом. Например:

exec "source " . $BAR . "_script.vim"

вставит переменную BAR, в то время как следующее попытается найти переменную с именем BAR_script:

source $BAR_script.vim       " Possibly not what you wanted!
4 голосов
/ 08 мая 2009

Просто :source у меня работает:

% export MYPATH='a/b/c'
% mkdir -p $MYPATH
% export MYFILE='temp.vim'
% cat > $MYPATH/$MYFILE
echo 'hello world'
^D
% vim
:source $MYPATH/$MYFILE
hello world

Если вы хотите автоматически получать некоторые сценарии vim, просто вставьте их в каталог ~/.vim/plugin/, и они будут загружены для вас без необходимости делать это вручную.

С :help expand-environment-var (который я получил, выполнив :help environment и завершив табуляцию с первым вероятным результатом)

             *:set_env* *expand-env* *expand-environment-var*
    Environment variables in specific string options will be expanded.  If the
    environment variable exists the '$' and the following environment variable
    name is replaced with its value.  If it does not exist the '$' and the name
    are not modified.  Any non-id character (not a letter, digit or '_') may
    follow the environment variable name.  That character and what follows is
    appended to the value of the environment variable.  Examples: >
       :set term=$TERM.new
       :set path=/usr/$INCLUDE,$HOME/include,.
    When adding or removing a string from an option with ":set opt-=val" or ":set
    opt+=val" the expansion is done before the adding or removing.

Мне кажется, что встроенная справка vim более полезна, чем что-либо еще, но для того, чтобы понять, что искать, требуется время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...