vim自動更新tag

2385 ワード

vimでC/C++コードをブラウズするときにctagsでtagファイルを生成することができ、関数定義の場所に簡単にジャンプすることができます.この機能はほとんどのグラフィックインタフェースエディタにあります.例えばVS、source insightなどですが、vimのtagsファイルは静的です.つまり、ソースコードに関数を追加した場合、元のtagsは自動的に更新されません.新しい関数定義にジャンプすることもできません.この問題はどうすればいいですか.
私はネット上で多くの場所を検索して、普遍的に与えた方案はctagsコマンドを1つのショートカットキーにマッピングして、このようにショートカットキーを押すだけで新しいtagsファイルを生成することができて、しかしこのようにいくつかの不便な場所があります
  • tagsファイルは毎回全量生成され、工事が大きい場合、tagsファイルを生成するのに10秒以上かかる可能性がありますが、コマンドを実行する過程でファイルを編集することはできません.また、ファイルを修正するたびにtags
  • を更新することはできません.
  • vimでctagsコマンドを実行するには、コマンドモードで!ctags -R .を入力します.vimの作業ディレクトリの下でtagsファイルを生成します.現在の作業ディレクトリがtagsを生成したいディレクトリではない場合は、ディレクトリ
  • を切り替える必要があります.
    とにかく、tagsを自動的に更新したいのですが、こんなに簡単なことはありません!
    しかしVSとsource insightは、他のエディタで実現できる機能vimが実現できる原則に基づいて問題の実質を分析することができます.実際にはVSでもsource insightでもプロジェクトを構築し、ソースコードをプロジェクトにインポートする必要があります.これらのエディタは、プロジェクト内のソースファイルにインデックスを作成すると推測できます.これにより、コードの更新やソースファイルの追加がある場合、エディタは自然に検出することができます.この場合、ソースファイルにインデックスを暗黙的に再構築し、新しい関数をスキップすることができます.エディタが陰でいろいろなことをすることができる以上、私たちはどうしてそうしないのですか.コンピュータのプロセッサの多くは暇で、無駄にしないでください.
    Linuxの下にソースコードが山積みになっていると思いますが、これらのコードをよく編集して読む必要があります.ルートディレクトリ構造はこのようなものです.
    ├── auto_tags
    ├── build
    ├── common
    ├── include
    ├── libs
    ├── message
    ├── metadata
    ├── network
    ├── nodes
    ├── privacy
    ├── tags
    └── tests
    

    ここでtagsファイルは現在のディレクトリの下のコードに対して生産されたtagであり、他のディレクトリにはあなたのソースコードが格納されています.これにより、ディレクトリの下のソースコードを開くとvimはtagsファイルに基づいて変数の位置を特定できます.
    ここのauto_tagsディレクトリには、現在のディレクトリのソースコードが更新されているかどうかを自動的に検出する独自のスクリプトが格納されています.ある場合は、新しいtagsファイルを生産し、古いものを置き換えます.auto_tagsディレクトリ構造は以下の通りです.
    ├── auto_tags.conf
    ├── auto_tags.sh
    └── run_tags.sh
    

    auto_tags.confはプロファイルで、構成項目は以下の通りです.
    CTAGS=/usr/bin/ctags
    
    #   tags       
    tags_dir=../
    
    #        
    source_root=../
    
    #     tags    ,        ,    
    source_dirs="common message nodes"
    
    #     
    max_log_size=10 # Unit: Mb
    log_file="auto_tags.log"
    

    source_dirs変数はtagsのディレクトリ名を確立する必要があるように置き換えられます.二重引用符で囲まれ、ディレクトリ名のみを書く必要があります.../を追加する必要はありません.
    使用方法は以下の通りです.
     sh ./run_tags.sh start :     
     sh ./run_tags.sh stop  :     
    

    コアスクリプトはauto_tags.sh、スクリプトがどのように実現されているかについては貼らないでください.結局、これはプログラマーが自分で楽しむ実現の小さな機能にすぎません.それは完備していませんが、簡単で使いやすいわけではありません.githubアドレスは以下の通りです
    https://github.com/handy1989/vim/tree/master/auto_tags
    

    The end…