Поиск тегов без учета регистра в Vim

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

Однако у меня на рабочем месте есть DSL, который использует идентификаторы без учета регистра. Я генерирую теги для этого DSL и могу даже отсортировать его по foldcase (и установить соответствующий флаг в файле тегов), но Vim по-прежнему выполняет сопоставление идентификаторов с учетом регистра.

Мне бы очень хотелось, чтобы Vim мог понимать файл тегов «свернутый регистр» как «этот язык нечувствителен к регистру». Есть ли такая настройка?

Я полагаю, что мог бы включить ignorecase для этого типа файла (я все равно выключаю файл тегов и меняю несколько других настроек), но затем Vim лает на меня, когда регистр не соответствует. Я просто хотел бы сказать Виму: «Эй, это не чувствительно к регистру, так что все в порядке, тебе не нужно кричать на меня по этому поводу». Как правило, мне кажется желательным, чтобы Vim мог просто интерпретировать намерение по способу сортировки файла тегов, но, возможно, это не широко распространенное желание...


person dash-tom-bang    schedule 29.08.2011    source источник


Ответы (3)


В конце концов я просто сделал ignorecase решение. У меня есть это в моем vimrc:

autocmd BufEnter  *                 setlocal noignorecase
autocmd BufEnter  *.{dsl-a,dsl-b*}  setlocal ignorecase

Раздражает, но проблема решена; Я надеялся, что Vim заметит заголовок в файле тегов:

!_TAG_FILE_SORTED   2   /0=unsorted, 1=sorted, 2=foldcase/

Увы, оказывается, что нет.


На днях я столкнулся с проблемой, которая содержит дополнительную документацию для масс; некоторые из тегов, которые я искал, не были найдены, но когда я просмотрел файл тегов, они были там. Затем я заметил, что над пропущенным элементом были строки с теми же ведущими символами, но с подчеркиванием; Я понял, что символ подчеркивания сортировался перед буквами, и подумал, не может ли это быть проблемой (подчеркивание — это один из шести символов, которые появляются между заглавной Z и строчной буквой A, но единственный, который допустим в идентификаторе, совместимом с C).

Для хихиканья я вручную прибегнул к проблемному разделу, чтобы после букв появились символы подчеркивания. Я даже разработал минимальный тестовый пример и написал большой отчет об ошибке для bugs@vim, а затем решил посмотреть документацию по тегам, чтобы «процитировать соответствующую ссылку». Там он был похоронен в конце :help tagbsearch года, т. е. малопригоден для тех из нас, кто является хроническим tl;dr-ers.

Обратите внимание, что для этого регистр должен быть преобразован в верхний.

Однострочное изменение в моем скрипте Python исправило мой файл тегов:

if casefold:
    tags.sort(key=str.upper)  # tag file requires case folding to be folded to upper case
else:
    tags.sort()
person dash-tom-bang    schedule 05.11.2012

Я относительно новичок в vim, но я добавил его в свой .vimrc, и, похоже, пока он работает хорошо.

"Tag jumping

function! TagInsensitiveJump()
  execute ":tj /\\c" . expand("<cword>") 
endfunction

nnoremap <C-]> :call TagInsensitiveJump()<CR>
person Thomas Millar    schedule 25.06.2013
comment
Вы также можете просто :set ignorecase в своем .vimrc добиться того же. - person dash-tom-bang; 08.01.2014

Это не подходящий ответ, но, надеюсь, он им станет!

Вы предоставите более подробную информацию? Например, небольшой рабочий пример?

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

теги:

blah    a.txt   1

а.тхт:

bLah

Суть того же.

Действия по воспроизведению:

  1. запустить вим
  2. do :set ignorecase
  3. do :tag blah
  4. получить сообщение: "тег 1 из 1 или более, используя тег с другим регистром!"

Кроме того, похоже, кто-то недавно задал этот вопрос в списке рассылки пользователей Vim, но Я не вижу ответов.

person Adam Monsen    schedule 30.08.2011
comment
Да, это настолько близко, насколько я подошел к решению, хотя мой файл tags имеет тот же регистр, что и исходный файл, в котором он помечен. т.е. tags имеет заглавную букву L, но я все еще делаю :tag blah и получаю тег using с другим сообщением о регистре. Это раздражает. :) - person dash-tom-bang; 05.09.2011