web-dev-qa-db-ja.com

Firefox — Vimで(テキストベースのファイルへの)リンクを開く方法は?

かなり頻繁に、gVimで直接開きたいファイルへのリンクを含むWebページを目にします(Windows上のFirefoxで閲覧している場合)。 Chrome固有の答え—持っているのも良いです。

これを機能させようとして、FirefoxのTools > Options > Applications設定(MIMEタイプに基づいて何をするかを選択する)をいじっていました。無駄に。これらのファイルのほとんど(例:Pythonソースファイル))で、それらをクリックすると、[ファイル名を開く]ダイアログが表示され、[プログラムから開く]、[ファイルを保存]、およびその他のオプションが表示されます。 。「プログラムから開く」に対して、ドロップダウン「その他...」から選択すると、「ヘルパーアプリケーションの選択」ダイアログが表示されます。「Viの改善-テキストエディタ」doesが表示されます。リストが表示されますが、問題は、シェルウィンドウでvim.exeが開き、gVim.exeが表示されることです。[ヘルパーアプリケーションの選択]で、[参照...]を選択できます。 "そしてVimのディレクトリに移動し、" gvim.exe "を選択すると機能します。しかし、次のファイルでは、この設定が記憶されていないため、すべてやり直す必要があります。

どうすればそこに固定できますか、または別の方法を使用してgVimでファイルを簡単に開くことができますか?

Firefoxのバグレポートを読んだところ、「ヘルパーアプリケーションの選択」ダイアログは、指定されたファイルのMIMEタイプに基づいて表示され、ユーザーがいくつかの設定を変更しない限り、これはWindowsレジストリから取得されることがわかりました。しかし、gVimでanyファイルを開くことができるようにしたいので、開きたいすべての拡張機能に対してWindowsでデフォルトを設定するのは良い解決策ではありません。

3
Evgeni Sergeev

まず、Firefoxは「ChooseHelper Application」の設定をシステム設定に基づいているため、それを構成する簡単な方法はありません。

さらに優れた解決策は、使いやすさの観点から、「OpenWith」と呼ばれるFirefox拡張機能を使用することです https://addons.mozilla.org/en-US/firefox/addon/open-with/

Webブラウザー用であると書かれていますが、どのプログラムでもかまいません。URLを最初の引数としてプログラムを呼び出すだけです。

次に、Pythonスクリプト:

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.

内容:

  1. ユーザーのTempディレクトリ(Firefoxがそのような場合にファイルを保存するのと同じ場所)に一意のファイル名を作成します。

  2. クエリ文字列とハッシュアンカーを含むURLを使用しても、一時ファイルの拡張子が正常であることを確認します(2番目の引数のないurlretrieve(..)は前者を処理しますが、後者は処理しません)。これは、Vimにファイルの構文を強調表示する方法を指示するので便利です。

  3. URLから現在のユーザーのTempディレクトリにファイルをダウンロードします。

  4. gvim.exe(または選択したエディター-以下を参照)でファイルを開きます。

このソリューションの使用方法:

  1. 上記のPythonスクリプトをopen_with.pyとして、そのようなスクリプトを保存する場所に保存します。

  2. 上記のリンクにOpen WithFirefox拡張機能をインストールし、Firefoxを再起動します。

  3. Tools > Add-ons > Extensions > Open With > Optionsに移動します。そこ:

    (a)。 (意図した目的でOpen Withを使用する予定がない限り、リスト内のすべてのブラウザーを「非表示」にします。)

    (b)。 「追加...」python.exe

    (c)。その「引数...」をスクリプトのパスに設定し、その後にエディターの実行可能ファイル名またはパスを設定します。私にとって、これは
    C:\E\infrastructure\open_with.py gvim.exe

    (d)。 「名前を変更...」を「gVim」に変更します。

  4. gvim.exeがPATH変数に含まれていることを確認してください。 EditPATH Autohotkeyスクリプト をお勧めします。これはAHKツールを使用してEXEにコンパイルできます(便宜上、Quick Launchフォルダーに配置します— PATHの編集は、コントロールパネルのメモリテストを実行する必要がなく、3回のクリックになりますそれ以外の場合は、手順3(c)でgvim.exeのパス全体を指定する必要があります。

  5. それでおしまい。 Firefoxでファイルへのリンクを見つけて右クリックし、[gVimでリンクを開く]を選択します。

Screenshot of context menu

(私がそこに正しいアイコンを取得した方法を推測します:)

ボーナス:Open With拡張機能のOptionsで関連する設定を設定した場合、Firefoxタブを右クリックして、Vimで(ほとんどの)Webページを開くこともできます。つまり、Vimを使用する以外は「ソースの表示」のようになります。

このソリューションは、Emacs、Notepad ++、およびテキストエディタに限定されない他の多くのソフトウェアにも同様に適用されることに注意してください。たとえば、GIMPで試してみたところ、PNGファイルが開きました。 (これを行うには、上記のgvim.exeをGIMPへのパスに置き換えます。注:リンクだけでなく、この方法で任意の画像を開くには、画像を表示、次にそのタブを右クリックします。)


歴史的なメモ:最初はBATスクリプトを書きに行きましたが、このテストケースで失敗した後、それは不可能になりました: http://evgeni.org/w/api.php?format=xml&action=query&titles=AutoHotkey_shortcuts&prop=リビジョン&rvprop = content
これは、cmd.exe=文字を含む引数に問題があるためです。さらに、このテストケースを処理できないため、コマンドライン引数としてURLを使用してgvim.exeを呼び出すだけではありません(VimはURLを受け入れます)。Vimの空白のインスタンスを開くだけです。また、URLを解析するには、Powershellを使用する必要があります。これにより、ソリューションの移植性が多少制限されます。結局、前提条件としてPythonをインストールすることは、質問するのにそれほど多くないことだと思いました。

1
Evgeni Sergeev