予期しない動作の理由として最も可能性が高いのは、次のとおりです。
- 現在Exuberant Ctagsの最新バージョン 5.8 を使用していませんが、5.6 より前のバージョンを使用しています。
- あなたの
.ctags
ファイルは--langmap=html:+.volt
ファイルの終わりにあり、行末はありません。
以下の全文を読んで、これらの 2 つの理由が原因でコンピューター上でCtagsの予期しない動作が発生したと私が考える理由を確認してください。
最初に、テキスト エディターUltraEditでインストールされたExuberant Ctagsの古いバージョン 5.5.4 を使用して、Windows で問題を調べました。その後、 Exuberant Ctagsプロジェクト ページから直接ダウンロードしたバージョン 5.8 も使用しました。
テスト プロジェクトの親ディレクトリに 1 つの *.html ファイル、サブディレクトリに 3 つの *.html ファイル、さらにサブディレクトリにさらに 2 つの *.html ファイルを含む HTML プロジェクトの 1 つのコピーを作成し、ファイル拡張子を からhtml
に変更しました。volt
このサブディレクトリ内の 3 つの *.html ファイルのうちの 2 つのコピーである両方のファイル。
次に、プロジェクトの親ディレクトリにファイルを作成し、ctags.conf
投稿した数行をこのファイルにコピーしました。--verbose
さらに、これはそのような問題を探すのに役立つので、行の先頭に挿入しました。
最後にctags.exe
、コマンド ラインから簡単に実行できるようにするために、テスト プロジェクト ディレクトリにも (最初は v5.5.4、その後は v5.8) をコピーしました。
テスト プロジェクト ディレクトリでコマンド プロンプト ウィンドウを開き、実行しました
ctags.exe -f test.tag --options=ctags.conf
両方の *.volt ファイルが処理のために開かれ、作成された詳細出力にはtest.tag
、2 つの *.volt ファイルからのすべてのタグも含まれていることが詳細出力で確認できました。これは、*.volt ファイルのコピー元の 2 つの *.html ファイルと同じタグです。前。
では、何が問題になるのでしょうか?
私は HTML に精通しているだけではありません。私の主な仕事は C/C++ でのプログラミングです。したがって、テキスト ファイルの読み込み時に C ソース コード ファイルでよく犯される間違いについて知っています。それは、ファイルの最終行に行末がないテキスト ファイルの誤った処理です。
また、Linux のような一部のテキスト エディターgedit
は、ファイルの最後の行に行末がない場合でも、ファイルの最後の行の下の行の先頭に Ctrl+End のキャレットを配置することを知っています。この場合、キャレットは、ファイルの実際の末尾を超えた次の行から開始するのではなく、テキスト エディターによって最後の行の文字列の末尾に配置する必要があります。私の見解では、この間違った動作により、テキスト エディターのユーザーは、たとえそうでなくても、ファイルの最後の行にもテキスト ファイルの行末があると考えることができます。
--langmap=html:+.volt
したがって、おそらくファイルの最後に行末なしで追加ctags.exe
し、この場合、ソースコードでのテキストファイルの解析がうまく行われていないため、行を評価しないと思いました。ctags.conf
したがって、現在のみを含む最後の行から行終端を削除しました--langmap=html:+.volt
前と同じコマンド ラインとAHAを実行しましたunknown language
。
これは、 Ctags for Windowsのバージョン 5.8 をダウンロードし、それをテスト プロジェクト ディレクトリにコピーして、バージョン 5.5.4 の実行可能ファイルを置き換えたときです。
変更せずにコマンドラインを再度実行しましたctags.conf
。両方の *.volt ファイルがCtagsによって処理されtest.tag
、両方の *.volt ファイルのタグが再び含まれていました。
ファイルの最後の行にctags.conf
再度行末を追加し、コマンド ラインをもう一度実行しても、異なる出力は得られませんでした。そのため、ファイルの最後に行末が存在しない場合にオプション ファイルの最後の行を無視するというこのバグは、バージョン 5.8 のCtagsで修正されました。
Exuberant CtagsのChange Notesでctags-5.6を検索したところ、changes notes ブロックで見つかりました(2006 年 5 月 29 日月曜日)。last
- 最後の改行なしでリスト ファイル (-L) の最後の行を読み取る問題を修正しました。
これは、私が考え、見ることができたことの確認です。もちろん、問題はリスト ファイルの読み取り時だけでなく、オプション ファイルや C および Java ファイルなどの他のテキスト ファイルの読み取り時にも存在し、変更メモの次の行で通知されています。
- 最後の改行がないファイルで発生する可能性があった無限ループを修正 [C, Java]。