Firefox - Làm cách nào để mở một liên kết (đến bất kỳ tệp dựa trên văn bản nào) trong Vim?


3

Khá thường xuyên, tôi thấy các trang web có liên kết đến các tệp mà tôi muốn mở trực tiếp trong gVim (khi duyệt bằng Firefox trên Windows). Câu trả lời dành riêng cho Chrome - cũng tốt để có.

Cố gắng để làm việc này, tôi đã loay hoay với Firefox Tools > Options > Applications cài đặt (trong đó nó chọn những việc cần làm dựa trên loại MIME). Vô ích. Đối với hầu hết các tệp này (ví dụ: tệp nguồn Python), nhấp vào chúng sẽ xuất hiện hộp thoại "Mở tệp filename" với các tùy chọn "Mở bằng", "Lưu tệp" và các tùy chọn khác. Chống lại "Mở bằng" Tôi có thể chọn từ danh sách thả xuống "Khác ..." và tôi nhận được hộp thoại "Chọn ứng dụng trợ giúp". Bây giờ, "Vi Cải thiện - Trình soạn thảo văn bản" làm xuất hiện trong danh sách đó cho tôi, nhưng vấn đề là việc chọn nó sẽ mở ra vim.exe trong một cửa sổ shell, trong khi tôi muốn xem gVim.exe. Trong "Chọn ứng dụng trợ giúp", tôi có thể chọn "Duyệt ..." và điều hướng đến thư mục của Vim, chọn "gvim.exe", sau đó nó hoạt động. Nhưng đối với tệp tiếp theo, nó không nhớ cài đặt này và tôi phải thực hiện lại tất cả.

Làm cách nào tôi có thể làm cho nó dính ở đó hoặc sử dụng một cách khác để dễ dàng mở tệp trong gVim?

Từ việc đọc các báo cáo lỗi của Firefox, tôi nhận ra rằng hộp thoại "Chọn ứng dụng trợ giúp" được điền dựa trên loại MIME của tệp đã cho và trừ khi người dùng thay đổi một số cài đặt, điều này được lấy từ Windows Registry. Nhưng tôi muốn có thể mở bất kì tệp với gVim, vì vậy đây không phải là giải pháp tốt để tôi đặt mặc định trong Windows cho mọi tiện ích mở rộng tôi có thể muốn mở.


Từ khi nào nơi này trở thành một blog hợp tác?
romainl

2
@romainl Bạn có thể viết lại bình luận của bạn theo cách xây dựng không?
Evgeni Sergeev

@EvgeniSergeev - Bạn có rất nhiều thông tin trong câu hỏi của mình, rất khó theo dõi, vì vậy bạn có thể muốn xóa thông tin hoặc định dạng câu hỏi của mình theo cách chỉ có thông tin liên quan đến câu hỏi của bạn ở phía trước và trung tâm.
Ramhound

Câu trả lời:


1

Trước hết, Firefox dựa trên các cài đặt trong "Chọn ứng dụng trợ giúp" trên cài đặt hệ thống, vì vậy không có cách nào đơn giản để định cấu hình đó.

Một giải pháp thậm chí tốt hơn, tiện dụng, khôn ngoan, là sử dụng tiện ích mở rộng Firefox có tên "Open With" https://addons.mozilla.org/en-US/firefox/addon/open-with/

Nó nói rằng nó dành cho các trình duyệt web, nhưng hóa ra nó có thể là bất kỳ chương trình nào - nó chỉ gọi chương trình của anh ta với URL là đối số đầu tiên.

Tiếp theo, tôi đã viết một kịch bản 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.

Những gì nó làm:

  1. Tạo một tên tệp duy nhất trong thư mục Temp của người dùng (cùng nơi mà Firefox lưu trữ các tệp trong các trường hợp đó).

  2. Đảm bảo rằng phần mở rộng của tệp tạm thời sẽ lành mạnh, ngay cả với một URL bao gồm chuỗi truy vấn và hàm băm ( urlretrieve(..) không có đối số thứ hai xử lý cái trước, nhưng không có cái sau). Điều này rất hữu ích, vì nó cho Vim biết cách làm nổi bật tệp.

  3. Tải tập tin từ URL về người dùng hiện tại Temp danh mục.

  4. Mở tệp bằng gvim.exe (hoặc một biên tập viên bạn chọn - xem bên dưới).

Cách sử dụng giải pháp này:

  1. Lưu tập lệnh Python ở trên dưới dạng open_with.py một nơi nào đó bạn giữ những kịch bản như vậy.

  2. Cài đặt Mở với Phần mở rộng Firefox tại liên kết trên và khởi động lại Firefox.

  3. Đi đến Tools > Add-ons > Extensions > Open With > Options. Có:

    (a). (Trừ khi bạn có kế hoạch sử dụng Mở với cho mục đích dự định của nó, "Ẩn" tất cả các trình duyệt trong danh sách.)

    (b). "Thêm vào..." python.exe.

    (c). Đặt "Đối số ..." cho đường dẫn của tập lệnh theo sau là tên tệp hoặc đường dẫn thực thi của trình soạn thảo. Đối với tôi, đây sẽ là
    C:\E\infrastructure\open_with.py gvim.exe

    (d). "Đổi tên ..." thành "gVim".

  4. Đảm bảo rằng gvim.exe nằm trong biến PATH. Tôi đề nghị Chỉnh sửa tập lệnh Autohotkey , có thể biên dịch được với EXE bằng các công cụ AHK (đặt nó vào Quick Launch để thuận tiện - chỉnh sửa PATH trở thành ba lần nhấp, thay vì phải trải qua kiểm tra bộ nhớ Bảng điều khiển một lần nữa.) Nếu không, bạn phải cung cấp toàn bộ đường dẫn của gvim.exe ở bước 3 (c).

  5. Đó là nó. Bây giờ hãy tìm một liên kết đến một tệp trong Firefox, nhấp chuột phải vào tệp đó và chọn "Liên kết mở với gVim".

Screenshot of context menu

(Đoán làm thế nào tôi có biểu tượng chính xác ở đó :)

Phần thưởng: nếu bạn đặt cài đặt có liên quan trong Mở với tiện ích mở rộng Tùy chọn , bạn có thể nhấp chuột phải vào tab Firefox và mở (hầu hết) các trang web trong Vim - ví dụ như "Xem nguồn" ngoại trừ sử dụng Vim.

Lưu ý rằng giải pháp này cũng áp dụng tốt cho Emacs, Notepad ++ và nhiều phần mềm khác không bị hạn chế đối với trình soạn thảo văn bản. Ví dụ, tôi vừa thử nó với GIMP và nó đã mở một tệp PNG. (Để làm điều đó, thay thế gvim.exe ở trên với đường dẫn đến GIMP. Lưu ý: để mở một hình ảnh tùy ý theo cách này, không chỉ là một liên kết, bạn có thể Xem hình ảnh và sau đó nhấp chuột phải vào tab của nó.)


Ghi chú lịch sử: ban đầu tôi đã đi viết một kịch bản BAT, nhưng điều đó đã trở nên không thể kiểm soát được sau khi nó thất bại trong trường hợp thử nghiệm này: http://evgeni.org/w/api.php?format=xml&action=query&title=AutoHotkey_shortype&prop=revutions&rvprop=content
Đó là bởi vì cmd.exe có vấn đề với các đối số có chứa = tính cách. Hơn nữa, nó không chỉ là vấn đề gọi gvim.exe với URL là đối số dòng lệnh (mặc dù Vim không chấp nhận URL), vì nó không thể xử lý trường hợp kiểm tra này - chỉ mở một phiên bản trống của Vim. Và để phân tích URL, tôi phải dùng đến Powershell, điều này hạn chế tính di động của giải pháp. Cuối cùng, tôi quyết định rằng việc cài đặt Python làm điều kiện tiên quyết không phải là quá nhiều để hỏi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.