Navigare nei progetti di codice senza usare comandi esterni


9

Sto cercando di raccogliere una cassetta degli attrezzi di comandi / query Vim, in modalità comando o ricerca, per navigare in una base di codice senza usare Ctags o altri strumenti esterni. I tag sono fantastici, ma il supporto può variare a seconda dell'ambiente di sviluppo su cui sei bloccato. Vorrei solo fare affidamento sulla conoscenza di Vim.


4
Forse dovresti dire "strumenti esterni" invece di "tag", perché il mio primo suggerimento sarebbe cscope.
muru,

1
Una cosa che uso è il comando gd. Questo porta il cursore sulla dichiarazione locale della variabile sotto il cursore.
nitishch,

@muru Non voglio usare strumenti esterni. Quello che sto cercando di imparare sono le tecniche per navigare in modo efficiente una base di codice usando solo i comandi di Vim. So che può essere fatto, ma ovviamente richiede una conoscenza più profonda di Vim di me. Forse non è una buona domanda SE poiché è così aperta ma non so dove altro cercare.
user1332148

Risposte:


11

"Includi ricerca" è uno di questi strumenti:

[I and ]I      " search current buffer and included files for
               " the word under the cursor, skipping comments
:ilist foo     " same as above but for 'foo'
:ilist /foo    " same as above but for a word containing 'foo'

Relativo a "includi ricerca", anche la "ricerca per definizione" è interessante:

[D and ]D      " search current buffer and included files for
               " the definition of the symbol under the cursor
:dlist foo     " same as above but for definition of 'foo'
:dlist /foo    " same as above but for a definition containing 'foo'

:dlist /       " list all definitions from the current buffer
               " and included files

Entrambi gli strumenti dipendono da una varietà di opzioni che possono o meno essere impostate dai plugin del tipo di file.

Vedere :help include-search.


Puoi anche usare gde gDcome versioni leggere di [De ]D.

Vedere :help gd.


Nel buffer corrente, il comando seguente elenca ogni definizione di funzione e il suo numero di riga:

:g/func/#

Vedere :help :g.


:grepe :vimgrepsono anche utili, se non altro perché il loro risultato viene inserito nell'elenco degli aggiornamenti rapidi con cui è possibile navigare :cn, :cp... e visualizzato nella pratica finestra degli aggiornamenti rapidi.

Vedi :help :grep, :help :vimgrepe :help quickfix.


Parlando della lista quickfix / finestra, ho scritto questa funzione (sulla base del lavoro degli altri) per visualizzare i risultati di [I, ]I, :ilist, [D, ]De :dlistnella lista quickfix / finestra. YMMV ovviamente.


Pur non essendo strettamente uno strumento di navigazione, trovo la finestra di anteprima molto utile per dare un'occhiata alla firma della funzione con cui sto lavorando.

Vedere :help preview-window.


Detto ciò…

Vim non sa nulla del tuo codice oltre ad alcuni schemi regex che possono o meno adattarsi al tuo stile di codifica o altro. Ciò significa che la navigazione del codice viene eseguita meglio con l'aiuto di strumenti esterni come ctags, cscope o GNU GLOBAL.


5

Ci sono molti modi per navigare attraverso il codice (incluso in Vim ed esterno), ancora li scopro. Quello che uso nel lavoro quotidiano è:

  • Testo greping nei file di progetto e navigazione tramite la finestra di quickfix (utilizzo il cercatore argento per greping).
  • Usando i plugin relativi alla lingua, so che ci sono quelli per javascript, ruby, go, che consentono di saltare tra i moduli del programma (nel plugin javascript è gf-command
  • Ctrl+O, Ctrl+I- saltare indietro o avanti nella "cronologia" della navigazione
  • g; - passa all'ultima posizione modificata nel file
  • Utilizzo dei segni per posizionare "segnalibri" in determinati luoghi. Puoi inserire un segno con il '[some_letter]comando, se la lettera è maiuscola, otterrai un segno che sarà raggiungibile da qualsiasi file (buffer).
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.