Открыть URL-адрес под курсором в Vim с браузером

Я использую Twitvim в первый раз. Увидев все URL-адреса, я удивился, есть ли способ открыть URL-адрес под курсором в вашем любимом браузере или указанном вами?

Ответ 1

Обновлено: из tpope tweet today

Нажмите gx. Вы можете настроить браузер. В Gnome и Mac OS X уже используется gnome-open/open. Как правило, вы можете установить g:netrw_browsex_viewer на все, что хотите.


Оригинальный ответ:

Не помню, где я получаю эту функцию. В URL-адресе есть ошибка с хешем (#), но функция работает достаточно хорошо, поэтому я не буду ее исправлять.

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>

Примечание. Если вы не используете Mac, используйте gnome-open/xdg-open для Linux или "путь к вашему веб-браузеру" для Windows

Ответ 2

Если вы используете Vim 7.4 или новее, в нормальном режиме, поместите курсор ниже URL-адреса, затем нажмите gx, URL-адрес будет открыт в браузере автоматически demo operate

Ответ 3

Я использую этот script для поиска gooogle для keyword под курсором:

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

Вы должны использовать getline('.') и matchstr() для извлечения url под курсором. Остальное - то же самое.

Ответ 4

Добавьте следующую строку в файл .vimrc:

nmap <leader><space> yiW:!xdg-open <c-r>" &<cr>

Итак, в обычном режиме он нажимает\он выбирает текущее слово и открывает его как адрес в веб-браузере.

Лидер по умолчанию -\(но я сопоставил его с let mapleader = ","). Точно так же, используя imap, вы можете отобразить некоторую последовательность клавиш в режиме вставки (но тогда, если это 2 последовательности клавиш, вероятно, она переопределит какое-то поведение по умолчанию).

Ответ 5

Хорошо, поэтому, используя ответы от @tungd и @kev, и небольшое исследование, я закончил с этим script, который работает именно так, как мне нужно. Как @tungd сказал, что # может дать проблему, если внутри URL-адреса, но я в порядке с этим, если у кого-то есть лучшее выражение для URL-адреса, тогда он будет приветствоваться.

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>

Ответ 6

Я очень опаздываю на эту вечеринку, но здесь есть еще один способ сделать это, особенно хорошо работающий в Windows 7.

  • Установите vim-shell и vim-misc в vim. Я рекомендую сделать это с помощью бесконечного Pathogen плагина, а затем просто cd ~/vimfiles/bundle & git clone [email protected]:xolox/vim-misc.git & git clone [email protected]:xolox/vim-shell.git от msysgit. (Эти два плагина открывают URL-адреса в браузере по умолчанию, не создавая лишних подсказок или других глупых глупостей, обычно требуемых в окнах. Вы можете открыть URL-адреса в Vim следующим образом: :Open http://duckduckgo.com. Попробуйте, вам понравится.)

  • Создайте несколько сопоставлений vim, чтобы вы могли быстро получить строку под курсором в браузере. Я сопоставил бы это с u (для меня это ,u из нормального режима). Вот как:

    nnoremap u: exec "Открыть".getline( "." )

Чтобы использовать это сопоставление, введите свой лидерный ключ из нормального режима + u. Он должен прочитать строку под вашим курсором и открыть ее в браузере по умолчанию.

Ответ 7

Вы должны быстро взглянуть на этот плагин vim

henrik/vim-open-url

Это в основном то, что было объяснено в некоторых других ответах, но нужна конкретная конфигурация, если вы используете диспетчер плагинов:)

Ответ 8

Это своего рода улучшенная версия скрипта, первоначально предложенная @tungd здесь fooobar.com/questions/85054/.... Сохраняет контекст vim и правильно обрабатывает URL-адреса, содержащие "#".

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>¬

Ответ 9

Как описано выше @kev, изменено для сред Linux.

Кроме того: когда эта функция была выполнена (Vim 8.1) в моем терминале, экран Vim был запутан (в основном "пустым", т.е. текст был там, но не виден). Команда :redraw! (см. fooobar.com/info/65860/...) перерисовывает экран.

Добавить в ~/.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