Vim插件中的变量

du7egjpx  于 2023-06-30  发布在  其他
关注(0)|答案(1)|浏览(112)

我写了一个vim插件来学习一些vimscript。我在/autoload/plugin.vim中设置变量如下:

let g:configpath = '~/home/username/.vim/bundle/testplugin/templates/'
let g:config = '/config.h'

然后我想在一个函数中使用它:

function! testplugin#template(...)
    :e g:configpath  . a:1 . g:config   
endfunction

目标是打开此路径后面的文件。a:1 是用户给定的输入,因为子文件夹可由用户选择。
当我使用echo g:configpath . a:1 . g:config时,正确的路径将被打印到Vim,但当我使用:e打开文件时,Vim打开一个新文件,其名称为:

"g:configpath . a:1 . g:config" [New]

如何打开此路径后面的模板文件?

owfi6suc

owfi6suc1#

:help :echo:help :edit_f处理参数的方式不同。
前者需要一个表达式,该表达式在运行时进行计算以生成将被回显的文本:

:let $FOO = 'foo'
:let g:bar = 'bar'
:echo $FOO .. g:bar .. 'baz' .. eval('1+2')
foobarbaz3

后者也做一些评估,但仅限于扩展环境变量和:help cmdline-special下记录的项目。最值得注意的是,它不能进行连接:

:let $DIR = '/path/to/dir'
:edit $DIR/filename
:edit %<.stories.ts

如果您想以编程方式构建文件名,您有两个选择。

  • 使用:help :execute
:let filename = '/path/to/filename'
:execute 'edit ' .. filename
:execute 'edit ' .. <some expression that evaluates to a filename>
  • 使用环境变量:
:let $FILENAME = '/path/to/filename'
:edit $FILENAME

顺便说一句,自动加载的脚本似乎不是定义全局选项的正确位置。它们通常在plugin/foo.vim中定义。

相关问题