Firefox - Wie öffne ich einen Link (zu einer beliebigen textbasierten Datei) in Vim?

3

Ich sehe ziemlich oft Webseiten mit Links zu Dateien, die ich direkt in gVim öffnen möchte (beim Surfen mit Firefox unter Windows). Chrome-spezifische Antwort - auch gut zu haben.

Beim Versuch, dies zum Laufen zu bringen, habe ich mit den Tools > Options > ApplicationsEinstellungen von Firefox herumgespielt (wo anhand des MIME-Typs ausgewählt wird, was zu tun ist). Umsonst. Bei den meisten dieser Dateien (z. B. Python-Quelldateien) wird durch Klicken auf diese Dateien das Dialogfeld "Dateiname.py öffnen" mit den Optionen "Öffnen mit", "Datei speichern" und anderen Optionen geöffnet. Gegen "Öffnen mit" kann ich aus einer Dropdown-Liste "Andere ..." auswählen und ich erhalte den Dialog "Hilfsprogramm auswählen". Nun, „Vi Improved - Ein Text - Editor“ wird in dieser Liste erscheinen für mich, aber das Problem ist , dass es öffnet sich die Auswahl vim.exein einem Shell - Fenster, während ich möchte sehen ,gVim.exe. In der "Hilfsprogramm auswählen" kann ich "Durchsuchen ..." auswählen und zum Verzeichnis von Vim navigieren, "gvim.exe" auswählen und dann funktioniert es. Aber für die nächste Datei merkt es sich diese Einstellung nicht und ich muss alles noch einmal machen.

Wie kann ich es dort festhalten oder auf eine andere Art und Weise Dateien in gVim öffnen?

Beim Lesen von Firefox-Fehlerberichten stellte ich fest, dass das Dialogfeld "Hilfsprogramm auswählen" auf der Grundlage des MIME-Typs der angegebenen Datei ausgefüllt ist. Sofern der Benutzer keine Einstellungen geändert hat, wird dies aus der Windows-Registrierung übernommen. Ich möchte jedoch in der Lage sein, jede Datei mit gVim zu öffnen. Daher ist es für mich keine gute Lösung, für jede Erweiterung, die ich möglicherweise öffnen möchte, die Standardeinstellung in Windows festzulegen.

Evgeni Sergeev
quelle
Seit wann ist dieser Ort zu einem kollaborativen Blog geworden?
Romainl
2
@romainl Könnten Sie Ihren Kommentar konstruktiv umformulieren?
Evgeni Sergeev
@EvgeniSergeev - Ihre Frage enthält viele Informationen, die nur schwer zu befolgen sind. Daher möchten Sie die Informationen möglicherweise entfernen oder Ihre Frage so formatieren, dass nur die für Ihre Frage relevanten Informationen im Vordergrund und im Mittelpunkt stehen.
Ramhound

Antworten:

1

Zunächst basiert Firefox die Einstellungen in "Choose Helper Application" auf den Systemeinstellungen, so dass es keine einfache Möglichkeit gibt, dies zu konfigurieren.

Noch besser ist es, die Firefox-Erweiterung "Open With" zu verwenden: https://addons.mozilla.org/en-US/firefox/addon/open-with/

Es heißt, es sei für Webbrowser, aber es könnte sich um ein beliebiges Programm handeln - es ruft nur das Programm mit der URL als erstes Argument auf.

Als nächstes habe ich ein Python-Skript geschrieben:

import sys, os, re, tempfile, urllib, urlparse, time

handler, url = sys.argv[1:3]
match = re.match(r".*(\.[A-Za-z_]+)$", urlparse.urlparse(url).path)
tmpfile, tmpfile_path = tempfile.mkstemp(suffix=match.group(1) if match else '')
os.close(tmpfile)
print "Downloading to temp file ..."
urllib.urlretrieve(url, tmpfile_path)
#Normally it would try to clean up the file we urlretrieved after this Python
#process ends. Thank BDFL there are no access restrictions on private variables.
urllib._urlopener._URLopener__tempfiles = []

os.execlp(handler, handler, '%s' % tmpfile_path)

#We don't attempt to delete the temporary file because:
# 1. Firefox also doesn't in such cases.
# 2. It's problematic in some instances, such as when the subprocess (this
#     script used to call the handler in a subprocess) finds another copy
#     of itself running, hands the file over to it and exits. Meanwhile, we
#     would be over here deleting the file while the subprocess'es brother
#     hadn't tried to open it yet.

Was es macht:

  1. Erstellt einen eindeutigen Dateinamen im Temp-Verzeichnis des Benutzers (derselbe Ort, an dem Firefox in solchen Fällen Dateien speichert).

  2. Stellt sicher, dass die Erweiterung der temporären Datei auch bei einer URL mit Abfragezeichenfolgen und Hash-Ankern sinnvoll ist ( urlretrieve(..)ohne ein zweites Argument wird die erstere behandelt, aber nicht die letztere). Dies ist nützlich, da es Vim mitteilt, wie die Datei syntaktisch hervorgehoben werden soll.

  3. Lädt die Datei von der URL in das TempVerzeichnis des aktuellen Benutzers herunter .

  4. Öffnet die Datei mit gvim.exe(oder einem Editor Ihrer Wahl - siehe unten).

So verwenden Sie diese Lösung:

  1. Speichern Sie das obige Python-Skript an einem open_with.pyOrt, an dem Sie solche Skripte aufbewahren.

  2. Installieren Sie die Open With Firefox-Erweiterung unter dem obigen Link und starten Sie Firefox neu.

  3. Gehe zu Tools > Add-ons > Extensions > Open With > Options. Dort:

    (ein). (Sofern Sie Open With nicht für den vorgesehenen Zweck verwenden möchten, "verstecken" Sie alle Browser in der Liste.)

    (b). "Hinzufügen ..." python.exe.

    (c). Setzen Sie die "Argumente ..." auf den Pfad des Skripts, gefolgt vom ausführbaren Dateinamen oder Pfad des Editors. Für mich wäre das
    C:\E\infrastructure\open_with.py gvim.exe

    (d). "Umbenennen ..." in "gVim".

  4. Stellen Sie sicher, dass gvim.exesich das in der PATH-Variablen befindet. Ich empfehle das EditPATH-Autohotkey-Skript , das mit AHK-Tools auf eine EXE- Datei kompiliert werden kann. (Platzieren Sie es Quick Launchzur Vereinfachung in den Ordner. Das Bearbeiten von PATH wird zu drei Klicks, anstatt den Speichertest der Systemsteuerung erneut durchführen zu müssen.) Andernfalls müssen Sie es ausführen Geben Sie den gesamten Pfad von gvim.exeSchritt 3 (c) an.

  5. Das ist es. Suchen Sie nun in Firefox einen Link zu einer Datei, klicken Sie mit der rechten Maustaste darauf und wählen Sie "Link mit gVim öffnen".

Screenshot des Kontextmenüs

(Ratet mal, wie ich dort das richtige Symbol gefunden habe :)

Bonus: Wenn Sie die entsprechende Einstellung in den Optionen der Erweiterung " Öffnen mit " festlegen , können Sie mit der rechten Maustaste auf eine Firefox-Registerkarte klicken und (die meisten) Webseiten auch in Vim öffnen - dh wie "Quelltext anzeigen", außer mit Vim.

Beachten Sie, dass diese Lösung auch für Emacs, Notepad ++ und viele andere Programme gilt, die nicht auf Texteditoren beschränkt sind. Zum Beispiel habe ich es gerade mit The GIMP versucht und es öffnete eine PNG-Datei. (Ersetzen Sie dazu den gvim.exeobigen Pfad durch den Pfad zu GIMP. Hinweis: Wenn Sie ein beliebiges Bild auf diese Weise und nicht nur einen Link öffnen möchten, können Sie das Bild anzeigen und dann mit der rechten Maustaste auf dessen Registerkarte klicken.)


Historischer Hinweis: Anfangs habe ich versucht, ein BAT-Skript zu schreiben, aber das wurde unhaltbar, nachdem es in diesem Testfall fehlgeschlagen war: http://evgeni.org/w/api.php?format=xml&action=query&titles=AutoHotkey_shortcuts&prop=revisions&rvprop=content
That weil cmd.exees Probleme mit Argumenten gibt, die das =Zeichen enthalten. Darüber hinaus ging es nicht nur darum, gvim.exedie URL als Befehlszeilenargument aufzurufen (obwohl Vim URLs akzeptiert), da dieser Testfall nicht verarbeitet werden kann. Es wird lediglich eine leere Instanz von Vim geöffnet. Und um die URL zu analysieren, müsste ich auf Powershell zurückgreifen, was die Portabilität der Lösung etwas einschränkt. Am Ende entschied ich, dass eine Installation von Python nicht allzu viel verlangt.

Evgeni Sergeev
quelle