Sto usando Twitvim per la prima volta. Vedere tutti gli URL lì dentro mi ha fatto pensare, c'è un modo per aprire l'URL sotto il cursore nel tuo browser preferito o in uno specificato?
Sto usando Twitvim per la prima volta. Vedere tutti gli URL lì dentro mi ha fatto pensare, c'è un modo per aprire l'URL sotto il cursore nel tuo browser preferito o in uno specificato?
Risposte:
Aggiornato: dal tweet di tpope di oggi
Premere gx. Puoi personalizzare il browser. Su Gnome e Mac OS X è già utilizzato gnome-open/ open. In genere puoi impostare g:netrw_browsex_viewertutto ciò che desideri.
Risposta originale:
Non ricordo dove ottengo questa funzione. C'è un bug con hash (#) nell'URL, ma la funzione funziona abbastanza bene che non mi preoccuperò di risolverlo.
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>
Nota: se non sei su Mac, utilizza gnome-open/ xdg-openper Linux o "percorso del browser web" per Windows
gxè così potente, grazie! Inoltre apre i file con le applicazioni appropriate ™.
Se stai usando Vim 7.4 o successivo, in modalità normale, posiziona il cursore sotto l'URL, quindi fai clic gx, l'URL verrà aperto automaticamente nel browser
:h netrw_gx: * per Windows 32 o 64, vengono utilizzati l'URL e le DLL FileProtocolHandler. * per Gnome (con gnome-open): viene utilizzato gnome-open. * per KDE (con kfmclient): viene utilizzato kfmclient * per Mac OS X: viene utilizzato open. * altrimenti viene utilizzato il plugin netrwFileHandler.
Uso questo script per cercare su gooogle keywordsotto il cursore:
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
Dovresti usare getline('.')e matchstr()per estrarre l'URL sotto il cursore. Il riposo è lo stesso.
Aggiungi la seguente riga al file .vimrc:
nmap <leader><space> yiW:!xdg-open <c-r>" &<cr>
Quindi in modalità normale premendo \ seleziona la parola corrente e la apre come indirizzo nel browser web.
Il leader di default è \ (ma l'ho mappato a, con let mapleader = ","). Allo stesso modo, usando imap puoi mappare alcune sequenze di tasti in modalità di inserimento (ma poi, se è una sequenza di 2 tasti, probabilmente sovrascriverà un comportamento predefinito).
Ok, quindi usando le risposte di @tungd e @kev e un po 'di ricerca sono finito con questo script, che funziona proprio come mi serve. Come ha detto @tungd, # può dare un problema se all'interno di un URL, ma a me va bene, se qualcuno ha un'espressione migliore per l'URL, sarà il benvenuto.
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>
Sono abbastanza in ritardo per questa festa, ma ecco un altro modo per farlo che funziona particolarmente bene su Windows 7.
Installa sia vim-shell che vim-misc in vim, ti consiglio di farlo tramite il fantastico plugin Pathogen e poi semplicemente cd ~/vimfiles/bundle & git clone git@github.com:xolox/vim-misc.git & git clone git@github.com:xolox/vim-shell.gitda msysgit. ( Questi due plugin aprono gli URL nel browser predefinito senza creare alcun prompt dei comandi aggiuntivo o altre sciocchezze assurde solitamente richieste in Windows. Puoi aprire gli URL in Vim in questo modo:. :Open http://duckduckgo.comProvalo. Ti piacerà. )
Crea alcune mappature vim in modo da poter portare rapidamente la linea sotto il cursore nel browser. Lo mapperei a te (per me, è ,udalla modalità normale). Ecco come:
nnoremap u: exec "Open" .getline (".")
Per utilizzare questa mappatura, digita il tuo tasto Leader dalla modalità normale + u. Dovrebbe leggere la riga sotto il cursore e aprirla nel browser predefinito.
Questa è una sorta di versione migliorata dello script originariamente proposto da @tungd qui https://stackoverflow.com/a/9459366/7631731 . Mantiene il contesto di vim e gestisce correttamente gli URL contenenti "#".
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>¬
Dovresti dare una rapida occhiata a questo plugin vim
È fondamentalmente ciò che è stato spiegato in altre risposte, ma è necessaria una configurazione specifica se si utilizza un gestore di plugin :)
Come descritto sopra da @kev , modificato per ambienti Linux.
A parte: quando questa funzione è stata eseguita (Vim 8.1) nel mio terminale, lo schermo di Vim era offuscato (per lo più "oscurato", cioè il testo era lì ma non visibile). Il :redraw!comando (vedere https://stackoverflow.com/a/1117742/1904943 ) ridisegna lo schermo.
Aggiungi a ~/.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
netrwQuesta è una soluzione per le persone che hanno rimosso netrw( :help netrw-noload) in vim / neovim. Ad esempio, usano un diverso file manager comevim-dirvish
👉 :!open <c-r><c-a>
o mappa gx:
👉 nmap gx :!open <c-r><c-a>
Stavo cercando una soluzione anche a questo problema poiché in realtà ho rimosso completamente netrw dal caricamento in vim e l'ho sostituito con vim-dirvish. Questo plugin ha circa 500 ~ LOC , rispetto a netrw's (11.000 LOC) .
Non uso molto l'editing remoto, quindi vim-dirvishè abbastanza potente da gestire il mio flusso di lavoro (in realtà è più veloce di netrw~ l'autore afferma 2x, sento che è più veloce di così - è davvero istantaneo ⚡) molto utile su grandi basi di codice / repository. L'ho persino provato in un repository di file da 10K, elencando i file tramite -still instant! Qualcuno testato vim-dirvishcontroNerdtree , puoi vedere la differenza.
Ho abbandonato vim-vinegaranche perché vim-dirvish ha il -binding comunque, e la maggior parte della configurazione di vim-vinegarè netrwspecifica. Semplicemente non ne ha bisogno. Due piccioni in una fava!
La bellezza di questo plugin è che abbraccia la filosofia di VINE (Vim non è Emacs). Dove sfrutta la potenza di altri programmi nel terminale per manipolare i file, invece di provare a fare tutto da solo. La parte importante è il modo naturale in cui questi programmi esterni interagiscono con vim. E questo si ottiene con :Shdo, e ha un comodo tasto di .(comando punto , che è mnemonico per il comando di ripetizione), fallo sia sulla selezione che sulla riga effettiva su un vim-dirvishbuffer. E digita !rmper rimuovere, !mvper rinominare.
Da quando ho disabilitato netrw, ( :help netrw-noload) mi sono ritrovato a gxcercare di tanto in tanto. Non volevo caricare un plug-in per gxripristinare la funzionalità.
Ora per la soluzione, c'è un'associazione in modalità comando, ctrl-rquindi ctrl-a( :help c_CTRL-R_CTRL-A), per incollare tutto ciò che hai nel cursore sulla riga di comando, quindi se lo combini con :!xdg-open/:!open (per mac), praticamente imposti.
C'è un motivo per cui :wnon ha attacchi normali. Mi sorprende che la maggior parte soluzione non leva il flusso di lavoro di comando, io uso l'ex comando di un sacco, :s, :g, :v, :argdo, :cdo, e gli amici. Combinando questo con diverse modalità, sfrutta tutta la potenza di vim. Quindi non restare in una sola modalità, prova a sfruttare tutta la potenza di vim.
👉 :!open <c-r><c-a>
Notare !che indica di sfruttare la potenza di programmi esterni al di fuori di vim. VITE !
Se desideri gxripristinare la funzionalità, puoi eseguire la mappatura utilizzando lo stesso comando:
nmap gx :!open <c-r><c-a>Mi piace silenziare le mie associazioni, quindi aggiungere <silent>e :silfarà il trucco ( :help :map-silent)
👉 nmap <silent>gx :sil !open <c-r><c-a><cr>
:!open:!xdg-open:!wslviewUso tutte e tre le piattaforme e funzionano alla grande. Puoi semplicemente usarne uno per i tuoi attacchi vim, ad es. :!openea soli alias nel vostro bashrc/zshrc/fish configlaopen comando per qualsiasi programma dalla piattaforma specifico che si hanno.
per esempio. alias open = wslview
In questo modo, il mio vimrcrimane indipendente dalla piattaforma e mi occuperò solo delle incongruenze tramite bashrc/zshrc/fish config.