GNU/Linux >> Znalost Linux >  >> Linux

Jak najít volajícího a volaného funkce v kódu C ve vi/vim?

Příklad minimálního cscope

Ingo se o tom zmínil, zde je příklad.

Nejprve byste měli nastavit .vimrc :

set cscopequickfix=s-,c-,d-,i-,t-,e-

Poté přejděte do základního adresáře vašeho projektu a spusťte:

cscope -Rb

Tím se vygeneruje cscope.out soubor, který obsahuje analyzované informace. Generování je přiměřeně rychlé, dokonce i pro velké projekty, jako je linuxové jádro.

Otevřete vim a spusťte:

:cs add cscope.out
:cs find c my_func

c je mnemotechnická pomůcka pro callers . Druhý cscope pokud jsou také možné dotazy, mnemotechnické pomůcky jsou uvedeny pod:

help cscope

Tím přidáte seznam volajících do seznamu rychlých oprav, který můžete otevřít pomocí:

:copen

Přejděte na řádek, který vás zajímá, a stisknutím klávesy Enter tam skočte.

Chcete-li najít volající s názvem funkce aktuálně pod kurzorem, přidejte do .vimrc :

function! Csc()
  cscope find c <cword>
  copen
endfunction
command! Csc call Csc()

a zadejte :Csc<enter> když je kurzor nad funkcí.

TODO:

  • pro aktuální funkci pod kurzorem to uděláte jediným příkazem. Související:Zobrazit název funkce ve stavovém řádku
  • automaticky přidat nejbližší databázi (nadřazené adresáře), když zadáte soubor:jak automaticky načíst cscope.out do vim
  • interaktivně otevřete graf hovorů jako Eclipse. Související:Generování Call-Tree z databáze cscope

Malá rada:Miluji vim, ale je pro mě příliš komplikované nastavit takovou věc. A nebere v úvahu třídy např. v C++. Pokud vám na projektu dost záleží, pokuste se, aby projekt fungoval na nějakém „IDE“. Může to vyžadovat určitou režii, pokud projekt nesleduje konfigurační soubory IDE (což jsou automaticky se měnící bloby, které znečišťují repo...), ale stojí mi to za to. Pro C / C++ byl můj oblíbený zatím KDevelop 4.


Za tímto účelem se Vim integruje s cscope nástroj; viz :help cscope pro více informací.


Linux
  1. Jak zobrazit čísla řádků ve vi/vim?

  2. Jak volat funkci C v C++, funkci C++ v C (Mix C a C++)

  3. Jak získat všechny soubory přesahující určitou velikost a smazat je

  1. Jak přenést výsledky 'najít' do mv v Linuxu

  2. Jak přidat funkci dotazování do kódu modulu jádra?

  3. Jak mohu upravit všechny soubory vrácené funkcí find in vi v systému Linux?

  1. Jak můžete přepnout klávesy j a k ve vim?

  2. Jak najít výchozího správce souborů?

  3. Jak zjistím UUID souborového systému