Использование SpaceVim на neovim и MacVim и не может найти местоположение скрипта плагина - PullRequest
0 голосов
/ 13 ноября 2018

Я перепробовал все решения /3675735/kak-poluchit-put-k-tekuschemu-ispolnyaemomu-vimscript, которые были опубликованы 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

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

1 Ответ

0 голосов
/ 13 ноября 2018

Чтобы расширение <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
...