J’apprends le développement de VIM pour Rails et souhaite naviguer facilement dans les méthodes d’un fichier. Jusqu’à présent, je vois plusieurs options:
Trouvez ‘def’ en utilisant
/def
Quelqu’un a-t-il de meilleures idées?
:aide moi
Je pense qu’il faut vim-ruby pour le support de rbuy.
vous voulez une fonctionnalité appelée ctags
voir ctags exubérant , il fonctionne pour de nombreuses langues, y compris Ruby et est simple à utiliser.
de VIM :help ctags
Les ctags vont créer un index de tous les identifiants dans un arbre source. Vous pouvez ensuite utiliser les commandes de balise pour naviguer dans votre arbre source. voir :help tag-commands
. Le plus simple est de placer le curseur sur un mot-clé et d’appuyer sur CTRL – ] . Pour revenir à votre provenance, appuyez sur CTRL – T
Au-delà de cela, vous voudrez peut-être regarder cette page qui explique comment utiliser VIM comme un IDE Ruby plus complet: Utiliser Vim comme un IDE Ruby On Rails complet
Meilleure solution pour Vim: utiliser les ctags . Lisez la documentation de Vim sur la façon de naviguer dans les fichiers TAGS, installez également le plugin comme CtrlP qui vous permet de parcourir visuellement les tags.
Attention: les ctags exubérants ne fonctionnent pas bien avec Ruby , l’parsingur n’est pas en bon état et n’a pas été modifié depuis 4 ans.
Malheureusement tous les autres (j’ai trouvé 2) les générateurs Ruby ctags sont soit obsolètes (pas de support Ruby 1.9+) ou très lents.
Il y a une solution. Ripper-ctags: https://github.com/tmm1/ripper-tags C’est rapide et ça marche comme prévu. Il est basé sur la fonctionnalité Ruby 1.9+ appelée “Ripper” qui nous permet de construire sur l’parsingur original (rapide) de Ruby. C’est le générateur de ctags le plus précis aujourd’hui .
Les options de Ripper CLI sont presque identiques à celles des ctags, donc si vous connaissez déjà les ctags, vous trouverez facilement des balises ripper. C’est aussi simple que:
ripper-tags -R .
Cela crée un fichier TAGS que vim lit automatiquement par défaut (doit être le répertoire dans lequel vous ouvrez votre instance vim ou changez manuellement le paramètre de chemin dans vim si vous le lancez dans un répertoire différent – plus dans le manuel de Vim).
Si vous aimez cela, vous pouvez aller plus loin et installer mon projet qui crée automatiquement des TAGS pour toutes les gemmes que vous installez : https://github.com/lzap/gem-ripper-tags
L’utilisation est très simple (notez encore, seulement Ruby 1.9+):
gem install gem-ripper-tags
Ensuite, générez des balises pour tous les gems déjà installés:
gem ripper_tags
Chaque fois que vous installez un bijou maintenant, les balises seront automatiquement créées.
gem instal some_gem ...
Je vais encore plus loin: j’ai un git template qui régénère mon projet TAGS après chaque git pull ou fusionne automatiquement (en utilisant des balises ripper):
https://github.com/lzap/bin-public/blob/master/git-hooks-reinstall
Notez que vous aurez également besoin des fichiers de répertoire / git_template du même repository git.
J’espère que c’est un bon sharepoint départ pour naviguer dans les bases de code Ruby 🙂
Quelques idées:
Tout d’abord, créez un mappage pour utiliser les touches de recherche de la fonction C dans ~/.vim/after/ftplugin/ruby.vim
:
:nmap [[ ?def :nmap ]] /def
Ensuite, vous pouvez utiliser [[
et ]]
pour avancer ou reculer d’une fonction, comme dans le code C / Perl / Java, etc.
Une autre façon qui pourrait aider:
Dans .vimrc
, ajoutez la ligne:
:let ruby_fold = 1
Utilisez ensuite zj
, zk
, z[
et z]
pour naviguer par plis. Vous pouvez également installer ce plugin pour pouvoir supprimer facilement les plis à l’aide de daz
.
Pour trouver des fonctions spécifiques (plutôt que de simplement les contourner), vous devez utiliser les ctags (comme mentionné par chillitom). Le plugin taglist facilite la navigation vers une fonction spécifique, mais (comme dit chillitom) Ctrl – ] et Ctrl – T sont utiles pour suivre des mots-clés sous le curseur.
Pour plus d’informations, voir:
:help [[ :help ft-ruby-syntax :help z[ :help after-directory
J’ai récemment trouvé que Ruby.vim (selon l’une des réponses ci-dessus) est livré avec des raccourcis clavier très utiles:
nnoremap [m :call searchsyn('\','rubyDefine','b','n') nnoremap ]m :call searchsyn('\','rubyDefine','','n') nnoremap [M :call searchsyn('\','rubyDefine','b','n') nnoremap ]M :call searchsyn('\','rubyDefine','','n') xnoremap [m :call searchsyn('\','rubyDefine','b','v') xnoremap ]m :call searchsyn('\','rubyDefine','','v') xnoremap [M :call searchsyn('\','rubyDefine','b','v') xnoremap ]M :call searchsyn('\','rubyDefine','','v') nnoremap [[ :call searchsyn('\<\%(class\module\)\>','rubyModule\ rubyClass','b','n') nnoremap ]] :call searchsyn('\<\%(class\module\)\>','rubyModule\ rubyClass','','n') nnoremap [] :call searchsyn('\','rubyModule\rubyClass','b','n') nnoremap ][ :call searchsyn('\','rubyModule\rubyClass','','n') xnoremap [[ :call searchsyn('\<\%(class\module\)\>','rubyModule\ rubyClass','b','v') xnoremap ]] :call searchsyn('\<\%(class\module\)\>','rubyModule\ rubyClass','','v') xnoremap [] :call searchsyn('\','rubyModule\rubyClass','b','v') xnoremap ][ :call searchsyn('\','rubyModule\rubyClass','','v')
Une astuce consiste à rechercher simplement avec ‘ /f methodName
‘.
Vous devriez également envisager d’activer le pliage du code en ajoutant cette ligne à votre fichier .vimrc:
:let ruby_fold
Voir :help ft-ruby-syntax
pour plus de détails.
En général, je tape simplement le nom de la méthode dans la recherche incrémentale.
J’ai écrit un petit script shell en utilisant ag
(The Silver Searcher). Définissez les fonctions suivantes dans votre .vimrc
Cette méthode va développer le mot sous le curseur.
function! SearchForDeclarationCursor() let searchTerm = expand("") call SearchForDeclaration(searchTerm) endfunction
Puis déclarez la méthode SearchForDeclaration
function! SearchForDeclaration(term) let definition = 'def ' . a:term cexpr system('ag -w ' . shellescape(definition)) endfunction
Notez que nous recherchons explicitement le mot-clé def
. (Vous pouvez utiliser la syntaxe de signature de votre méthode de langue)
Nous mappons ensuite la fonction ci-dessus à une commande Leader
.
map cd :call SearchForDeclarationCursor()
Maintenant, si vous placez votre curseur n’importe où sur une méthode définie “dans votre projet”, et appuyez sur
, cela vous mènera à l’endroit où la méthode est définie.
Notez qu’une méthode peut être définie dans plusieurs classes. Vous pouvez faire un cycle en utilisant
pour next ou
pour prev.
Si vous voulez une explication plus détaillée de ce qui précède, j’ai écrit un article de blog ici: http://pradyumna.io/2017/12/17/search-ruby-method-declarations-in-vim.html
J’espère que cela t’aides!