2011-11-27 17 views
13

I miei progetti sono nella cartella/srv/http/dev. I file generato ctags per un progetto:VIM set ctags in .vimrc

$ ctags -R --languages=php . 

Ora ho impostato percorso ctags:

:set tags=/srv/http/dev/proj/tags 

e che sta funzionando benissimo.

Ma ho molti progetti in dev/folder. Come posso impostare ctags nel file .vimrc? set tags=tags non funziona correttamente.

E mi piacerebbe generare file di tag premendo hotkey sulla cartella NERDTree selezionata. Ho provato:

nmap <silent> <F4> 
    \ :!ctags -R 
    \ --languages=php .<CR> 

Ma crea file di tag nella cartella home e mostra avvertimenti circa cartella home scansione ..

EDIT: Come @Alexandru Plugaru consigliato dovrei usare g: NERDTreeFileNode.GetSelected () funzione.

Sono solo un utente principiante, quindi ho ancora una domanda. Ho aggiunto nel mio file Vimrc:

function createTags() 
    let curNodePath = g:NERDTreeFileNode.GetSelected().path.str 
    exec ':!ctags -R --languages=php ' . curNodePath 
endfunction 
nmap <silent> <F4> :execute createTags()<CR> 

Ma premendo F4 vedo:

E117: Unknown function: createTags 
E15: Invalid expression: createTags 

EDIT 2: Grazie a @Alexandru Plugaru ho ottenuto questo:

function CreateTags() 
    let curNodePath = g:NERDTreeFileNode.GetSelected().path.str() 
    exec ':!ctags -R --languages=php -f ' . curNodePath . '/tags ' . curNodePath 
endfunction 
nmap <silent> <F4> :call CreateTags()<CR> 

E funziona! Premendo F4 ottengo file tag nella cartella del progetto.

+1

provare: chiamare createTags() anche provare a denominare la funzione con una lettera maiuscola. –

risposta

3

Questo perché la directory corrente di vim è la directory principale. È necessario modificare il percorso o creare il plugin nerdtree. Vedi la directory nerdtree_plugin per un esempio. Penso che troverete questa funzione interessante:

g:NERDTreeFileNode.GetSelected()

+0

Grazie, penso che sia quello di cui ho bisogno. Puoi rispondere a più domande per favore? Vedi il mio EDIT. –

+0

Ho risposto al post originale –

-1

nel vostro uso Vimrc:

set tags+=tags,/srv/http/dev/proj/tags 

Credo che virgola è il separatore corretto.

+0

Ok, funziona. Ma per quanto riguarda più progetti. Dopo aver creato un nuovo progetto devo aggiungere il percorso completo a questo nuovo progetto? E così ancora e ancora? Può essere che possa essere automatizzato? –

+0

usando './tags;' come menzionato in un'altra risposta è altamente preferibile ai percorsi hard-coding in .vimrc. –

+0

è anche possibile utilizzare https://github.com/embear/vim-localvimrc per avere un "vimrc locale" per progetto in cui si definiscono tag diversi. –

28
  1. funzioni dovrebbero iniziare con la lettera maiuscola. Modifica createTags a CreateTags.

  2. Per uso specifico progetto tags file è necessario aggiungere qualcosa di simile al tuo .vimrc:

    set tags=./tags,tags; 
    

    in modo che Vim cerca un file tags nella directory corrente prima e sempre più in alto fino a quando non lo trova. Inoltre, mi piace set autochdir: la directory di lavoro è sempre quella che contiene il file corrente.

+0

Capisco cosa intendi, ma non riesco a capire come farlo) Ho aggiunto 'set tags =./Tags, tags' e' set autochdir' nel mio file .vimrc. Ma i tag non vengono fondati perché vim inizia a trovarli da/home .. –

+0

Vim inizia da casa perché è probabilmente la directory di lavoro. Cosa significa ': pwd' dice? – romainl

+0

': pwd' restituisce la directory giusta del file attualmente in fase di editing .. –