Теги Vim с именами файлов, содержащими $


Когда у меня есть запись ctags, которая находится в имени файла, содержащем $, например foo/bar/File$With$Dollars.ext vim не откроет этот файл, а вместо этого попытается открыть foo/bar/Baz.ext. Я попытался сделать так, чтобы выходной тег filename экранировал $ с помощью $ - Как вы сделали бы, открыв этот файл с помощью :e foo/bar/File$With$Dollars.ext - но это тоже не сработало.

Конкретно, скажем, у меня есть следующий тег:

fooFunction     foo/bar/File$With$Dollars.ext   23;"    f

Как я могу заставить vim понять, что $ является частью имени файла, когда это имя файла предоставляется тегами ctags файл?

1 2

1 ответ:

Я не очень хорошо разбираюсь в vimscript, но в итоге я сделал следующее:

function SmaliFileFixTagFileName()
    let fname = expand("<afile>")
    let delbuf = 0
    if (stridx(fname, "$") != -1 )
        if (stridx(fname, "\\$") == -1)
            let fname = escape(fname, "$")
        else
            let delbuf = 1
        endif
    endif
    exe "silent doau BufReadPre " . fname | exe "edit " . fname | exe "silent doau BufReadPost " . fname
    if (delbuf == 1)
        exe "bd " . escape(escape(fname, "\\"), "$")
    endif
endfunction

augroup tagfix
    au!
    au BufReadCmd *.smali call SmaliFileFixTagFileName()
augroup end

И обеспечение того, чтобы теги были сгенерированы с именами файлов, экранирующими $ как \$.

Это работает для того, что мне нужно. Я оставлю это открытым на некоторое время, на случай, если у кого-то есть лучшее решение.