Я использую Twitvim впервые. Увидев там все URL-адреса, я задался вопросом, есть ли способ открыть URL-адрес под курсором в вашем любимом браузере или в указанном?
Я использую Twitvim впервые. Увидев там все URL-адреса, я задался вопросом, есть ли способ открыть URL-адрес под курсором в вашем любимом браузере или в указанном?
Ответы:
Обновлено: из сегодняшнего твита tpope
Нажмите 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.
gx
такой мощный, спасибо! Он также открывает файлы с соответствующими приложениями ™.
Если вы используете Vim 7.4 или новее, в обычном режиме поместите курсор под URL-адресом, затем щелкните gx
, URL-адрес откроется в браузере автоматически.
:h netrw_gx
: * для Windows 32 или 64 используются dll url и FileProtocolHandler. * для Gnome (с gnome-open): используется gnome-open. * для KDE (с kfmclient): используется kfmclient * для Mac OS X: используется open. * в противном случае используется плагин netrwFileHandler.
Я использую этот скрипт для поиска в 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-адреса под курсором. В остальном то же самое.
Добавьте следующую строку в файл .vimrc:
nmap <leader><space> yiW:!xdg-open <c-r>" &<cr>
Таким образом, в обычном режиме нажатие клавиши \ выбирает текущее слово и открывает его как адрес в веб-браузере.
Лидером по умолчанию является \ (но я сопоставил его с помощью let mapleader = ","
). Точно так же, используя imap, вы можете отобразить некоторую последовательность клавиш в режиме вставки (но тогда, если это 2-клавишная последовательность, она, вероятно, переопределит некоторое поведение по умолчанию).
Это своего рода улучшенная версия сценария, первоначально предложенного @tungd здесь https://stackoverflow.com/a/9459366/7631731 . Сохраняет контекст 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>¬
Итак, используя ответы @tungd и @kev и небольшое исследование, я получил этот скрипт, который работает именно так, как мне нужно. Как сказал @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>
Я довольно поздно пришел на вечеринку, но вот еще один способ сделать это, который особенно хорошо работает в Windows 7.
Установить как ВИМ-оболочки и ВИМ-разное в Vim Я рекомендую делать это через все удивительном Возбудитель плагин , а затем просто cd ~/vimfiles/bundle & git clone git@github.com:xolox/vim-misc.git & git clone git@github.com:xolox/vim-shell.git
из msysgit. ( Эти два плагина открывают URL-адреса в браузере по умолчанию, не создавая дополнительных командных подсказок или другой глупой ерунды, которая обычно требуется в Windows. Вы можете открывать URL-адреса в Vim следующим образом:. :Open http://duckduckgo.com
Попробуйте. Вам понравится. )
Создайте несколько сопоставлений vim, чтобы вы могли быстро перенести строку под курсором в браузер. Я бы сопоставил это с u (для меня это ,u
из обычного режима). Вот как:
nnoremap u: exec "Открыть" .getline (".")
Чтобы использовать это сопоставление, наберите клавишу Leader в обычном режиме + u. Он должен прочитать строку под вашим курсором и открыть ее в браузере по умолчанию.
Вам следует быстро взглянуть на этот плагин vim
Это в основном то, что было объяснено в некоторых других ответах, но требуется конкретная конфигурация, если вы используете диспетчер плагинов :)
Как описано выше @kev , модифицировано для сред Linux.
Кроме того: когда эта функция выполнялась (Vim 8.1) в моем терминале, экран Vim был затемнен (в основном «пустым», т.е. текст был там, но не виден). Команда :redraw!
(см. Https://stackoverflow.com/a/1117742/1904943 ) перерисовывает экран.
Добавить в ~/.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
netrw
Это решение для людей, которые удалили netrw
( :help netrw-noload
) в vim / neovim. Например, они используют другой файловый менеджер, напримерvim-dirvish
👉 :!open <c-r><c-a>
или карту gx
:
👉 nmap gx :!open <c-r><c-a>
Я тоже искал решение этой проблемы, так как фактически полностью удалил netrw из загрузки в vim и заменил его на vim-dirvish
. Этот плагин имеет около 500 ~ LOC по сравнению netrw
с (11000+ LOC) .
Я не использую удаленное редактирование, поэтому vim-dirvish
он достаточно мощный, чтобы управлять моим рабочим процессом (на самом деле он быстрее, чем netrw
~ автор утверждает в 2 раза, я чувствую, что это быстрее - это действительно мгновенно ⚡), очень полезно для больших кодовых баз / репозиториев. Я даже попробовал это в репозитории файлов размером 10 КБ, перечисляя файлы через -
мгновение! Кто-то протестировал vim-dirvish
противNerdtree
, вы можете увидеть разницу.
Я vim-vinegar
тоже отказался, потому что vim-dirvish все -
равно имеет привязку, и большая часть конфигурации vim-vinegar
является netrw
специфической. Это просто не нужно. Два зайца в одном камне!
Прелесть этого плагина в том, что он отражает философию VINE (Vim - это не Emacs). Где он использует возможности других программ в терминале для манипуляций с файлами, вместо того, чтобы пытаться делать все самостоятельно. Важная часть - насколько естественно эти внешние программы взаимодействуют с vim. И это достигается с :Shdo
помощью удобной клавиши .
(команда точки , которая является мнемоникой для команды повтора), делайте это как для выделения, так и для фактической строки в vim-dirvish
буфере. И введите !rm
для удаления, !mv
для переименования.
Поскольку я отключил netrw, ( :help netrw-noload
) я обнаружил, что gx
время от времени тянусь к нему. Я не хотел загружать плагин, чтобы вернуть gx
функциональность.
Теперь для решения есть привязка в командном режиме, ctrl-rзатем ctrl-a( :help c_CTRL-R_CTRL-A
), чтобы вставить все, что у вас есть в курсоре, в командную строку, поэтому, если вы объедините это с :!xdg-open
/ :!open
(для Mac), вы в значительной степени установите.
Есть причина, по которой :w
нет нормальных привязок. Я удивлен самым решение не команда рабочего рычага, я использую экс-команды много, :s
, :g
, :v
, :argdo
, :cdo
, и друзья. Сочетание этого с различными режимами позволяет использовать всю мощь vim. Так что не оставайтесь в одном режиме, попробуйте использовать всю мощь vim.
👉 :!open <c-r><c-a>
Обратите внимание, !
что указывает на использование возможностей внешних программ вне vim. ВИНА !
Если вы хотите gx
вернуть функциональность, вы можете просто сопоставить ее с помощью той же команды:
nmap gx :!open <c-r><c-a>
Мне нравится отключать свои привязки, поэтому добавление <silent>
и :sil
сделает свое дело ( :help :map-silent
)
👉 nmap <silent>gx :sil !open <c-r><c-a><cr>
:!open
:!xdg-open
:!wslview
Я использую все три платформы, и они отлично работают. Вы можете просто использовать один из них для своих привязок vim, например. :!open
и просто укажите в своей команде псевдоним любой имеющейся у вас bashrc/zshrc/fish config
программы open
для конкретной платформы.
например. alias open = wslview
Таким образом, я vimrc
остаюсь независимым от платформы, и я просто устраню несоответствия с помощью bashrc/zshrc/fish config
.