Я использую Twitvim впервые. Увидев там все URL-адреса, я задался вопросом, есть ли способ открыть URL-адрес под курсором в вашем любимом браузере или в указанном?
текстовый курсор ... но если вы знаете, как сделать это под курсором мыши, это тоже было бы круто
Мауро Моралес
1
щелчок средней кнопкой мыши по ссылке в vim у меня всегда работал, хотя я не знаю как
Олег Михеев
2
средний щелчок для открытия скорее всего является функцией терминала, а не vim.
Леонид Шевцов
Ответы:
189
Обновлено: из сегодняшнего твита 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.
Думаю, я воспользуюсь вашим решением :) спасибо ... Я бы хотел посмотреть, есть ли способ получить только URL-адрес под курсором, но я мало знаю vimscript, поэтому мне придется поработать над этим .
Мауро Моралес
14
gxтакой мощный, спасибо! Он также открывает файлы с соответствующими приложениями ™.
blinry
Я думаю, это g: netrw_browsex_viewer (w / o 'r')
Джек
2
Мне нравится открывать URL с? и # в нем. Я думаю, что netrw теперь использует cfile вместо cWORD, поэтому URL-адреса с '?' больше не открываются с помощью этого метода. Я попробовал ваше решение здесь, и знак «#» в URL-адресе будет заменен альтернативным именем файла. exec "! open" .shellescape (uri, 1), похоже, устранил проблему.
Если вы используете Vim 7.4 или новее, в обычном режиме поместите курсор под URL-адресом, затем щелкните gx, URL-адрес откроется в браузере автоматически.
как вы устанавливаете браузер в качестве Chrome в этом примере? (или любой другой браузер)
jm3
@ jm3 Попробуйте :h netrw_gx: * для Windows 32 или 64 используются dll url и FileProtocolHandler. * для Gnome (с gnome-open): используется gnome-open. * для KDE (с kfmclient): используется kfmclient * для Mac OS X: используется open. * в противном случае используется плагин netrwFileHandler.
kba выступает с Моникой
1
немного не по теме, а как скрин в гифку записать? любить это!
Петер Перхач,
@ jm3, который использует веб-браузер системы по умолчанию
Я думаю, это укажет мне на решение, которое я ищу в конечном итоге ... плюс эта функция станет очень удобной. Спасибо!
Мауро Моралес
2
Добавьте следующую строку в файл .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 8.1) в моем терминале, экран Vim был затемнен (в основном «пустым», т.е. текст был там, но не виден). Команда :redraw!(см. Https://stackoverflow.com/a/1117742/1904943 ) перерисовывает экран.
Это решение для людей, которые удалили netrw( :help netrw-noload) в vim / neovim. Например, они используют другой файловый менеджер, напримерvim-dirvish
TL; DR:
👉 :!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.
Итак, полный рабочий процесс. Пока курсор находится над URL-адресом, это всего лишь один шаг: 😊
👉 :!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>
Обратите внимание на программы, специфичные для платформы, для открытия URL:
Mac имеет :!open
Linux имеет :!xdg-open
Windows (WSL2) имеет :!wslview
Я использую все три платформы, и они отлично работают. Вы можете просто использовать один из них для своих привязок vim, например. :!openи просто укажите в своей команде псевдоним любой имеющейся у вас bashrc/zshrc/fish configпрограммы openдля конкретной платформы.
например. alias open = wslview
Таким образом, я vimrcостаюсь независимым от платформы, и я просто устраню несоответствия с помощью bashrc/zshrc/fish config.
Ответы:
Обновлено: из сегодняшнего твита tpope
Нажмите
gx
. Вы можете настроить браузер. В Gnome и Mac OS X он уже используетсяgnome-open
/open
. Как правило, вы можете установитьg:netrw_browsex_viewer
все, что захотите.Оригинальный ответ:
Не помню, откуда у меня эта функция. В URL-адресе есть ошибка с хешем (#), но функция работает достаточно хорошо, поэтому я не буду ее исправлять.
Примечание. Если вы не на 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
под курсором:Вы должны использовать
getline('.')
иmatchstr()
для извлечения URL-адреса под курсором. В остальном то же самое.источник
Добавьте следующую строку в файл .vimrc:
Таким образом, в обычном режиме нажатие клавиши \ выбирает текущее слово и открывает его как адрес в веб-браузере.
Лидером по умолчанию является \ (но я сопоставил его с помощью
let mapleader = ","
). Точно так же, используя imap, вы можете отобразить некоторую последовательность клавиш в режиме вставки (но тогда, если это 2-клавишная последовательность, она, вероятно, переопределит некоторое поведение по умолчанию).источник
Это своего рода улучшенная версия сценария, первоначально предложенного @tungd здесь https://stackoverflow.com/a/9459366/7631731 . Сохраняет контекст vim и правильно обрабатывает URL-адреса, содержащие "#".
источник
Итак, используя ответы @tungd и @kev и небольшое исследование, я получил этот скрипт, который работает именно так, как мне нужно. Как сказал @tungd, # может вызвать проблему, если внутри URL-адреса, но меня это устраивает, если у кого-то есть лучшее выражение для URL-адреса, тогда это будет приветствоваться.
источник
Я довольно поздно пришел на вечеринку, но вот еще один способ сделать это, который особенно хорошо работает в 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
henrik / vim-open-url
Это в основном то, что было объяснено в некоторых других ответах, но требуется конкретная конфигурация, если вы используете диспетчер плагинов :)
источник
Как описано выше @kev , модифицировано для сред Linux.
Кроме того: когда эта функция выполнялась (Vim 8.1) в моем терминале, экран Vim был затемнен (в основном «пустым», т.е. текст был там, но не виден). Команда
:redraw!
(см. Https://stackoverflow.com/a/1117742/1904943 ) перерисовывает экран.Добавить в
~/.vimrc
:источник
Это просто, просто замените "start" на то, что использует ваша ОС.
ГУ для go url!
источник
Решение для людей, которые разгрузили
netrw
Это решение для людей, которые удалили
netrw
(:help netrw-noload
) в vim / neovim. Например, они используют другой файловый менеджер, напримерvim-dirvish
TL; DR:
👉
:!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.Итак, полный рабочий процесс. Пока курсор находится над URL-адресом, это всего лишь один шаг: 😊
👉
:!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>
Обратите внимание на программы, специфичные для платформы, для открытия URL:
:!open
:!xdg-open
:!wslview
Я использую все три платформы, и они отлично работают. Вы можете просто использовать один из них для своих привязок vim, например.
:!open
и просто укажите в своей команде псевдоним любой имеющейся у васbashrc/zshrc/fish config
программыopen
для конкретной платформы.например.
alias open = wslview
Таким образом, я
vimrc
остаюсь независимым от платформы, и я просто устраню несоответствия с помощьюbashrc/zshrc/fish config
.источник