2012-04-02 7 views
9

Frage in Fettdruck unten. Dies ist eine Programmierfrage, also nicht voreilige Schlüsse ziehen und dafür stimmen, zu schließen.Jedes gute Werkzeug, um schnell zur Programmierdokumentation zu springen

Ich bin ein C++ Programmierer. Ich benutze OS X/quicksilver oder ubuntu/compiz/gnome do als meinen Desktop. Ich versuche, die Maus nicht zu berühren, und ich benutze mehrere Desktops, und ich benutze Fliesen, die ich von der Tastatur fahre. Zum Programmieren verwende ich bash und vim.

Da ich ein C++ Programmierer bin, muss ich Dokumentation überall verstreut verweisen, zum Beispiel STL/Boost/CMAKE/Zeromq/Protokoll Puffer/Mongodb/RapidJson/Luajit und die Liste geht weiter.

Springen zu verschiedenen Referenzhandbüchern ist eine Echtzeit Sink/Denkprozess Disruptor. Vielleicht sind Sie nicht überzeugt, dass dies wirklich ein Problem ist, aber wenn Sie mehrere Bibliotheken von Boost verwenden, ohne Code-Vervollständigung, werden Sie verstehen, dass dies wirklich ein Problem ist. Wie verwalten die Benutzer ihre Referenzhandbuch-Links und was ist der schnellste Weg zu Referenzhandbüchern zu springen? Standard-Browser-Lesezeichen sind nicht die Antwort, und was immer Sie vorschlagen, sollte mit der geringstmöglichen Anzahl von Tastenanschlägen durchgeführt werden, oder die niedrigste Latenzzeit von Informationen, die für die Synthese benötigt werden, muss erfüllt sein.

Vielleicht ein benutzerdefinierter Browser oder starke Plugins weiß ich nicht? Für Verzeichnisnavigation verwende ich vim NERDTree, vielleicht etwas in dieser Richtung? Zum Beispiel sollte ich in der Lage sein boost-Dateisystem einzugeben und direkt auf die Code-Referenzseite des Boost-Dateisystems springen zu können.

+0

Was lässt Sie denken, dass die Verwendung von VIM immer noch die beste Wahl ist? Vor allem, nachdem Sie bereits auf ein Problem stoßen, dass die moderne IDE für Sie repariert? –

Antwort

1

Ich tippe Umschalt +kC Mann-Seite anzuzeigen.

+0

Ja, das wäre ein guter Startpunkt = D. Allerdings haben die meisten C++ Bibliotheken heutzutage Online-Handbücher. Darüber hinaus kann nur clang C++ für Coding-Tools parsen, um Identifikatoren mit korrekter Semantik vorläufig zu extrahieren, so dass es dafür noch keine Werkzeuge gibt. Also, zuerst würde ich clang ++ mit vim verbinden müssen, dann müsste ich das Man-Subsystem verwenden, um zu den webbasierten Referenzhandbüchern zu trampolieren: D –

+0

Ich müsste auch die Kennungen zu einer autorotativen Form normalisieren (wie boost :: filesystem :: pfad zu boost-fileysten), damit die tools mich zur top-level-dokumentation führen. Es wäre schneller, einfach "boost-filesystem" in ein Tool einzugeben und es auf die richtige Seite zu bringen. –

2

Ich habe Angst, dass was Sie wollen, ist eine IDE, die Vim, aber ich liebe es, ist nicht.

Dort ist a plugin that gives access to the standard library documentation. Vim ist jedoch nicht in der Lage, Ihren Code zu verstehen und sich magisch an die Bibliothek anzupassen, die Sie in Ihr Projekt aufnehmen. Das Vim Wiki hat auch twopages, die von Interesse sein könnten.

+0

keine C++ IDE, anders als Visual Studio, analysiert moderne C++ korrekt oder schnell genug. deshalb habe ich C++ IDEs gemieden. Dies ist genau der Grund, warum ich nach einer Form von Link-Management-App/worflow suche, die mich schnell zu URLs springen lässt. Nachdem ich gesagt habe, dass mir ein Tool wie Quicksilver oder Gnome-Do nichts ausmacht, kann ich schnell zu Links springen. –

+0

Ich weiß nicht viel über Gnome Do, aber es ist einfach, benutzerdefinierte Websuche zu Quicksilver in Einstellungen> Katalog> Benutzerdefiniert hinzuzufügen. Wenn Ihre Bibliotheken eine durchsuchbare Dokumentation haben, kann sie Ihr Problem zumindest teilweise lösen, denke ich. – romainl

+0

+1 dafür. Ich entwickle zu diesem Zeitpunkt keine Karte. Aber ich nehme an, Gnome-Do wird ähnliche Funktionalität haben. Ich werde es mir ansehen. –

4

Wenn Ihre Dokumentationsreferenzen einen gut definierten URI haben, können Sie ein kleines Programm erstellen, das automatisch den richtigen URI unter Berücksichtigung der Dokumentations-ID und einer Entitätskennung erstellt.

Zum Beispiel schrieb ich einen kleinen Ubiquity Befehl, der mir erlaubt, schnell mit der aktuellen Dokumentation aller Qt Einheit zu öffnen, indem Sie einfach auf den folgenden Austausch, die Eingabe ctrl + Raum die Ubiquity Konsole Popup und dann qt QSomeClass eingeben . Hier

ist der vollständige Code für die Ubiquity-Befehl (wenn Sie bereits Ubiquity installiert haben, können Sie mit dem Befehl-Feed auf this blank page abonnieren):

CmdUtils.makeSearchCommand({ 
    names: ["qt"], 
    author: {name: "Luc Touraille"}, 
    url: "http://doc.qt.nokia.com/main-snapshot/{QUERY}.html", 
    icon: "http://qt.nokia.com/favicon.ico", 
    description: "Searches the Qt Documentation for your word." 
}); 

Wie Sie sehen können, ist es sehr einfach ist und leicht angepasst werden für andere Online-Dokumentation, solange die URL gut aufgebaut sind.

bearbeiten

Hier ist eine allgemeinere Version, die Sie an Ihre Bedürfnisse anpassen können (Sie müssen nur die Vorlagen Karte ausfüllen):

var urlTemplates = { 
    "QT": "http://doc.qt.nokia.com/main-snapshot/{QUERY}.html", 
    "MPL": "www.boost.org/doc/libs/release/libs/mpl/doc/refmanual/{QUERY}.html", 
    ".NET": "http://msdn.microsoft.com/en-us/library/{QUERY}.aspx" 
}; 

CmdUtils.CreateCommand({ 
    names: ["doc"], 
    author: {name: "Luc Touraille"}, 

    arguments: [ {role: "object", 
        nountype: /^[0-9a-zA-Z_.-]*$/, 
        label: "entity" 
       }, 
       {role: "source", 
        nountype: [source for (source in urlTemplates)], 
        label: "documentation" 
       } ], 

    description: "Searches the documentation for some entity on a given documentation reference.", 

    _getSearchResultUrl: function(arguments) { 
     var documentationSource = arguments.source.text; 

     var urlTemplate = urlTemplates[documentationSource.toUpperCase()]; 

     return urlTemplate.replace("{QUERY}", arguments.object.text); 
    }, 

    execute: function(arguments) { 
     Utils.openUrlInBrowser(this._getSearchResultUrl(arguments)); 
    } 
}); 

Probe verwendet:

doc QMainWindow from qt 
doc from mpl vector 
doc system.idisposable from .net 
doc this from .net // with some text selected 

Natürlich ist dies eine sehr naive Implementierung, die auf den meisten Websites fehlschlagen würde. Ein weiterentwickelter Ansatz könnte die URL-Vorlagen in der Karte durch Funktionen ersetzen und so mehr Kontrolle über die Konstruktion der Ziel-URL bieten. Ich überlasse das als Übung für den Leser :). Eine andere Lösung könnte darin bestehen, eine Suche auf der Website durchzuführen (vorausgesetzt, sie stellt eine geeignete REST-API für die Suche bereit) und zum ersten Ergebnis zu springen.

Verwandte Themen