Я вперше використовую 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 використовуються клітини url та FileProtocolHandler. * для Gnome (з gnome-open): використовується gnome-open. * для KDE (з kfmclient): kfmclient використовується * для Mac OS X: використовується open. * інакше використовується плагін netrwFileHandler.
Я використовую цей скрипт для пошуку в Google 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 та @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-shell, так і vim-misc у vim, я рекомендую зробити це через постійно приголомшливий плагін Pathogen, а потім просто 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. Він повинен прочитати рядок під курсором і відкрити його у вашому браузері за замовчуванням.
Це свого роду вдосконалена версія сценарію, спочатку запропонована @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>¬
Ви повинні швидко переглянути цей плагін 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
's (11,000+ LOC) .
Я не використовую віддалене редагування, настільки vim-dirvish
достатньо потужний, щоб керувати своїм робочим процесом (це насправді швидше, ніж netrw
~ автор стверджує, що 2x, я вважаю, що це швидше, ніж це - це справді миттєвий ⚡), дуже корисний для великих кодових баз даних / сховищ. Я навіть спробував це у 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
Я використовую всі три платформи, і вони чудово працюють. Ви можете просто використовувати одну з них для прив'язки вім, наприклад. :!open
і просто псевдонім у вашій bashrc/zshrc/fish config
КНИЗІopen
команді на будь-якій платформі конкретної програми у вас є.
напр. alias open = wslview
Таким чином, мій vimrc
залишається платформою-агностиком, і я просто вирішу невідповідності через bashrc/zshrc/fish config
.