Можно ли использовать разные файлы тегов для полного и общего просмотра тегов в Vim?

Я использую ctags в Vim уже много лет, но только что открыл для себя omnicomplete. (Это выглядит неплохо.)

Однако у меня есть проблема: чтобы заставить omnicomplete работать правильно, я должен использовать параметр --extra=+q при создании тегов, что нормально, но это меняет поведение общего просмотра тегов так, как мне не нравится. .

Например, при завершении табуляции имен тегов в Vim я не хочу помечать «в» «иерархию» классов, то есть при завершении табуляции «Clas» получается «ClassA, ClassA::var1, ClassA::var2 , ClassB" вместо "ClassA, ClassB" - но это то, что происходит при использовании --extra=+q.

Так что я предполагаю, что я после одной из двух вещей. Либо: 1. Возможность отключить заполнение табуляции в «иерархиях тегов», даже если эти иерархии существуют в файле тегов. Или 2. Возможность использовать файлы тегов с разными именами (т. е. сгенерированные с разными параметрами) для всестороннего и общего просмотра тегов.

Любые идеи будут высоко оценены!

Ваше здоровье,

думал.


person thoughton    schedule 11.02.2010    source источник


Ответы (2)


Хорошо, я думаю, что на самом деле придумал ответ на свой вопрос.

Во-первых, я создаю два файла тегов: tags_c_vim и tags_c_omni.

В моем _vimrc у меня есть:

let tags_vim='tags_c_vim'
let tags_omni='tags_c_omni'

exe "set tags=".tags_vim

настроить некоторые переменные, указывающие на разные файлы тегов, и установить теги «vim» в качестве тегов по умолчанию.

Тогда у меня тоже есть это, опять же в _vimrc:

imap <F8> <ESC>:exe "set tags=".tags_omni<CR>a<C-X><C-O>
autocmd InsertLeave * if pumvisible() == 0|exe "set tags=".tags_vim|endif

первая строка здесь отображает F8, поэтому она изменяет настройку тегов, чтобы она указывала на теги «omni», прежде чем вызывать всплывающее меню omnicomplete, а вторая строка сбрасывает настройку тегов на теги «vim», когда режим вставки остается следующим после всплывающее окно закрылось.

Потребуется широкое использование, чтобы убедиться, что он достаточно надежен, но, похоже, он работает после небольшого тестирования.

Два улучшения, которые я все еще хотел бы сделать:

  1. Сопоставьте настройку тегов «omni» с командой omnicomplete C-X, C-O вместо нового сопоставления F8. (Я думаю, мне нужно установить теги, а затем вызвать omni#cpp#maycomplete#Complete(), но я не мог понять, как это сделать)
  2. Подключите сброс тегов «vim» либо к завершению omnicomplete, либо к закрытию всплывающего меню.

В любом случае, я просто подумал, что могу поделиться.

Ваше здоровье,

думал.

person thoughton    schedule 12.02.2010

Вы можете попробовать плагин OmniCppComplete.

person m42a    schedule 11.02.2010
comment
Возможно, я не совсем ясно выразился в своем первоначальном сообщении, но это плагин OmniCppComplete, который я уже использую. Я просмотрел справку, чтобы узнать, есть ли поддержка того, что мне нужно, но я ничего не могу найти. Знаете ли вы что-нибудь другое? - person thoughton; 12.02.2010
comment
Это происходит, когда я его использую. Убедитесь, что вы завершаете с помощью ‹C-x›‹C-o›, а не ‹C-n› или ‹C-x›‹C-n› или ‹C-x›‹C-]›. У меня также установлены следующие параметры: let OmniCpp_MayCompleteScope = 1 let OmniCpp_ShowScopeInAbbr = 1 let OmniCpp_ShowPrototypeInAbbr = 1 Но это ничего не должно изменить. - person m42a; 14.02.2010