Vim:基于字符串的寻源
在众多的Vim脚本在线教程中,我似乎找不到这个问题的答案。我要做的是从环境变量构造脚本的文件名,然后将其作为源代码。我想用Vim来做 如果我在壳里做,我会做这样的事情:Vim:基于字符串的寻源,vim,Vim,在众多的Vim脚本在线教程中,我似乎找不到这个问题的答案。我要做的是从环境变量构造脚本的文件名,然后将其作为源代码。我想用Vim来做 如果我在壳里做,我会做这样的事情: source ${HOME}/.vim/myscript_${FOO}.vim 如何在Vim中执行此操作?您可以构建一个字符串,然后使用execute命令: exec“源代码”$家。“/.vim/myscript”。l:福。“.vim” (这里的l:foo是在函数中使用局部变量的示例。) 编辑: 但事实上,在这种特殊情况下
source ${HOME}/.vim/myscript_${FOO}.vim
如何在Vim中执行此操作?您可以构建一个字符串,然后使用execute命令:
exec“源代码”$家。“/.vim/myscript”。l:福。“.vim”
(这里的l:foo
是在函数中使用局部变量的示例。)
编辑: 但事实上,在这种特殊情况下,
exec
是过分的。作为rampion,OPs任务可通过以下方式直接完成:
source $HOME/.vim/myscript_$FOO.vim
虽然vim不允许我们像在shell中一样将变量名整齐地包装在${…}
中,但在这种情况下,我们很幸运HOME
被/
终止,而FOO
被终止
一般来说,如果要在其中一个变量后面加一个非终止字符,则需要执行exec
。例如:
exec“源代码”$酒吧。“_script.vim”
将插入BAR
变量,而下面将尝试查找名为BAR\u script
的变量:
source $BAR_script.vim " Possibly not what you wanted!
为了安全起见,请使用shellescape()
在向要执行的字符串添加变量时,我们应该真正使用shellescape()
来转义奇怪的字符(例如文件名中的空格)
例如,这些是上述的更安全版本:
exec "source " . shellescape($HOME . "/.vim/myscript_" . l:foo) . ".vim"
exec "source " . shellescape($BAR) . "_script.vim"
只是: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
和制表符完成到第一个可能的结果得到的)
*:设置环境**扩展环境**扩展环境变量*
将展开特定字符串选项中的环境变量。如果
存在环境变量“$”和以下环境变量
名称将替换为其值。如果不存在“$”和名称
没有修改。可以使用任何非id字符(不是字母、数字或“"”)
跟随环境变量名。这个角色和接下来的是什么
附加到环境变量的值。示例:>
:set term=$term.new
:set path=/usr/$INCLUDE,$HOME/INCLUDE,。
使用“:set opt-=val”或“:set”从选项中添加或删除字符串时
opt+=val“扩展在添加或删除之前完成。
我倾向于发现vim的内置帮助比其他任何东西都更有用,但要知道要查找什么确实需要一段时间。是的,我知道这是可行的,但您的脚本路径在一个非常具体的方面有所不同;您不需要将任何内容连接到环境变量!(+1)虽然马格纳斯最初说的是“环境变量”,但我认为他的意思是“vim变量”。rampion的解决方案在环境变量和连接方面确实适用于我:source$HOME/.vim/myscript_$FOO.vim如果你想偷偷摸摸的话,你可以将vim变量存储在环境变量中。
*: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.