2011-08-29 36 views
6

ほとんどの場合、大文字と小文字を区別するタグが適切であると判断します。私たちが使用する言語のほとんどは大文字と小文字が区別されるため、これが望ましいです。Vimでの大文字と小文字を区別しないタグの検索

しかし、大文字と小文字を区別しない識別子を使用する私の職場にはDSLがあります。私はこのDSL用のタグを生成し、折り畳み式でそれをソートすることもできます(そしてタグファイルに適切なフラグを設定することもできます)。しかし、Vimは識別子で大文字と小文字を区別してマッチングするように見えます。

私が大好きなのは、Vimが「折りたたみケース」のタグファイルを「この言語では大文字と小文字を区別しない」と理解できるかどうかです。そのような設定はありますか?

私は、このファイルタイプのためにignorecaseを有効にすることができます(私はタグファイルを切り替えて、他のいくつかの設定を変更します)。私はちょうどVimに言う方法が大好きだよね、 "ちょっと、これは大文字小文字の区別がないので大丈夫だよ、それについて私に叫ぶ必要はない"一般的には、Vimはタグファイルのソート方法から意図を解釈するだけでよいと思われますが、それは広義の要望ではないかもしれません...

答えて

1

最終的に私はちょうど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の間に6文字のうちの1つですが、C互換識別子で有効な唯一の文字です)。

私は手動で問題のセクションに手を加えて、アンダースコアが手紙の後に現れるようにしました。私は最小のテストケースに取り組み、バグのバグレポートを書いて、タグのドキュメントを見て「適切なリファレンスを引用する」ことにしました。そこには:help tagbsearchの末尾に埋もれていた、すなわち慢性的なdr-ersである私たちにはほとんど使われていなかった。

これが機能するには、大文字にする必要があります。私のPythonスクリプトに

1つのラインの変化は、私のタグファイル固定:

if casefold: 
    tags.sort(key=str.upper) # tag file requires case folding to be folded to upper case 
else: 
    tags.sort() 
1

これは適切な回答ではありませんが、うまくいけば1になる!

詳細をお知らせください。同様に、小さな実例?

ここでは私の試みはありますが、あなたが話していることを説明しているかどうかはわかりません。私もgistに保管しておきます。共同作業をしたい場合は、一緒に答えを見つけることもできます。

タグ:

blah a.txt 1 

A.TXT:

bLah 

Gist of same

手順再現する: "1のタグ1以上の異なるケースでタグを使用して!":

  1. 実行vimの
  2. :tag blah
  3. GETメッセージを行う:set ignorecase
  4. を行います

また、someone asked this question recently on the Vim user mailing listのように見えますが、私は何の反応も見ません。

+0

ええ、これは私の解決策に近づいていますが、私の 'tags'ファイルはタグ付けされたソースファイルと同じです。私。 'tags 'には大文字のLがありますが、私はまだ':tag blah'を実行し、 "different caseでタグを使う"というメッセージを取得します。それは迷惑です。 :) –

2

を私はvimのは比較的新しいんだけど、私は私の.vimrcにこれを追加し、今のところ私のためにうまく動作するようです。

"Tag jumping 

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

nnoremap <C-]> :call TagInsensitiveJump()<CR> 
+1

同じことを達成するために '.vimrc'で':set ignorecase'を使うこともできます。 –

関連する問題