Поиск тега без учета регистра в Vim - PullRequest
6 голосов
/ 29 августа 2011

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 06 ноября 2012

В конечном итоге я только что решил 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, т. Е. Малопригоден для тех из нас, кто хронически больной.

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

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

if casefold:
    tags.sort(key=str.upper)  # tag file requires case folding to be folded to upper case
else:
    tags.sort()
2 голосов
/ 25 июня 2013

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

"Tag jumping

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

nnoremap <C-]> :call TagInsensitiveJump()<CR>
1 голос
/ 30 августа 2011

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

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

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

теги:

blah    a.txt   1

a.txt:

bLah

Суть того же .

Шаги для воспроизведения:

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

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

...