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?
kursor tekstowy ... ale jeśli znasz sposób na zrobienie tego pod kursorem myszy, to też byłoby fajne
Mauro Morales
1
kliknięcie środkowym przyciskiem myszy w link w vimie zawsze działało dla mnie, chociaż nie wiem jak
Oleg Mikheev
2
środkowe kliknięcie, aby otworzyć, jest prawdopodobnie funkcją terminala, a nie vimem.
Leonid Shevtsov
Odpowiedzi:
189
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_viewerwszystko, 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-opendla systemu Linux lub „ścieżki do przeglądarki internetowej” dla systemu Windows
Myślę, że skorzystam z twojego rozwiązania :) dzięki ... Chciałbym sprawdzić, czy jest sposób, aby uzyskać tylko adres URL pod kursorem, ale nie znam zbyt wiele Vimscript, więc będę musiał nad tym popracować .
Mauro Morales
14
gxjest tak potężny, dzięki! Otwiera również pliki za pomocą odpowiednich aplikacji ™.
blinry
Myślę, że to g: netrw_browsex_viewer (bez 'r')
Jack,
2
Lubię otwierać adres URL z? i # w nim. Myślę, że netrw używa teraz cfile zamiast cWORD, więc adresy URL z '?' nie można ich już otworzyć za pomocą tej metody. Wypróbowałem tutaj twoje rozwiązanie i znak „#” w adresie URL zostałby zastąpiony alternatywną nazwą pliku. exec "! open" .shellescape (uri, 1) prawdopodobnie rozwiązało problem.
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
jak ustawiasz przeglądarkę na Chrome w tym przykładzie? (lub jakąkolwiek przeglądarkę)
jm3
@ jm3 Try :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.
kba stoi z Moniką
1
trochę nie na temat, ale jak nagrać ekran na gif? kocham to!
Peter Perháč
@ jm3 Który używa domyślnej przeglądarki internetowej systemu
Myślę, że to wskaże mi ostatecznie rozwiązanie, którego szukam ... plus ta funkcja będzie bardzo przydatna. Dzięki!
Mauro Morales
2
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 [email protected]:xolox/vim-misc.git & git clone [email protected]:xolox/vim-shell.gitz 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.comSpró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 ,uz 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>¬
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.
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
TLDR:
👉 :!open <c-r><c-a>
lub mapa gx:
👉 nmap gx :!open <c-r><c-a>
Więc tylko trochę tł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-dirvishjest 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-dirvishprzedNerdtree któremu , możesz zobaczyć różnicę.
Rzuciłem vim-vinegarzbyt ponieważ vim-dirvish oddać -w każdym razie wiążące, a większość konfiguracji vim-vinegarjest netrwspecyfika. 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-dirvishbuforze. Wpisz, !rmaby usunąć, !mvzmienić nazwę.
Odkąd wyłączam netrw, ( :help netrw-noload) gxod czasu do czasu sięgam . Nie chciałem ładować wtyczki, aby odzyskać gxfunkcjonalność.
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 :wnie 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.
A więc pełny przepływ pracy. Gdy masz kursor na górze adresu URL, to tylko jeden krok: 😊
👉 :!open <c-r><c-a>
Zwróć uwagę, !co wskazuje na wykorzystanie mocy zewnętrznych programów poza vimem. WINOROŚLI !
Jeśli chcesz gxodzyskać funkcjonalność, możesz po prostu zmapować za pomocą tego samego polecenia:
Uwaga na temat programów specyficznych dla platformy do otwierania adresu URL:
Mac ma :!open
Linux ma :!xdg-open
Windows (WSL2) ma :!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. :!openi zaledwie alias twojej bashrc/zshrc/fish configtej openkomendy do programu niezależnie od platformy masz.
na przykład. alias open = wslview
W ten sposób vimrcpozostanę agnostykiem platformy i zajmę się niespójnościami za pośrednictwem bashrc/zshrc/fish config.
Odpowiedzi:
Zaktualizowano: z dzisiejszego tweeta tpope
Naciśnij
gx
. Możesz dostosować przeglądarkę. W Gnome i Mac OS X jest już używanygnome-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.
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źródło
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źródło
: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:Powinieneś użyć
getline('.')
i,matchstr()
aby wyodrębnić adres URL pod kursorem. Reszta jest taka sama.źródło
Dodaj następujący wiersz do pliku .vimrc:
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).źródło
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.
źródło
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 [email protected]:xolox/vim-misc.git & git clone [email protected]: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.
źródło
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 „#”.
źródło
Powinieneś rzucić okiem na tę wtyczkę vim
henrik / vim-open-url
Zasadniczo wyjaśniono to w innych odpowiedziach, ale wymagana jest konkretna konfiguracja, jeśli używasz menedżera wtyczek :)
źródło
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
:źródło
To proste, po prostu zastąp „start” tym, czego używa Twój system operacyjny
GU dla go url!
źródło
Rozwiązanie dla osób rozładowujących
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
TLDR:
👉
:!open <c-r><c-a>
lub mapa
gx
:👉
nmap gx :!open <c-r><c-a>
Więc tylko trochę tł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 donetrw
„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ś testowanevim-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ść konfiguracjivim-vinegar
jestnetrw
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 wvim-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.A więc pełny przepływ pracy. Gdy masz kursor na górze adresu URL, to tylko jeden krok: 😊
👉
:!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>
Uwaga na temat programów specyficznych dla platformy do otwierania adresu URL:
:!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 twojejbashrc/zshrc/fish config
tejopen
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średnictwembashrc/zshrc/fish config
.źródło