vimscript – ¿Puedo pasar una cadena personalizada al comando 'gx'?

Pregunta:

Tengo un archivo como este:

vi.stackexchange.com
example.com
duckduckgo.com

Quiero poder abrir estos sitios con g x ; esto no funciona porque no hay ningún protocolo ( http:// ) delante de estos sitios.

Intenté hacer un script para agregar el prefijo http:// (esto es trivial), pero no estoy seguro de cómo puedo pasar mi cadena a g x :

fun! Goto(site)
    let l:site = a:site
    if l:site !~? '^https\?:\/\/'
        let l:site = 'https://' . l:site
    endif

    " Problem: how to I pass l:site to gx?
    exe 'normal gx'
endfun

nnoremap <Leader>g :call Goto(getline('.'))<CR>

Miré /usr/share/vim/vim74/plugin/netrwPlugin.vim para ver cómo está mapeado:

if !exists("g:netrw_nogx")
 if maparg('gx','n') == ""
  if !hasmapto('<Plug>NetrwBrowseX')
   nmap <unique> gx <Plug>NetrwBrowseX
  endif
  nno <silent> <Plug>NetrwBrowseX :call netrw#BrowseX(expand((exists("g:netrw_gx")? g:netrw_gx :            █'<cfile>')),netrw#CheckIfRemote())<cr>
 endif
 if maparg('gx','v') == ""
  if !hasmapto('<Plug>NetrwBrowseXVis')
   vmap <unique> gx <Plug>NetrwBrowseXVis
  endif
  vno <silent> <Plug>NetrwBrowseXVis :<c-u>call netrw#BrowseXVis()<cr>
 endif
endif

No puedo llamar a <Plug>NetrwBrowseX (¿AFAIK?) … ¿Hay alguna otra forma de hacer esto?

Respuesta:

El mapeo gx está llamando netrw#BrowseX() , por lo que podría llamarlo al final de su función, pasando la variable l:site que ha construido:

call netrw#BrowseX(l:site, netrw#CheckIfRemote())

También sugeriría que en lugar de getline('.') , expand('<cfile>') , que se evalúa como el nombre de archivo debajo del cursor. Esto funcionará cuando la URL esté en una línea que también contenga otro contenido.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım