Использование SpaceVim на neovim и MacVim и не может найти местоположение скрипта плагина

Я перепробовал все решения https://stackru.com/questions/4976776/how-to-get-path-to-the-current-vimscript-being-executed/53274039#53274039, которые были размещены 7 лет назад, и ни один из них не является у меня работает в нынешнем (2018) MacVim (8.1) или neovim (0.3.1). Поскольку мой вопрос там постоянно удаляется, я решил задать новый вопрос.

Что-то изменилось в Vim с момента последнего ответа 7 лет назад? Все эти решения дают мне текущее местоположение файла, а не местоположение скрипта. SpaceVim влияет на работу этих функций?

Это код, который я пытаюсь исправить:

function! TeaCodeExpand()
    <<some code>>
    echom fnamemodify(resolve(expand('<sfile>:p')), ':h')
    <<other code>>
endfunction

У меня есть echom, чтобы показать путь, который должен быть текущий файл сценария, но он всегда возвращает текущий отредактированный файл. Следующая строка - выполнить AppleScript в каталоге над файлом vimscript. Я могу жестко закодировать путь, и все работает отлично. Но я не могу заставить его работать как есть. Полный код здесь: github.com/raguay/TeaCode-Vim-Extension

1 ответ

Решение

Иметь <sfile> Разверните файл в соответствии со спецификацией плагина, расширение должно происходить при получении скрипта. Увидеть :help :<sfile>:

  <sfile>    When executing a ":source" command, is replaced with the
             file name of the sourced file.
             When executing a function, is replaced with:
             "function {function-name}[{lnum}]"

Если вам понадобится спецификация файла позже в функции, вам нужно сохранить ее в переменной (script-local) и ссылаться на нее из функции:

let s:scriptPath = fnamemodify(resolve(expand('<sfile>:p')), ':h')
function! TeaCodeExpand()
    <<some code>>
    echom s:scriptPath
    <<other code>>
endfunction
Другие вопросы по тегам