I'm trying to integrate opam-user-setup's output with vim-plug. I've produced the following:

let s:opam_share_dir = system("opam config var share")
let s:opam_share_dir = substitute(s:opam_share_dir, '[\r\n]*$', '', '')

let s:opam_configuration = {}

function! OpamConfOcpIndent()
   Plug s:opam_share_dir . "/ocp-indent/vim"
let s:opam_configuration['ocp-indent'] = function('OpamConfOcpIndent')

function! OpamConfOcpIndex()
   Plug s:opam_share_dir . "/ocp-index/vim"
let s:opam_configuration['ocp-index'] = function('OpamConfOcpIndex')

function! OpamConfMerlin()
   Plug s:opam_share_dir . "/merlin/vim"
let s:opam_configuration['merlin'] = function('OpamConfMerlin')

let s:opam_packages = ["ocp-indent", "ocp-index", "merlin"]
let s:opam_check_cmdline = ["opam list --installed --short --safe --color=never"] + s:opam_packages
let s:opam_available_tools = split(system(join(s:opam_check_cmdline)))
for tool in s:opam_packages
   " Respect package order (merlin should be after ocp-index)
   if count(s:opam_available_tools, tool) > 0
      call s:opam_configuration[tool]()

However, the Plug s:opam_share_dir . "/ocp-indent/vim"-style lines explode with this error:

Error detected while processing function OpamConfOcpIndent:
line    1:
E121: Undefined variable: s:opam_share_dir
E116: Invalid arguments for function plug#

However, if I add echo s:opam_share_dir immediately before the Plug s:opam_share_dir ... line, it works just fine — the variable is definitely defined. What am I doing wrong?

tl;dr I can't figure out how to pass a variable to a custom command, in a vim-script.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.