Öffnen Sie die URL unter dem Cursor in Vim mit dem Browser
103
Ich benutze Twitvim zum ersten Mal. Als ich alle URLs dort sah, fragte ich mich, ob es eine Möglichkeit gibt, die URL unter dem Cursor in Ihrem bevorzugten Browser oder einem bestimmten zu öffnen.
Textcursor ... aber wenn Sie eine Möglichkeit kennen, unter dem Mauszeiger zu tun, wäre das auch cool
Mauro Morales
1
mittlere Maustaste auf einen Link in vim klicken hat immer für mich funktioniert, ich weiß aber nicht wie
Oleg Mikheev
2
Ein mittlerer Klick zum Öffnen ist wahrscheinlich eine Funktion des Terminals, nicht vim.
Leonid Shevtsov
Antworten:
188
Aktualisiert: von tpopes Tweet heute
Drücken Sie gx. Sie können den Browser anpassen. Auf Gnome und Mac OS X es bereits verwenden gnome-open/ open. Im Allgemeinen können Sie g:netrw_browsex_vieweralles einstellen , was Sie wollen.
Ursprüngliche Antwort:
Ich erinnere mich nicht, woher ich diese Funktion habe. Es gibt einen Fehler mit Hash (#) in der URL, aber die Funktion funktioniert gut genug, dass ich mich nicht darum kümmere, ihn zu beheben.
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>
Hinweis: Wenn Sie nicht auf dem Mac arbeiten, verwenden Sie gnome-open/ xdg-openfür Linux oder "Pfad zu Ihrem Webbrowser" für Windows
Ich denke, ich werde Ihre Lösung verwenden :) Danke ... Ich würde gerne sehen, ob es eine Möglichkeit gibt, nur die URL unter den Cursor zu bekommen, aber ich kenne nicht viel Vimscript, also muss ich daran arbeiten .
Mauro Morales
14
gxist so mächtig, danke! Es werden auch Dateien mit geeigneten Anwendungen ™ geöffnet.
Blinry
Ich denke, es ist g: netrw_browsex_viewer (ohne 'r')
Jack
2
Ich öffne gerne eine URL mit einem? und ein # drin. Ich denke, netrw verwendet jetzt cfile anstelle von cWORD, also URLs mit '?' sind mit dieser Methode nicht mehr zu öffnen. Ich habe hier Ihre Lösung ausprobiert und '#' in der URL wird durch den alternativen Dateinamen ersetzt. exec "! open" .shellescape (uri, 1) scheint das Problem behoben zu haben.
Wenn Sie Vim 7.4 oder höher verwenden, setzen Sie den Cursor im normalen Modus unter die URL und klicken Sie auf gx. Die URL wird automatisch im Browser geöffnet
Wie stellen Sie den Browser in diesem Beispiel auf Chrome ein? (oder welcher Browser auch immer)
jm3
@ jm3 Try :h netrw_gx: * Für Windows 32 oder 64 werden die URLs url und FileProtocolHandler verwendet. * für Gnome (mit Gnome-Open): Gnome-Open wird verwendet. * für KDE (mit kfmclient): kfmclient wird verwendet * für Mac OS X: open wird verwendet. * Andernfalls wird das Plugin netrwFileHandler verwendet.
kba steht mit Monica
1
ein wenig vom Thema abweichend, aber wie zeichnet man den Bildschirm in ein GIF auf? Liebe es!
Peter Perháč
@ jm3 Welche mit dem Standard-Webbrowser des Systems
Ich denke, dies wird mich auf die Lösung hinweisen, nach der ich irgendwann suche ... und diese Funktion wird sehr praktisch sein. Vielen Dank!
Mauro Morales
2
Fügen Sie der .vimrc-Datei die folgende Zeile hinzu:
nmap <leader><space> yiW:!xdg-open <c-r>" &<cr>
Im normalen Modus wird durch Drücken von \ das aktuelle Wort ausgewählt und als Adresse im Webbrowser geöffnet.
Leader ist standardmäßig \ (aber ich habe es mit zugeordnet let mapleader = ","). In ähnlicher Weise können Sie mit imap eine Tastenfolge im Einfügemodus zuordnen (wenn es sich jedoch um eine 2-Tastenfolge handelt, wird wahrscheinlich ein Standardverhalten außer Kraft gesetzt).
Ok, also mit den Antworten von @tungd und @kev und ein wenig Recherche bin ich zu diesem Skript gekommen, das genau so funktioniert, wie ich es brauche. Wie @tungd sagte, kann das # ein Problem geben, wenn es sich in einer URL befindet, aber ich finde das cool. Wenn jemand einen besseren Ausdruck für die URL hat, wird es begrüßt.
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>
Ich bin ziemlich spät zu dieser Party, aber hier ist eine andere Möglichkeit, die unter Windows 7 besonders gut funktioniert.
Installieren Sie sowohl vim-shell als auch vim-misc in vim. Ich empfehle, dies über das fantastische Pathogen- Plugin und dann einfach cd ~/vimfiles/bundle & git clone [email protected]:xolox/vim-misc.git & git clone [email protected]:xolox/vim-shell.gitüber msysgit zu tun. ( Diese beiden Plugins öffnen URLs in Ihrem Standardbrowser, ohne zusätzliche Eingabeaufforderungen oder anderen albernen Unsinn zu erstellen, der normalerweise in Windows erforderlich ist. Sie können URLs in Vim folgendermaßen öffnen : :Open http://duckduckgo.com. Probieren Sie es aus. Es wird Ihnen gefallen. )
Erstellen Sie einige Vim-Zuordnungen, damit Sie die Zeile unter dem Cursor schnell in den Browser übertragen können. Ich würde dir das zuordnen (für mich ist das ,uaus dem normalen Modus). Hier ist wie:
nnoremap u: exec "Open" .getline (".")
Um diese Zuordnung zu verwenden, geben Sie Ihre Leader-Taste im normalen Modus + u ein. Es sollte die Zeile unter Ihrem Cursor lesen und in Ihrem Standardbrowser öffnen.
Dies ist eine Art verbesserte Version des Skripts, das ursprünglich von @tungd hier https://stackoverflow.com/a/9459366/7631731 vorgeschlagen wurde . Behält den vim-Kontext bei und behandelt URLs mit "#" korrekt.
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>¬
Es ist im Grunde das, was in einigen anderen Antworten erklärt wurde, aber eine spezielle Konfiguration ist erforderlich, wenn Sie einen Plugin-Manager verwenden :)
Nebenbei: Als diese Funktion in meinem Terminal ausgeführt wurde (Vim 8.1), war der Vim-Bildschirm verschleiert (meistens "ausgeblendet"; dh der Text war vorhanden, aber nicht sichtbar). Der :redraw!Befehl (siehe https://stackoverflow.com/a/1117742/1904943 ) zeichnet den Bildschirm neu.
Dies ist eine Lösung für Personen, die netrw( :help netrw-noload) in vim / neovim entfernt haben. Zum Beispiel verwenden sie einen anderen Dateimanager wievim-dirvish
TLDR:
👉 :!open <c-r><c-a>
oder Karte gx:
👉 nmap gx :!open <c-r><c-a>
Also nur ein bisschen Hintergrund:
Ich habe auch nach einer Lösung für dieses Problem gesucht, da ich netrw tatsächlich aus dem vollständigen Laden in vim entfernt und durch ersetzt habe vim-dirvish. Dieses Plugin hat ungefähr 500 ~ LOC im Vergleich zu netrw's (11.000+ LOC) .
Ich verwende die Fernbearbeitung nicht viel und bin daher vim-dirvishleistungsstark genug, um meinen Workflow zu verwalten (es ist tatsächlich schneller als netrw~ der Autor behauptet 2x, ich denke , es ist schneller als das - es ist wirklich augenblicklich ⚡), sehr nützlich bei großen Codebasen / Repositorys. Ich habe es sogar in einem 10K-Datei-Repo versucht und Dateien über -noch sofort aufgelistet! Jemand getestet vim-dirvishgegenNerdtree , können Sie den Unterschied sehen.
Ich fiel vim-vinegarauch , weil vim-dirvish haben die -ohnehin verbindlich, und die meisten der Konfiguration vim-vinegarist netrwSpezifika. Es braucht es einfach nicht. Zwei Fliegen in einer Klappe!
Das Schöne an diesem Plugin ist, dass es die Philosophie von VINE umfasst (Vim ist nicht Emacs). Wo es die Leistung anderer Programme im Terminal nutzt, um Dateimanipulationen durchzuführen, anstatt zu versuchen, alles selbst zu tun. Der wichtige Teil ist, wie natürlich diese externen Programme mit vim interagieren. Und das wird erreicht durch :Shdo, und es hat eine bequeme Taste von .(Punktbefehl , der für den Wiederholungsbefehl mnemonisch ist), dies sowohl für die Auswahl als auch für die tatsächliche Zeile in einem vim-dirvishPuffer zu tun . Und geben Sie !rmzum Entfernen und !mvUmbenennen ein.
Da ich netrw deaktiviere, ( :help netrw-noload) griff ich gxvon Zeit zu Zeit. Ich wollte kein Plugin laden, um die gxFunktionalität wieder herzustellen .
Jetzt für die Lösung, es gibt eine im Befehlsmodus zu binden, ctrl-rdann ctrl-a( :help c_CTRL-R_CTRL-A) einfügen , was Sie in Ihren Cursor an die Befehlszeilen haben, wenn Sie also , dass mit kombinieren :!xdg-open/ :!open(für Mac), Sie ziemlich viel Set.
Es gibt einen Grund, warum :wes keine normalen Bindungen gibt. Ich bin die meisten Lösung überrascht nicht Hebel Befehl Workflow, ich viel ex-Befehl zu verwenden, :s, :g, :v, :argdo, :cdo, und Freunde. Wenn Sie dies mit verschiedenen Modi kombinieren, können Sie die volle Leistung von vim nutzen. Bleiben Sie also nicht nur in einem Modus, sondern versuchen Sie, die volle Leistung von vim zu nutzen.
Also der volle Workflow. Während Sie Ihren Cursor über der URL haben, ist dies nur ein einziger Schritt: 😊
👉 :!open <c-r><c-a>
Beachten Sie, !was darauf hinweist, dass die Leistung externer Programme außerhalb von vim genutzt wird. WEIN !
Wenn Sie die gxFunktionalität wiederherstellen möchten , können Sie sie einfach mit demselben Befehl zuordnen:
nmap gx :!open <c-r><c-a>
Ich mag meine Bindungen zu schweigen, so dass das Hinzufügen <silent>und :silden Trick ( :help :map-silent)
👉 nmap <silent>gx :sil !open <c-r><c-a><cr>
Hinweis zu plattformspezifischen Programmen zum Öffnen einer URL:
Mac hat :!open
Linux hat :!xdg-open
Windows (WSL2) hat :!wslview
Ich benutze alle drei Plattformen und sie funktionieren großartig. Sie können einfach eine davon für Ihre Vim-Bindungen verwenden, z. :!openund nur Alias in Ihrem bashrc/zshrc/fish configden openBefehl zu , was plattformspezifischen Programm , das Sie haben.
z.B. alias open = wslview
Auf diese Weise vimrcbleibt meine Plattform plattformunabhängig und ich werde mich nur über mit den Inkonsistenzen befassen bashrc/zshrc/fish config.
Antworten:
Aktualisiert: von tpopes Tweet heute
Drücken Sie
gx
. Sie können den Browser anpassen. Auf Gnome und Mac OS X es bereits verwendengnome-open
/open
. Im Allgemeinen können Sieg:netrw_browsex_viewer
alles einstellen , was Sie wollen.Ursprüngliche Antwort:
Ich erinnere mich nicht, woher ich diese Funktion habe. Es gibt einen Fehler mit Hash (#) in der URL, aber die Funktion funktioniert gut genug, dass ich mich nicht darum kümmere, ihn zu beheben.
Hinweis: Wenn Sie nicht auf dem Mac arbeiten, verwenden Sie
gnome-open
/xdg-open
für Linux oder "Pfad zu Ihrem Webbrowser" für Windowsquelle
gx
ist so mächtig, danke! Es werden auch Dateien mit geeigneten Anwendungen ™ geöffnet.Wenn Sie Vim 7.4 oder höher verwenden, setzen Sie den Cursor im normalen Modus unter die URL und klicken Sie auf
gx
. Die URL wird automatisch im Browser geöffnetquelle
:h netrw_gx
: * Für Windows 32 oder 64 werden die URLs url und FileProtocolHandler verwendet. * für Gnome (mit Gnome-Open): Gnome-Open wird verwendet. * für KDE (mit kfmclient): kfmclient wird verwendet * für Mac OS X: open wird verwendet. * Andernfalls wird das Plugin netrwFileHandler verwendet.Ich benutze dieses Skript, um
keyword
unter dem Cursor nach Google zu suchen :Sie sollten
getline('.')
und verwendenmatchstr()
, um URL unter Cursor zu extrahieren. Der Rest ist der gleiche.quelle
Fügen Sie der .vimrc-Datei die folgende Zeile hinzu:
Im normalen Modus wird durch Drücken von \ das aktuelle Wort ausgewählt und als Adresse im Webbrowser geöffnet.
Leader ist standardmäßig \ (aber ich habe es mit zugeordnet
let mapleader = ","
). In ähnlicher Weise können Sie mit imap eine Tastenfolge im Einfügemodus zuordnen (wenn es sich jedoch um eine 2-Tastenfolge handelt, wird wahrscheinlich ein Standardverhalten außer Kraft gesetzt).quelle
Ok, also mit den Antworten von @tungd und @kev und ein wenig Recherche bin ich zu diesem Skript gekommen, das genau so funktioniert, wie ich es brauche. Wie @tungd sagte, kann das # ein Problem geben, wenn es sich in einer URL befindet, aber ich finde das cool. Wenn jemand einen besseren Ausdruck für die URL hat, wird es begrüßt.
quelle
Ich bin ziemlich spät zu dieser Party, aber hier ist eine andere Möglichkeit, die unter Windows 7 besonders gut funktioniert.
Installieren Sie sowohl vim-shell als auch vim-misc in vim. Ich empfehle, dies über das fantastische Pathogen- Plugin und dann einfach
cd ~/vimfiles/bundle & git clone [email protected]:xolox/vim-misc.git & git clone [email protected]:xolox/vim-shell.git
über msysgit zu tun. ( Diese beiden Plugins öffnen URLs in Ihrem Standardbrowser, ohne zusätzliche Eingabeaufforderungen oder anderen albernen Unsinn zu erstellen, der normalerweise in Windows erforderlich ist. Sie können URLs in Vim folgendermaßen öffnen ::Open http://duckduckgo.com
. Probieren Sie es aus. Es wird Ihnen gefallen. )Erstellen Sie einige Vim-Zuordnungen, damit Sie die Zeile unter dem Cursor schnell in den Browser übertragen können. Ich würde dir das zuordnen (für mich ist das
,u
aus dem normalen Modus). Hier ist wie:nnoremap u: exec "Open" .getline (".")
Um diese Zuordnung zu verwenden, geben Sie Ihre Leader-Taste im normalen Modus + u ein. Es sollte die Zeile unter Ihrem Cursor lesen und in Ihrem Standardbrowser öffnen.
quelle
Dies ist eine Art verbesserte Version des Skripts, das ursprünglich von @tungd hier https://stackoverflow.com/a/9459366/7631731 vorgeschlagen wurde . Behält den vim-Kontext bei und behandelt URLs mit "#" korrekt.
quelle
Sie sollten einen kurzen Blick auf dieses Vim-Plugin werfen
henrik / vim-open-url
Es ist im Grunde das, was in einigen anderen Antworten erklärt wurde, aber eine spezielle Konfiguration ist erforderlich, wenn Sie einen Plugin-Manager verwenden :)
quelle
Wie oben von @kev beschrieben , modifiziert für Linux-Umgebungen.
Nebenbei: Als diese Funktion in meinem Terminal ausgeführt wurde (Vim 8.1), war der Vim-Bildschirm verschleiert (meistens "ausgeblendet"; dh der Text war vorhanden, aber nicht sichtbar). Der
:redraw!
Befehl (siehe https://stackoverflow.com/a/1117742/1904943 ) zeichnet den Bildschirm neu.Hinzufügen zu
~/.vimrc
:quelle
Dies ist einfach. Ersetzen Sie einfach "Start" durch das, was Ihr Betriebssystem verwendet
GU für go url!
quelle
Lösung für Leute, die entladen
netrw
Dies ist eine Lösung für Personen, die
netrw
(:help netrw-noload
) in vim / neovim entfernt haben. Zum Beispiel verwenden sie einen anderen Dateimanager wievim-dirvish
TLDR:
👉
:!open <c-r><c-a>
oder Karte
gx
:👉
nmap gx :!open <c-r><c-a>
Also nur ein bisschen Hintergrund:
Ich habe auch nach einer Lösung für dieses Problem gesucht, da ich netrw tatsächlich aus dem vollständigen Laden in vim entfernt und durch ersetzt habe
vim-dirvish
. Dieses Plugin hat ungefähr 500 ~ LOC im Vergleich zunetrw
's (11.000+ LOC) .Ich verwende die Fernbearbeitung nicht viel und bin daher
vim-dirvish
leistungsstark genug, um meinen Workflow zu verwalten (es ist tatsächlich schneller alsnetrw
~ der Autor behauptet 2x, ich denke , es ist schneller als das - es ist wirklich augenblicklich ⚡), sehr nützlich bei großen Codebasen / Repositorys. Ich habe es sogar in einem 10K-Datei-Repo versucht und Dateien über-
noch sofort aufgelistet! Jemand getestetvim-dirvish
gegenNerdtree
, können Sie den Unterschied sehen.Ich fiel
vim-vinegar
auch , weil vim-dirvish haben die-
ohnehin verbindlich, und die meisten der Konfigurationvim-vinegar
istnetrw
Spezifika. Es braucht es einfach nicht. Zwei Fliegen in einer Klappe!Das Schöne an diesem Plugin ist, dass es die Philosophie von VINE umfasst (Vim ist nicht Emacs). Wo es die Leistung anderer Programme im Terminal nutzt, um Dateimanipulationen durchzuführen, anstatt zu versuchen, alles selbst zu tun. Der wichtige Teil ist, wie natürlich diese externen Programme mit vim interagieren. Und das wird erreicht durch
:Shdo
, und es hat eine bequeme Taste von.
(Punktbefehl , der für den Wiederholungsbefehl mnemonisch ist), dies sowohl für die Auswahl als auch für die tatsächliche Zeile in einemvim-dirvish
Puffer zu tun . Und geben Sie!rm
zum Entfernen und!mv
Umbenennen ein.Da ich netrw deaktiviere, (
:help netrw-noload
) griff ichgx
von Zeit zu Zeit. Ich wollte kein Plugin laden, um diegx
Funktionalität wieder herzustellen .Jetzt für die Lösung, es gibt eine im Befehlsmodus zu binden, ctrl-rdann ctrl-a(
:help c_CTRL-R_CTRL-A
) einfügen , was Sie in Ihren Cursor an die Befehlszeilen haben, wenn Sie also , dass mit kombinieren:!xdg-open
/:!open
(für Mac), Sie ziemlich viel Set.Es gibt einen Grund, warum
:w
es keine normalen Bindungen gibt. Ich bin die meisten Lösung überrascht nicht Hebel Befehl Workflow, ich viel ex-Befehl zu verwenden,:s
,:g
,:v
,:argdo
,:cdo
, und Freunde. Wenn Sie dies mit verschiedenen Modi kombinieren, können Sie die volle Leistung von vim nutzen. Bleiben Sie also nicht nur in einem Modus, sondern versuchen Sie, die volle Leistung von vim zu nutzen.Also der volle Workflow. Während Sie Ihren Cursor über der URL haben, ist dies nur ein einziger Schritt: 😊
👉
:!open <c-r><c-a>
Beachten Sie,
!
was darauf hinweist, dass die Leistung externer Programme außerhalb von vim genutzt wird. WEIN !Wenn Sie die
gx
Funktionalität wiederherstellen möchten , können Sie sie einfach mit demselben Befehl zuordnen:nmap gx :!open <c-r><c-a>
Ich mag meine Bindungen zu schweigen, so dass das Hinzufügen
<silent>
und:sil
den Trick (:help :map-silent
)👉
nmap <silent>gx :sil !open <c-r><c-a><cr>
Hinweis zu plattformspezifischen Programmen zum Öffnen einer URL:
:!open
:!xdg-open
:!wslview
Ich benutze alle drei Plattformen und sie funktionieren großartig. Sie können einfach eine davon für Ihre Vim-Bindungen verwenden, z.
:!open
und nur Alias in Ihrembashrc/zshrc/fish config
denopen
Befehl zu , was plattformspezifischen Programm , das Sie haben.z.B.
alias open = wslview
Auf diese Weise
vimrc
bleibt meine Plattform plattformunabhängig und ich werde mich nur über mit den Inkonsistenzen befassenbashrc/zshrc/fish config
.quelle