Po raz pierwszy używam Twitvim. Gdy zobaczyłem wszystkie adresy URL, zacząłem się zastanawiać, czy istnieje sposób, aby otworzyć adres URL pod kursorem w Twojej ulubionej lub określonej przeglądarce?
Po raz pierwszy używam Twitvim. Gdy zobaczyłem wszystkie adresy URL, zacząłem się zastanawiać, czy istnieje sposób, aby otworzyć adres URL pod kursorem w Twojej ulubionej lub określonej przeglądarce?
Odpowiedzi:
Zaktualizowano: z dzisiejszego tweeta tpope
Naciśnij gx
. Możesz dostosować przeglądarkę. W Gnome i Mac OS X jest już używany gnome-open
/ open
. Ogólnie możesz ustawić g:netrw_browsex_viewer
wszystko, co chcesz.
Oryginalna odpowiedź:
Nie pamiętam, skąd mam tę funkcję. W adresie URL jest błąd z hashem (#), ale funkcja działa na tyle dobrze, że nie będę zawracał sobie głowy jej poprawianiem.
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>
Uwaga: jeśli nie korzystasz z komputera Mac, użyj gnome-open
/ xdg-open
dla systemu Linux lub „ścieżki do przeglądarki internetowej” dla systemu Windows
gx
jest tak potężny, dzięki! Otwiera również pliki za pomocą odpowiednich aplikacji ™.
Jeśli używasz Vim 7.4 lub nowszego, w trybie normalnym, umieść kursor pod adresem URL, a następnie kliknij gx
, adres URL zostanie automatycznie otwarty w przeglądarce
:h netrw_gx
: * dla Windows 32 lub 64, używane są pliki DLL z adresem URL i FileProtocolHandler. * dla Gnome (z gnome-open): używany jest gnome-open. * dla KDE (z kfmclient): używany jest kfmclient * dla Mac OS X: używany jest open. * w przeciwnym razie używana jest wtyczka netrwFileHandler.
Używam tego skryptu do wyszukiwania gooogle keyword
pod kursorem:
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
Powinieneś użyć getline('.')
i, matchstr()
aby wyodrębnić adres URL pod kursorem. Reszta jest taka sama.
Dodaj następujący wiersz do pliku .vimrc:
nmap <leader><space> yiW:!xdg-open <c-r>" &<cr>
W normalnym trybie naciśnięcie \ powoduje wybranie bieżącego słowa i otwarcie go jako adresu w przeglądarce internetowej.
Lider domyślnie to \ (ale mapowałem go do, z let mapleader = ","
). Podobnie, używając imap, możesz odwzorować jakąś sekwencję klawiszy w trybie wstawiania (ale wtedy, jeśli jest to sekwencja 2 klawiszy, prawdopodobnie nadpisuje niektóre domyślne zachowanie).
Ok, więc korzystając z odpowiedzi z @tungd i @kev oraz trochę badań, otrzymałem ten skrypt, który działa dokładnie tak, jak tego potrzebuję. Jak @tungd powiedział, że # może powodować problem, jeśli znajduje się w adresie URL, ale nie przeszkadza mi to, jeśli ktoś ma lepsze wyrażenie dla adresu URL, zostanie to mile widziane.
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>
Spóźniłem się na tę imprezę, ale oto inny sposób na zrobienie tego, który działa szczególnie dobrze w systemie Windows 7.
Zainstaluj zarówno vim-shell, jak i vim-misc w vimie. Polecam zrobić to za pomocą niesamowitej wtyczki Pathogen, a następnie po prostu cd ~/vimfiles/bundle & git clone git@github.com:xolox/vim-misc.git & git clone git@github.com:xolox/vim-shell.git
z msysgit. ( Te dwie wtyczki otwierają adresy URL w domyślnej przeglądarce bez tworzenia dodatkowych poleceń lub innych głupich bzdur zwykle wymaganych w oknach. Możesz otwierać adresy URL w Vimie w ten sposób:. :Open http://duckduckgo.com
Spróbuj. Spodoba ci się. )
Utwórz kilka mapowań Vima , aby szybko przenieść linię pod kursorem do przeglądarki. Zmapowałbym to na u (dla mnie to ,u
z trybu normalnego). Oto jak:
nnoremap u: exec "Otwórz" .getline (".")
Aby użyć tego mapowania, wpisz swój klawisz Leader z trybu normalnego + u. Powinien przeczytać wiersz pod kursorem i otworzyć go w domyślnej przeglądarce.
To rodzaj ulepszonej wersji skryptu pierwotnie zaproponowanego przez @tungd tutaj https://stackoverflow.com/a/9459366/7631731 . Zachowuje kontekst Vima i poprawnie obsługuje adresy URL zawierające znak „#”.
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>¬
Powinieneś rzucić okiem na tę wtyczkę vim
Zasadniczo wyjaśniono to w innych odpowiedziach, ale wymagana jest konkretna konfiguracja, jeśli używasz menedżera wtyczek :)
Jak opisano powyżej @kev , zmodyfikowano dla środowisk Linux.
Na marginesie: kiedy ta funkcja została wykonana (Vim 8.1) na moim terminalu, ekran Vima został zaciemniony (przeważnie „wygaszony”; tj. Tekst był tam, ale nie był widoczny). :redraw!
Poleceń (patrz https://stackoverflow.com/a/1117742/1904943 ) rysuje ekranu.
Dodaj do ~/.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
Jest to rozwiązanie dla osób, które usunęły netrw
( :help netrw-noload
) w vim / neovim. Na przykład używają innego menedżera plików, takiego jakvim-dirvish
👉 :!open <c-r><c-a>
lub mapa gx
:
👉 nmap gx :!open <c-r><c-a>
Szukałem również rozwiązania tego problemu, ponieważ w rzeczywistości całkowicie usunąłem netrw z ładowania w vimie i zastąpiłem go vim-dirvish
. Wtyczka ta ma około 500 ~ LOC , w porównaniu do netrw
„s (11,000+ LOC) .
Nie używam zbytnio zdalnej edycji, więc vim-dirvish
jest wystarczająco potężny, aby zarządzać moim przepływem pracy (w rzeczywistości jest szybszy niż netrw
~ autor twierdzi 2x, czuję, że jest szybszy - jest naprawdę natychmiastowy ⚡) bardzo przydatny w dużych bazach kodu / repozytoriach. Próbowałem nawet w repozytorium plików 10K, wyświetlając pliki w trybie -
natychmiastowym! Ktoś testowane vim-dirvish
przedNerdtree
któremu , możesz zobaczyć różnicę.
Rzuciłem vim-vinegar
zbyt ponieważ vim-dirvish oddać -
w każdym razie wiążące, a większość konfiguracji vim-vinegar
jest netrw
specyfika. Po prostu tego nie potrzebuje. Dwie pieczenie na jednym ogniu!
Piękno tej wtyczki polega na tym, że zawiera ona filozofię VINE (Vim to nie Emacs). Tam, gdzie wykorzystuje moc innych programów w terminalu do manipulacji plikami, zamiast próbować robić wszystko samodzielnie. Ważną częścią jest naturalna interakcja tych zewnętrznych programów z vimem. Osiąga się to przez :Shdo
, i ma wygodny klawisz .
(polecenie kropki , które jest mnemoniczne dla polecenia powtarzania), zrób to zarówno na zaznaczeniu, jak i na rzeczywistej linii w vim-dirvish
buforze. Wpisz, !rm
aby usunąć, !mv
zmienić nazwę.
Odkąd wyłączam netrw, ( :help netrw-noload
) gx
od czasu do czasu sięgam . Nie chciałem ładować wtyczki, aby odzyskać gx
funkcjonalność.
Teraz rozwiązanie, istnieje powiązanie w trybie poleceń, ctrl-ra następnie ctrl-a( :help c_CTRL-R_CTRL-A
), aby wkleić cokolwiek masz w kursorze do wiersza poleceń, więc jeśli połączysz to z :!xdg-open
/:!open
(dla mac), prawie ustawisz.
Jest powód, dla którego :w
nie ma normalnych wiązań. Dziwię najbardziej rozwiązanie nie dźwigni komenda workflow, używam byłą komendę dużo, :s
, :g
, :v
, :argdo
, :cdo
, i przyjaciół. Łącząc to z różnymi trybami, wykorzystuje pełną moc vim. Więc nie pozostań w jednym trybie, spróbuj wykorzystać pełną moc vim.
👉 :!open <c-r><c-a>
Zwróć uwagę, !
co wskazuje na wykorzystanie mocy zewnętrznych programów poza vimem. WINOROŚLI !
Jeśli chcesz gx
odzyskać funkcjonalność, możesz po prostu zmapować za pomocą tego samego polecenia:
nmap gx :!open <c-r><c-a>
Lubię wyciszać moje wiązania, więc dodanie <silent>
i :sil
załatwi sprawę ( :help :map-silent
)
👉 nmap <silent>gx :sil !open <c-r><c-a><cr>
:!open
:!xdg-open
:!wslview
Używam wszystkich trzech platform i działają świetnie. Możesz po prostu użyć jednego z nich do swoich wiązań vima, np. :!open
i zaledwie alias twojej bashrc/zshrc/fish config
tej open
komendy do programu niezależnie od platformy masz.
na przykład. alias open = wslview
W ten sposób vimrc
pozostanę agnostykiem platformy i zajmę się niespójnościami za pośrednictwem bashrc/zshrc/fish config
.