Je me demandais comment les gens naviguaient généralement à travers des projets importants avec plusieurs fichiers source dans l'environnement Linux. Je travaille principalement avec C et Python et parfois avec C ++, C # et Java. P>
Je voulais connaître des éditeurs, des plug-inscres, etc. Je souhaitais que je programmais sous Windows, des éditeurs comme VI et Emacs ne sont pas vraiment dans ma ligue, mais si vous pensez si cela pourrait être vraiment utile pour que je puisse apprendre l'un de ces éditeurs. Veuillez suggérer ainsi et tout plug-ins spécifique que vous utilisez pour rendre votre vie plus simple à gérer de grands projets avec ces programmes. P>
Voici quelques scénarios: disons que je travaille sur une fonction particulière A dans le fichier f, et tout à coup, je me rend compte que cette fonction doit appeler la fonction B dans le fichier G. J'ai rapidement besoin de naviguer à cette Fonction Pour déterminer des éléments comme des paramètres de fonction, examinez rapidement la fonction, etc. Un autre scénario fonctionnerait sur deux emplacements différents à la fois dans un fichier et une commutation rapidement entre ces deux emplacements. p>
J'utilise Eclipse pour gérer mon projet et faire du développement (l'achèvement automatique de l'Eclipse est douloureusement lent) et de la geangy pour éditer des fichiers individuellement, mais semble que je ne peux pas vraiment accéder à ce niveau d'efficacité. p>
Veuillez partager vos techniques de gestion et de navigation de code. P>
merci, p>
EDIT: Langues P>
12 Réponses :
Eh bien, quel genre de code parlez-vous? C ++ / Java / PHP / Ruby / Python Je recommande vivement Netbeans, spécialement le dernier Dev construit, Aussi kdevelop pour KDE 4.2 (de SVN) est vraiment sympa, le support PHP / C # est très expérimental, mais si cela ne vous dérange pas que le problème aléatoire est vraiment bon. NetBeans est de loin l'IDE la plus stable pour PHP / Java / C ++ sur Linux si cela ne vous dérange pas d'installer Java pour l'exécuter. P>
Cela semble bien, je vais jeter un coup d'oeil. Je travaille principalement avec C et Python. De temps en temps avec C ++, C # et Java.
NetBeans ont un soutien python et devrait être un peu facile à utiliser pour C au lieu de C ++.
Netbeans est génial, mais cela ne l'a tout simplement pas coupé. Je ne sais pas pourquoi mais ça avait l'air terriblement moche (je suis sur une arche Linux x86_64 en cours d'exécution gnome). Je ne pouvais pas le configurer pour utiliser Monospace 10 comme police de l'éditeur. Aussi les menus et tous ont été vraiment attirés, pas de frontières ou de quoi que ce soit.
c'est bizarre, quelle version de Java JDK? essayez de commencer avec --laf gtk
emacs avec eTags - voir par exemple Emacswiki sur Tags - en tant que modes par défaut Emacs Pour toutes les langues, je me soucie de: R, C ++, C, Coquille, Perl, Python, SQL, ... et probablement aussi ceux que vous êtes après. Le EXUBERANT CTAGS Généralisez-le à plus de langues et de rédacteurs, y compris la famille VI. p>
Je vais donner un coup d'Emacs. Je vais essayer de passer du temps avec elle aujourd'hui et de voir où il me prend.
J'ai donné à Emacs un autre essai, ça marche bien pour moi jusqu'à présent. La bonne chose est que c'est en ce qui concerne la plupart des frappes de frappe que j'utilise lorsque je modifie des fichiers dans d'autres éditeurs basés sur l'interface graphique (comme Visual Studio, Eclispe, etc.). J'adore totalement à quel point cela tient mon code C. Je vais marquer votre réponse comme réponse. Merci!
Vous pouvez utiliser monodevelop pour C ++. Ce sera une expérience très similaire que vous avez avec Windows / vs.Net. P>
Je suis un grand fan de Intellij . Son slogan dit tout: "Développer avec plaisir". Bien sûr, cela suppose que vous utilisez Java. Bien qu'il ait pris en charge des plugins pour plusieurs autres langues, notamment Python. P>
J'utilise souvent Doxygen lorsque j'ai besoin de comprendre le code de quelqu'un d'autre. J'utilise Vim avec CTAG tout en écrivant mon propre code. P>
Jetez un coup d'œil à KScope . Il fournit un menu de clic droit pour vous donner les définitions, les références, la fonction d'appel, appelée fonctions, etc. pour tout ensemble de fichiers source écrits dans C. Il est fiable et rapide lorsqu'il est utilisé sur le grand projet. P>
Je l'utilise pour la navigation source, mais pour la pièce d'édition, je me sens plus à l'aise avec Geany . Il n'est pas limité à C, et fournit une bonne fonctionnalité d'achèvement automatique, qui fournira le prototype d'une fonction lorsque vous le tapez. Il a encore des bords bruts, mais le combo KScope + Geany est mon combo préféré pour l'instant, quand il s'agit d'écrire C. p>
KScope n'a pas l'air mal du tout. Je ne suis pas un fan de KDE, mais cela semble avoir la peine d'essayer.
pour
Pour clarifier pour l'OP, qui semble réticent à apprendre Vim: naviguer vers la fonction si le curseur est sur ce nom de fonctions est le suivant:
Merci pour les conseils, je veux apprendre l'un de ces éditeurs. C'est juste que commencer avec celles-ci est un problème tel que je peux aller de l'avant et utiliser un éditeur plus simple qui a fait le travail. Je suis sûr qu'ils seraient parfaits à long terme, juste en train de commencer est une douleur. Je vais leur donner un coup, je dirais que je connais 10% de VI, mais Emacs est un tout nouveau monde pour moi.
J'utilise Eclipse et utilisez une forte utilisation de la fonction de recherche (pour la recherche de la plupart du texte). P>
J'ai également activé des info-bulles, qui peuvent afficher la documentation ou le début d'une fonction. P>
Marquer les occurrences est également utile pour trouver des éléments dans un fichier. P>
Je marque généralement des endroits où je travaille avec TODO Commentaires. Celles-ci sont visibles dans la barre latérale, il est donc relativement facile de naviguer là-bas. P>
Iactive également les numéros de ligne, pour corréler avec des messages d'erreur et tels. p>
Je ne pense pas qu'il soit possible d'éditer le même fichier dans deux fenêtres différentes d'Eclipse (mais je serais heureux d'être prouvé faux). P>
La recherche de texte est lente dans une grande base de données; et n'est pas spécifique à la syntaxe, par ex. Je voudrais peut-être trouver [seulement] les endroits où un constructeur de classe est invoqué, pas tous les autres endroits où le nom de la classe est mentionné.
Oui, mais je ne pense pas que vous puissiez faire mieux pour C et C ++ avec Eclipse CDT. CDT n'est pas si bon, souvent la recherche sémantique ne trouve pas toutes les occurrences. Je préfère donc avoir une recherche lente qui trouve trop qu'une recherche rapide qui puisse manquer d'occurrences. Pour Java, c'est différent, le JDT comprend beaucoup mieux la sémantique de Java.
J'utilise GVIM (version de l'interface graphique de Vim) pour la plupart des programmes Perl et C / C ++. Pour la navigation, je trouve NERDTREE , CTAGS, ACK et éventuellement des scripts personnalisés écrits dans Perl ou autre. J'ai placé My Vim / GVIM Configuration sur mon site. Comme on peut le voir là-bas, j'ai "alors $ vimruntime / mswin.vim" qui rend Vim beaucoup plus similaire à celui de Windows Editor, et plus familier aux gens qui en viennent. De nombreux experts Vim durs ne recommandent pas de l'utiliser, mais je le fais toujours. P>
Il existe de nombreux autres plugins sur Page d'accueil de Vim qui peut s'avérer utile. P>
J'utilise de nombreux éléments énumérés: Doxygen, Etags, etc. Toutefois, dans la plupart des cas, j'ai trouvé une version de Find-Grep bien réglée à partir d'EMACS peut être très efficace lors de la recherche de grandes bases de code. Travailler toujours sur la mise en place de cedet et semique.
Voici un code LISP que j'ai écrit pour un arbre source particulier et les mappages de ces fonctions dans mes .emacs. Le code construit une grande commande Find-Grep qui commence à la racine de l'arborescence source que je travaille à l'intérieur. Il traverse le système de fichiers à la recherche d'un fichier qui indique le haut de l'arborescence source (Makefile dans mon cas). Je l'ai accordé jusqu'à ce qu'il puisse compléter la recherche en quelques secondes (j'ai écrit un script Python pour m'aider à identifier de grands types de fichiers binaires qui ralentissaient ma recherche). P>
(global-set-key (quote[f3]) (quote set-fg-suffix)) (global-set-key (quote[f4]) (quote fg)) (defun mkpath (list) "Return a string which is the concatenation of the list." (let ( (result "") ) (while list (setq result (concat result (car list))) (setq result (concat result "/")) (setq list (cdr list)) ) result ; Since this is the final evaluation, it's the returned from the function. ) ) (defun find-best-root (anchor-file &optional empty-on-failure) "Examines the parent directories of the current buffer. Looks for a parent that contains the file passed in the anchor-file argument. This is the directory I want." (if (not buffer-file-name) ;; Certain buffer (e.g., *scratch*) return nil from buffer-file-name. In that case, ;; set the best path to "/" since that's the only path which can be counted on. (if (eq nil empty-on-failure) "/" "" ) (let ((path-depth (safe-length (split-string (file-name-directory buffer-file-name) "/" 1))) (best-root (if (eq nil empty-on-failure) (file-name-directory buffer-file-name) "")) (exclude-from-path 1)) (while (<= exclude-from-path (+ path-depth 1)) (setq path-as-list (butlast (split-string (file-name-directory buffer-file-name) "/") exclude-from-path)) (setq potential-root (mkpath path-as-list)) (message (concat "Checking in " potential-root)) (if (file-exists-p (concat potential-root anchor-file)) (progn (setq best-root potential-root) (setq exclude-from-path (+ path-depth 2)) ;; Break from the loop. (message (concat "Found " anchor-file))) (setq exclude-from-path (+ exclude-from-path 1))) ) best-root ) ) ) (if (eq system-type 'gnu/linux) (progn (setq marker-file "makefile") (setq find-filters (concat " -type d " "-path \"*/build\" -prune -o " "-path \"*/.git\" -prune -o " "-path \"*/ext\" -prune -o " "-path \"*/pycommon\" -prune -o " "\"(\" " "\! -iname \"BROWSE\" " "-and \! -iname \"FILES\" " "-and \! -iname \"TAGS\" " "-and \! -iname \"*.a\" " "-and \! -iname \"*.bin\" " "-and \! -iname \"*.cs\" " "-and \! -iname \"*.css\" " "-and \! -iname \"*.d\" " "-and \! -iname \"*.dat\" " "-and \! -iname \"*.html\" " "-and \! -iname \"*.ico\" " "-and \! -iname \"*.jar\" " "-and \! -iname \"*.json\" " "-and \! -iname \"*.o\" " "-and \! -iname \"*.pdf\" " "-and \! -iname \"*.php\" " "-and \! -iname \"*.png\" " "-and \! -iname \"*.pyc\" " "-and \! -iname \"*.so\" " "-and \! -iname \"*.sql\" " "-and \! -iname \"*.txt\" " "-and \! -iname \"*.xml\" " "\")\" " "-print0 | xargs -0 grep -nHi -e ")) )) (setq custom-find-grep-path-suffix "") (defun set-fg-suffix (suffix) "Set an optional suffix for the search. This is useful for more fine grained searching." (interactive "sEnter Search Suffix: ") (if (string= "" suffix) (message "The optional search suffix is now empty.") (message (concat "The optional search suffix is now '" suffix "'.")) ) (setq custom-find-grep-path-suffix suffix) ) (defun fg () "A custom find grep that dynamically sets the search path based on the buffer. Regular Expression Examples: -E \"struct.*hash\" When using special characters, enclose regexp in quotes. -E \"^text$\" ^ Matches beginning of line, $ matches end of line. -E \"main\\(.*\\)\" .* Matches everything, parenthesis require escaping." (interactive) (let ((fg-tt-filters find-filters )) (setq my-find-grep-command "find \"") (setq my-find-grep-command (concat my-find-grep-command (find-best-root marker-file))) (setq my-find-grep-command (concat my-find-grep-command custom-find-grep-path-suffix)) (setq my-find-grep-command (concat my-find-grep-command "\"")) (setq my-find-grep-command (concat my-find-grep-command fg-tt-filters)) (grep-apply-setting 'grep-find-command my-find-grep-command) (call-interactively 'find-grep) ) )
SPACEMACS intégré à projectile est un bon choix. P>
On peut rechercher des fichiers de projet à l'aide de services utilitaires tels que ACK, GRP, AG . P>
(AG est meilleur que ACK ou GREP) P>
Site propre, cette réponse semble être une opinion non informée. Veuillez l'améliorer en expliquant pourquoi i> c'est un bon choix. Quelles fonctionnalités sont particulièrement utiles? Comment se compare-t-il avec d'autres réponses? Y a-t-il des négatifs à prendre conscience?
Utiliser Source Insight Software - SourceInsight.com