Tôi đang sử dụng Twitvim lần đầu tiên. Nhìn thấy tất cả các URL trong đó khiến tôi tự hỏi, có cách nào để mở URL dưới con trỏ trong trình duyệt yêu thích của bạn hoặc một trình duyệt cụ thể không?
Tôi đang sử dụng Twitvim lần đầu tiên. Nhìn thấy tất cả các URL trong đó khiến tôi tự hỏi, có cách nào để mở URL dưới con trỏ trong trình duyệt yêu thích của bạn hoặc một trình duyệt cụ thể không?
Câu trả lời:
Cập nhật: từ tweet của tpope ngày hôm nay
Nhấn gx. Bạn có thể tùy chỉnh trình duyệt. Trên Gnome và Mac OS X, nó đã được sử dụng gnome-open/ open. Nói chung, bạn có thể đặt g:netrw_browsex_viewerthành bất kỳ thứ gì bạn muốn.
Câu trả lời ban đầu:
Không nhớ tôi lấy chức năng này ở đâu. Có một lỗi với hash (#) trong url, nhưng chức năng hoạt động đủ tốt nên tôi sẽ không bận tâm sửa nó.
function! HandleURL()
let s:uri = matchstr(getline("."), '[a-z]*:\/\/[^ >,;]*')
echo s:uri
if s:uri != ""
silent exec "!open '".s:uri."'"
else
echo "No URI found in line."
endif
endfunction
map <leader>u :call HandleURL()<cr>
Lưu ý: Nếu bạn không sử dụng Mac, hãy sử dụng gnome-open/ xdg-opencho Linux hoặc 'đường dẫn đến trình duyệt web của bạn' cho Windows
gxrất mạnh mẽ, cảm ơn! Nó cũng mở các tập tin với các ứng dụng thích hợp ™.
Nếu bạn đang sử dụng Vim 7.4 trở lên, ở chế độ bình thường, hãy đặt con trỏ bên dưới URL, sau đó nhấp vào gx, URL sẽ tự động được mở trong trình duyệt
:h netrw_gx: * đối với Windows 32 hoặc 64, url và tệp FileProtocolHandler được sử dụng. * đối với Gnome (với gnome-open): gnome-open được sử dụng. * cho KDE (với kfmclient): kfmclient được sử dụng * cho Mac OS X: mở được sử dụng. * nếu không, plugin netrwFileHandler được sử dụng.
Tôi sử dụng tập lệnh này để tìm kiếm trên gooogle keyworddưới con trỏ:
nmap <leader>g :call Google()<CR>
fun! Google()
let keyword = expand("<cword>")
let url = "http://www.google.com/search?q=" . keyword
let path = "C:/Program Files/Mozilla Firefox/"
exec 'silent !"' . path . 'firefox.exe" ' . url
endfun
Bạn nên sử dụng getline('.')và matchstr()trích xuất url dưới con trỏ. Phần còn lại là như nhau.
Thêm dòng sau vào tệp .vimrc:
nmap <leader><space> yiW:!xdg-open <c-r>" &<cr>
Vì vậy, ở chế độ bình thường, nó nhấn \ nó chọn từ hiện tại và mở nó làm địa chỉ trong trình duyệt web.
Lãnh đạo theo mặc định là \ (nhưng tôi đã ánh xạ nó tới, với let mapleader = ","). Tương tự, sử dụng imap, bạn có thể ánh xạ một số chuỗi khóa trong chế độ chèn (nhưng sau đó, nếu đó là chuỗi 2 khóa, nó có thể sẽ ghi đè một số hành vi mặc định).
Được rồi, bằng cách sử dụng các câu trả lời từ @tungd và @kev và một nghiên cứu nhỏ, tôi đã kết thúc với tập lệnh này, nó hoạt động theo cách tôi cần. Giống như @tungd đã nói # có thể gây ra vấn đề nếu bên trong một url nhưng tôi rất tuyệt với điều đó, nếu bất kỳ ai có biểu hiện tốt hơn cho url thì nó sẽ được hoan nghênh.
function! OpenUrlUnderCursor()
let path="/Applications/Safari.app"
execute "normal BvEy"
let url=matchstr(@0, '[a-z]*:\/\/[^ >,;]*')
if url != ""
silent exec "!open -a ".path." '".url."'" | redraw!
echo "opened ".url
else
echo "No URL under cursor."
endif
endfunction
nmap <leader>o :call OpenUrlUnderCursor()<CR>
Tôi đến với bữa tiệc này khá muộn, nhưng đây là một cách khác để thực hiện việc này đặc biệt hiệu quả trên Windows 7.
Cài đặt cả vim-shell và vim-misc trong vim Tôi khuyên bạn nên thực hiện việc này thông qua plugin Pathogen tuyệt vời và sau đó chỉ cần cd ~/vimfiles/bundle & git clone git@github.com:xolox/vim-misc.git & git clone git@github.com:xolox/vim-shell.gittừ msysgit. ( Hai plugin này mở url trong trình duyệt mặc định của bạn mà không cần tạo thêm bất kỳ lời nhắc lệnh nào hoặc những thứ vô nghĩa ngớ ngẩn khác thường được yêu cầu trong windows. Bạn có thể mở url trong Vim như thế này:. :Open http://duckduckgo.comHãy thử. Bạn sẽ thích nó. )
Tạo một số ánh xạ vim để bạn có thể nhanh chóng đưa dòng dưới con trỏ vào trình duyệt. Tôi sẽ ánh xạ điều này với bạn (đối với tôi, đó là ,utừ chế độ bình thường). Đây là cách thực hiện:
nnoremap u: execute "Mở" .getline (".")
Để sử dụng ánh xạ này, hãy nhập phím Lãnh đạo của bạn từ chế độ bình thường + u. Nó sẽ đọc dòng dưới con trỏ của bạn và mở nó trong trình duyệt mặc định của bạn.
Đây là một loại phiên bản cải tiến của tập lệnh do @tungd đề xuất ban đầu tại đây https://stackoverflow.com/a/9459366/7631731 . Giữ ngữ cảnh vim và xử lý chính xác các URL có chứa "#".
function! HandleURL()
let s:uri = matchstr(getline("."), '[a-z]*:\/\/[^ >,;()]*')
let s:uri = shellescape(s:uri, 1)
echom s:uri
if s:uri != ""
silent exec "!open '".s:uri."'"
:redraw!
else
echo "No URI found in line."
endif
endfunction
nnoremap <leader>w :call HandleURL()<CR>¬
Bạn nên xem nhanh plugin vim này
Về cơ bản đó là những gì đã được giải thích trong một số câu trả lời khác, nhưng cần có cấu hình cụ thể nếu bạn sử dụng trình quản lý plugin :)
Như được mô tả ở trên bởi @kev , được sửa đổi cho môi trường Linux.
Ngoài ra: khi chức năng này được thực thi (Vim 8.1) trong thiết bị đầu cuối của tôi, màn hình Vim bị xáo trộn (chủ yếu là "trống;" tức là văn bản ở đó nhưng không hiển thị). Các :redraw!lệnh (xem https://stackoverflow.com/a/1117742/1904943 ) vẽ lại màn hình.
Thêm vào ~/.vimrc:
nmap <leader>g :call Google()<CR>:redraw!<CR>
fun! Google()
let keyword = expand("<cword>")
let url = "http://www.google.com/search?q=" . keyword
let path = "/usr/bin/"
exec 'silent !"' . path . 'firefox" ' . url
endfun
netrwĐây là một giải pháp cho những người đã loại bỏ netrw( :help netrw-noload) trong vim / neovim. Ví dụ: họ sử dụng một trình quản lý tệp khác nhưvim-dirvish
👉 :!open <c-r><c-a>
hoặc bản đồ gx:
👉 nmap gx :!open <c-r><c-a>
Tôi cũng đang tìm kiếm giải pháp cho vấn đề này vì tôi đã thực sự xóa netrw khỏi tải trong vim hoàn toàn và thay thế nó bằng vim-dirvish. Plugin này có khoảng 500 ~ LOC , so với netrwcủa (11.000+ LOC) .
Tôi không sử dụng chỉnh sửa từ xa nhiều nên vim-dirvishnó đủ mạnh để quản lý quy trình làm việc của tôi (Nó thực sự nhanh hơn netrw~ tác giả tuyên bố gấp 2 lần, tôi cảm thấy nó nhanh hơn thế - nó thực sự tức thời ⚡) rất hữu ích trên các kho / kho codebase lớn. Tôi thậm chí đã thử nó trong kho lưu trữ tệp 10K, liệt kê các tệp qua -vẫn ngay lập tức! Ai đó đã thử nghiệm vim-dirvishchống lạiNerdtree , bạn có thể thấy sự khác biệt.
Tôi cũng bỏ qua vim-vinegarvì -dù sao thì vim-dirvish cũng có ràng buộc và hầu hết cấu hình của vim-vinegarlànetrw chi tiết cụ thể. Nó chỉ là không cần nó. Hai con chim trong một hòn đá!
Vẻ đẹp của plugin này là nó bao hàm triết lý của VINE (Vim không phải là Emacs). Nơi nó tận dụng sức mạnh của các chương trình khác trong thiết bị đầu cuối để thực hiện các thao tác trên tệp, thay vì cố gắng tự làm mọi thứ. Phần quan trọng là các chương trình bên ngoài này tương tác với vim tự nhiên như thế nào. Và điều đó đạt được bằng cách :Shdo, và nó có một phím thuận tiện là .(lệnh dấu chấm , là cách ghi nhớ của lệnh lặp lại), thực hiện điều đó trên cả vùng chọn hoặc dòng thực trên vim-dirvishbộ đệm. Và gõ !rmđể loại bỏ, !mvđể đổi tên.
Vì tôi vô hiệu hóa netrw, ( :help netrw-noload) tôi thấy mình đã đạt gxđến thời gian. Tôi không muốn tải một plugin để lấy gxlại chức năng.
Bây giờ đối với giải pháp, có một ràng buộc trong chế độ lệnh, ctrl-rsau đó ctrl-a( :help c_CTRL-R_CTRL-A), để dán bất kỳ thứ gì bạn có trong con trỏ của mình vào dòng lệnh, vì vậy nếu bạn kết hợp nó với :!xdg-open/:!open (đối với mac), bạn đã đặt khá nhiều.
Có một lý do tại sao :wkhông có ràng buộc bình thường. Tôi ngạc nhiên nhất giải pháp không đòn bẩy lệnh công việc, tôi sử dụng cựu chỉ huy rất nhiều, :s, :g, :v, :argdo, :cdo, và bạn bè. Kết hợp điều này với các chế độ khác nhau, khai thác toàn bộ sức mạnh của vim. Vì vậy, đừng chỉ ở trong một chế độ, hãy cố gắng tận dụng toàn bộ sức mạnh của khí lực.
👉 :!open <c-r><c-a>
Lưu ý !điều đó chỉ ra việc tận dụng sức mạnh của các chương trình bên ngoài bên ngoài vim. CÂY NHO !
Nếu bạn muốn gxchức năng trở lại, bạn chỉ có thể ánh xạ bằng lệnh tương tự:
nmap gx :!open <c-r><c-a>Tôi thích im lặng các ràng buộc của mình, vì vậy việc thêm <silent>và :silsẽ thực hiện thủ thuật ( :help :map-silent)
👉 nmap <silent>gx :sil !open <c-r><c-a><cr>
:!open:!xdg-open:!wslviewTôi sử dụng cả ba nền tảng và chúng hoạt động tuyệt vời. Bạn chỉ có thể sử dụng một trong số chúng cho các ràng buộc vim của mình, ví dụ. :!openvà chỉ bí danh trong bạn bashrc/zshrc/fish configcác openlệnh để bất cứ chương trình nền tảng cụ thể mà bạn có.
ví dụ. alias open = wslview
Bằng cách đó, tôi vimrcvẫn là nền tảng bất khả tri và tôi sẽ chỉ giải quyết những mâu thuẫn thông qua bashrc/zshrc/fish config.