Использование 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