Плагин тегов Vim не обнаруживает пользовательский язык (ракетка) - PullRequest
1 голос
/ 26 января 2012

Я недавно начал использовать ракетку, и первое, что я сделал, это попытался заставить плагин vim TagList работать с ним. Тем не менее, это не работает ни в малейшей степени. Я могу открыть файлы ракеток, и окно TagList будет таким же пустым, как если бы я открыл текстовый файл.

В соответствии с расширением * я добавил в свой файл ~ / .vimrc следующее:

let Tlist_Ctags_Cmd = 'ctags --langdef=racket --langmap=racket:.rkt --regex-racket=/^\(def[a-zA-Z0-9\-_\?\/\\]+[ \t]+([a-zA-Z0-9\-_\/\\\?]+)/\1/d,definition/'
let Tlist_racket_settings = 'racket;d:Definition'

Дополнительная информация о ctags также находится в моем файле ~ / .ctags, но TList выкладывал ошибки о том, что моя строка настроек не принесла пользы. Я сделал оригинальную попытку использовать функциональность существующей схемы ctags, но у меня ничего не получилось. Чтобы использовать существующую функциональность схемы, я попробовал следующее в моем ~ / .vimrc

let Tlist_Ctags_Cmd = 'ctags --langmap=scheme:.rkt'
let Tlist_racket_settings = 'racket;f:Functions'

Если у кого-то еще есть идеи о том, как заставить его работать, я был бы чрезвычайно признателен.

Спасибо

  • Я бы также опубликовал ссылку на одну страницу ctags, но она не позволила бы мне (новому пользователю). Ссылку на него можно найти на странице расширенного списка тегов.

РЕДАКТИРОВАТЬ

ctags из командной строки

Я могу использовать ctags из командной строки. При тестировании с помощью строки ctags на странице FAQ TagList я получаю следующее:

 $ cat ~/.ctags
--langdef=racket
--langmap=racket:.rkt
--regex-racket=/^\(def[a-zA-Z0-9\-_\?\/\\]+[ \t]+([a-zA-Z0-9\-_\/\\\?]+)/\1/d,definition/
--regex-racket=/^\(define\-syntax(\-rule)?[ \t]+([a-zA-Z0-9\-_\/\\\?]+)/\2/m,macro/
--regex-racket=/^\(define?[ \t]+(([a-zA-Z0-9\-_\/\\\?]+)[ \t]+\(lambda|\(([a-zA-Z0-9\-_\/\\\?]+))/\2\3/f,function/
$ ctags  -f - --format=2 --excmd=pattern --fields=nks XMMSClient.rkt 
defenum XMMSClient.rkt  /^(define-syntax defenum$/;"    m   line:11
defxmmsc    XMMSClient.rkt  /^(define-syntax defxmmsc$/;"   m   line:20
libxmmsclient   XMMSClient.rkt  /^(define libxmmsclient (ffi-lib "libxmmsclient"))$/;"  d   line:5

Вывод будет таким же, если я приведу определение языка с помощью переключателей или если я изменю язык на схему.

О TagBar

Я не видел TagBar, прежде чем люди предложили это. Интересно, что он просто работал с изменениями в моем файле .ctags. К сожалению, я не нашел настройки для отображения тегов из всех загруженных буферов, как это делает TagList, поэтому я бы предпочел использовать TagList.

Я бы опубликовал изображения для сравнения, но я не думаю, что это позволит мне, как новому участнику. Согласно предложению romainl, я могу установить для типа файла vim схему, и она работает. Однако это похоже только на 80% -ное решение, когда документация по расширяющимся страницам предполагает, что то, что у меня есть, должно работать. Возможно, мне стоит посмотреть на сообщение об ошибке.

Еще раз спасибо,

Ответы [ 2 ]

1 голос
/ 26 апреля 2012

Я боролся с той же проблемой, хотя для файлов xslt ... Мое решение было найдено, покопавшись в taglist.vim, в результате чего я добавил строку для

let s:tlist_def_xslt_settings = 'xslt;f:function:v:variable'

попробуйте сделатьнайдите части кода Vim s: tlist_def_ и вставьте что-то, что выглядит разумным.В Tagbar есть похожий механизм.Я не читал код подробно, поэтому не знаю, зачем это нужно и не использую вывод cta

1 голос
/ 26 января 2012

Вот небольшой фрагмент ракетки, который я взял из официальной документации и сохранил как tt.rkt:

(define (checker p1 p2)
  (let ([p12 (hc-append p1 p2)]
        [p21 (hc-append p2 p1)])
    (vc-append p12 p21)))

Без специфичных для ракетки файлов синтаксиса / отступа ничего не отображается независимо от того, установлено ли ft на racket (конечно) или ничего (по умолчанию). Если я :set ft=scheme, то и TagList, и TagBar перечисляют checker как "функцию".

Слева направо: файл, TagBar, TagList.

TagList and TagBar against a racket file

Из того, что я понимаю, "Ракетка" - это ребрендинг некоторой производной Схемы. Если это не слишком сильно отклоняется от нормы, добавление этой строки в ~/.vimrc может помочь:

autocmd BufRead,BufNewFile *.rkt set filetype=scheme
...