Я пишу плагин для vimscript и хочу перейти к определениям функций с помощью тегов.Я установил ctags, настроил параметр vim set tags=./tags;
в .vimrc и сделал файл тегов с ctags -R
в каталоге скриптов.В моем скрипте у меня есть функция:
func s:OnWipeoutEvent()
" ...
endfunc
И команда:
command! -bar -nargs=* -complete=file -bang TermdebugEasymaps
\ call s:StartDebug(<bang>0, <f-args>)
Когда я пытаюсь перейти к определению моей функции (OnWipeoutEvent()
) с помощью Ctrl-] vim говорит: E257: ctag: tag not found.
Так что это не работает для определения функций, но работает для определений команд vim.Я могу перейти к команде с помощью Ctrl-].Зачем?Как я могу решить эту проблему?
UPD: я думаю, что такое поведение является результатом префикса s:
в s:OnWipeoutEvent()
имени функции.Потому что я могу перейти к определению функции при вводе tag s:OnWipeoutEvent
в командной строке vim.Может быть Ctrl-] использовать имя функции без этого префикса.Есть идеи, как это решить?
UPD2: Попытайтесь прояснить вопрос.Часть моего скрипта vim ниже:
func s:OnWipeoutEvent()
"...
endfunc
augroup termdebug-easymaps
autocmd BufWipeout * call s:OnWipeoutEvent()
augroup END
command! -bar -nargs=* -complete=file -bang TermdebugEasymaps
\ call s:StartDebug(<bang>0, <f-args>)
файл тегов:
TermdebugEasymaps termdebug-easymaps.vim /^command! -bar -nargs=* -complete=file -bang TermdebugEasymaps$/;" c
TermdebugEasymapsCommand termdebug-easymaps.vim /^command! -bar -nargs=* -complete=file -bang TermdebugEasymapsCommand$/;" c
TermdebugEasymapsStop termdebug-easymaps.vim /^command! -bar TermdebugEasymapsStop call s:Stop_termdebug()$/;" c
s:CloseBuffers termdebug-easymaps.vim /^func s:CloseBuffers()$/;" f
s:CommOutput termdebug-easymaps.vim /^func s:CommOutput(out, msg)$/;" f
s:CreateCommWin termdebug-easymaps.vim /^func s:CreateCommWin()$/;" f
s:DecodeMessage termdebug-easymaps.vim /^func s:DecodeMessage(quotedText)$/;" f
s:GetCurrentSourceFullname termdebug-easymaps.vim /^func s:GetCurrentSourceFullname()$/;" f
s:GetFullname termdebug-easymaps.vim /^func s:GetFullname(msg)$/;" f
s:GetOpenedList termdebug-easymaps.vim /^func s:GetOpenedList()$/;" f
s:GoToDebugWindow termdebug-easymaps.vim /^func s:GoToDebugWindow()$/;" f
s:MapsCurrentBuffer termdebug-easymaps.vim /^func s:MapsCurrentBuffer()$/;" f
s:OnWipeoutEvent termdebug-easymaps.vim /^func s:OnWipeoutEvent()$/;" f
s:ProgramRunState termdebug-easymaps.vim /^func s:ProgramRunState()$/;" f
s:RestoreBuffersState termdebug-easymaps.vim /^func s:RestoreBuffersState()$/;" f
s:SaveCurrentBufferState termdebug-easymaps.vim /^func s:SaveCurrentBufferState()$/;" f
s:SetRunMapForCurrent termdebug-easymaps.vim /^func s:SetRunMapForCurrent()$/;" f
s:SetRunMapsForOpened termdebug-easymaps.vim /^func s:SetRunMapsForOpened()$/;" f
s:SetRunMapsForTreated termdebug-easymaps.vim /^func s:SetRunMapsForTreated()$/;" f
s:StartDebug termdebug-easymaps.vim /^func s:StartDebug(bang, ...) $/;" f
s:StartDebugCommand termdebug-easymaps.vim /^func s:StartDebugCommand(bang, ...)$/;" f
s:StartDebug_internal termdebug-easymaps.vim /^func s:StartDebug_internal(command_mode, args, bang)$/;" f
s:StopTermdebug termdebug-easymaps.vim /^func s:StopTermdebug()$/;" f
s:TerminateProgram termdebug-easymaps.vim /^func s:TerminateProgram()$/;" f
s:TreatOpened termdebug-easymaps.vim /^func s:TreatOpened()$/;" f
s:comm_timeout termdebug-easymaps.vim /^let s:comm_timeout = 5000$/;" v
s:commflags termdebug-easymaps.vim /^let s:commflags = { 'current_source': 0, 'all_sources': 0, 'program_run': 0 }$/;" v
s:sleeptime termdebug-easymaps.vim /^let s:sleeptime = 10$/;" v
termdebug termdebug-easymaps.vim /^augroup termdebug-easymaps$/;" a