web-dev-qa-db-fra.com

VIM set ctags in .vimrc

J'ai mes projets dans le dossier/srv/http/dev. J'ai généré un fichier ctags pour un projet:

$ ctags -R --languages=php .

Maintenant, je définis le chemin ctags:

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

Et ça marche bien.

Mais j'ai de nombreux projets dans le dossier dev /. Comment puis-je définir des ctags dans le fichier .vimrc? set tags=tags ne travaille pas proprement.

Et je voudrais générer un fichier de balises en appuyant sur la touche de raccourci sur le dossier NERDTree sélectionné. J'ai essayé:

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

Mais il crée un fichier de balises dans le dossier de départ et affiche des avertissements sur la numérisation du dossier de départ.

EDIT: Comme @Alexandru Plugaru l'a conseillé, je devrais utiliser la fonction g: NERDTreeFileNode.GetSelected ().

Je suis juste un utilisateur novice de Vim, j'ai donc encore une question. J'ai ajouté dans mon fichier .vimrc:

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

Mais en appuyant sur F4 je vois:

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

EDIT 2: Merci à @Alexandru Plugaru j'ai obtenu ceci:

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>

Et il fonctionne! En appuyant sur F4, j'obtiens le fichier de balises dans le dossier du projet.

21
Dmitry Teplyakov

C'est parce que le répertoire courant de vim est le répertoire personnel. Vous devez soit changer le chemin, soit créer un plugin nerdtree. Voir le répertoire nerdtree_plugin pour un exemple. Je pense que vous trouverez cette fonction intéressante:

g:NERDTreeFileNode.GetSelected()

5
Alex Plugaru
  1. Les fonctions sont censées commencer par une majuscule. Remplacez createTags par CreateTags.

  2. Pour utiliser des fichiers tags spécifiques au projet, vous devrez ajouter quelque chose comme ça à votre .vimrc:

    set tags=./tags,tags;
    

    afin que Vim recherche d'abord un fichier tags dans le répertoire courant, puis jusqu'à ce qu'il le trouve. De plus, j'aime set autochdir: le répertoire de travail est toujours celui contenant le fichier courant.

36
romainl