How to get path to the current vimscript being executed

后端 未结 3 1791
无人及你
无人及你 2020-12-02 08:33

In my vim plugin, I have two files:

myplugin/plugin.vim
myplugin/plugin_helpers.py

I would like to import plugin_helpers from plugin.vim (u

相关标签:
3条回答
  • 2020-12-02 09:05
    " Relative path of script file:
    let s:path = expand('<sfile>')
    
    " Absolute path of script file:
    let s:path = expand('<sfile>:p')
    
    " Absolute path of script file with symbolic links resolved:
    let s:path = resolve(expand('<sfile>:p'))
    
    " Folder in which script resides: (not safe for symlinks)
    let s:path = expand('<sfile>:p:h')
    
    " If you're using a symlink to your script, but your resources are in
    " the same directory as the actual script, you'll need to do this:
    "   1: Get the absolute path of the script
    "   2: Resolve all symbolic links
    "   3: Get the folder of the resolved absolute file
    let s:path = fnamemodify(resolve(expand('<sfile>:p')), ':h')
    

    I use that last one often because my ~/.vimrc is a symbolic link to a script in a git repository.

    0 讨论(0)
  • 2020-12-02 09:23

    Found it:

    let s:current_file=expand("<sfile>")
    
    0 讨论(0)
  • 2020-12-02 09:25

    It is worth mentioning that the above solution will only work outside of a function.

    This will not give the desired result:

    function! MyFunction()
    let s:current_file=expand('<sfile>:p:h')
    echom s:current_file
    endfunction
    

    But this will:

    let s:current_file=expand('<sfile>')
    function! MyFunction()
    echom s:current_file
    endfunction
    

    Here's a full solution to OP's original question:

    let s:path = expand('<sfile>:p:h')
    
    function! MyPythonFunction()
    import sys
    import os
    script_path = vim.eval('s:path')
    
    lib_path = os.path.join(script_path, '.') 
    sys.path.insert(0, lib_path)                                       
    
    import vim
    import plugin_helpers
    plugin_helpers.do_some_cool_stuff_here()
    vim.command("badd %(result)s" % {'result':plugin_helpers.get_result()})
    
    EOF
    endfunction
    
    0 讨论(0)
提交回复
热议问题