브라우저로 Vim에서 커서 아래에 URL 열기


104

처음으로 Twitvim을 사용하고 있습니다. 거기에있는 모든 URL을 보는 것이 궁금했습니다. 즐겨 찾는 브라우저 또는 지정된 브라우저에서 커서 아래에있는 URL을 열 수있는 방법이 있습니까?


텍스트 커서 또는 마우스 커서 아래?
Oleg Mikheev 2012

텍스트 커서 ...하지만 당신은 너무 멋진 것 마우스 커서에서 할 수있는 방법을 알고있는 경우
마우로 모랄레스

1
정력에있는 링크에 마우스 가운데 버튼 클릭이 항상 나를 위해 일했다, 나는 어떻게,하지만 모르는
올렉 Mikheev를

2
가운데 클릭하여 열기는 vim이 아닌 터미널의 기능 일 가능성이 높습니다.
Leonid Shevtsov

답변:


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이 아닌 경우 Linux의 경우 gnome-open/ xdg-open를 사용 하고 Windows의 경우 '웹 브라우저 경로'를 사용하십시오.


나는 당신의 해결책을 사용할 것이라고 생각합니다 :) 감사합니다 ... 커서 아래에 URL 만 가져 오는 방법이 있는지보고 싶지만 vimscript를 많이 모르기 때문에 작업해야합니다. .
Mauro Morales

14
gx정말 강력합니다, 감사합니다! 또한 적절한 응용 프로그램 ™으로 파일을 엽니 다.
blinry

나는 그것이 g : netrw_browsex_viewer (w / o 'r') 인 것 같아요
Jack

2
나는? 그리고 그 안에 #. netrw가 cWORD 대신 cfile을 사용하고 있다고 생각하므로 '?' 더 이상 해당 방법을 사용하여 열 수 없습니다. 여기에서 솔루션을 시도했으며 URL의 '#'이 대체 파일 이름으로 대체됩니다. exec "! open".shellescape (uri, 1)가 문제를 해결 한 것 같습니다.
Chad Skeeters 2014-06-25

4
앞서 언급 한 트윗은 여기에 있습니다 : twitter.com/tpope/status/289234166770434048 , 누군가가 토론에 관심이있는 경우를 대비하여.
Antoine Cotten 2016

49

Vim 7.4 이상을 사용하는 경우 일반 모드에서 URL 아래에 커서를 놓은 다음을 클릭 gx하면 URL이 브라우저에서 자동으로 열립니다.데모 운영


이 예에서 브라우저를 Chrome으로 설정하는 방법은 무엇입니까? (또는 어떤 브라우저이든)
jm3

@ jm3 Try :h netrw_gx: * Windows 32 또는 64의 경우 url 및 FileProtocolHandler dll이 사용됩니다. * for Gnome (with gnome-open) : gnome-open이 사용됩니다. * for KDE (with kfmclient) : kfmclient 사용 * Mac OS X : open 사용. * 그렇지 않으면 netrwFileHandler 플러그인이 사용됩니다.
kba는 Monica와 함께

1
주제에서 약간 벗어 났지만 화면을 gif로 어떻게 기록합니까? 그것을 사랑하십시오!
Peter Perháč

@ 시스템의 기본 웹 브라우저 사용 jm3
jsvisa

3
PeterPerháč @ 내가 사용하고 github.com/keycastr/keycastr을 기록 키보드 입력에 cockos.com/licecap GIF로 기록 화면
jsvisa

9

이 스크립트를 사용 keyword하여 커서 아래에서 gooogle을 검색합니다 .

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

커서 아래의 URL을 추출 하려면 getline('.')matchstr()을 사용해야합니다 . 나머지는 동일합니다.


나는 이것이 결국 내가 찾고있는 해결책을 가리킬 것이라고 생각한다. 게다가이 기능은 매우 편리해질 것이다. 감사!
Mauro Morales

2

.vimrc 파일에 다음 줄을 추가합니다.

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

따라서 일반 모드에서 \를 누르면 현재 단어를 선택하고 웹 브라우저에서 주소로 엽니 다.

리더는 기본적으로 \입니다 (하지만에 매핑했습니다 let mapleader = ","). 마찬가지로 imap을 사용하면 삽입 모드에서 일부 키 시퀀스를 매핑 할 수 있습니다 (하지만 2 키 시퀀스 인 경우 일부 기본 동작을 재정의 할 수 있습니다).


1

좋아, @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>

1

이 파티에 꽤 늦었지만 여기에 Windows 7에서 특히 잘 작동하는 또 다른 방법이 있습니다.

  1. vim에 vim-shellvim-misc 를 모두 설치하십시오. 저는 항상 멋진 Pathogen 플러그인을 통해이 작업을 수행 한 다음 cd ~/vimfiles/bundle & git clone git@github.com:xolox/vim-misc.git & git clone git@github.com:xolox/vim-shell.gitmsysgit에서 간단히 수행하는 것이 좋습니다 . ( 이 두 플러그인은 별도의 명령 프롬프트를 만들지 않고 기본 브라우저에서 URL을 엽니 다. 일반적으로 창에서 필요한 어리석은 말도 안되는 URL을 엽니 다. Vim에서 URL을 다음과 같이 열 수 있습니다 :Open http://duckduckgo.com.. 사용해보세요. 마음에들 것입니다. )

  2. 커서 아래의 줄을 브라우저로 빠르게 가져올 수 있도록 몇 가지 vim 매핑을 만듭니다 . 나는 이것을 u에 매핑 할 것입니다 (저는 ,u일반 모드 에서 왔습니다). 방법은 다음과 같습니다.

    nnoremap u : exec "".getline ( ".") 열기

이 매핑을 사용하려면 일반 모드 + u에서 리더 키를 입력하십시오. 커서 아래 줄을 읽고 기본 브라우저에서 열어야합니다.


1

이것은 https://stackoverflow.com/a/9459366/7631731 여기에서 @tungd가 원래 제안한 스크립트의 일종의 개선 된 버전입니다 . 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>¬

0

이 vim 플러그인을 빠르게 살펴보아야합니다.

henrik / vim-open-url

기본적으로 다른 응답에서 설명 된 내용이지만 플러그인 관리자를 사용하는 경우 특정 구성이 필요합니다. :)


0

위의 @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


0

이것은 간단합니다. "시작"을 OS에서 사용하는 것으로 바꾸십시오.

이동 URL에 대한 GU !

" Open url
if (has('win32') || has('win64'))
   nmap gu :exec "!start <cWORD>"<cr> 
else
   nmap gu :exec "!open <cWORD>"<cr> 
endif

0

하역 한 사람들을위한 솔루션 netrw

이것은 vim / neovim에서 netrw( :help netrw-noload) 를 제거한 사람들을위한 솔루션입니다 . 예를 들어, 그들은 다음과 같은 다른 파일 관리자를 사용합니다.vim-dirvish

TLDR :

👉 :!open <c-r><c-a>

또는지도 gx:

👉 nmap gx :!open <c-r><c-a>


그래서 약간의 배경 :

실제로 netrw가 vim에 완전히로드되지 않도록 제거하고 vim-dirvish. 이 플러그인은 의 (11,000+ LOC)에 비해 약 500 ~ LOC가 있습니다.netrw

나는 원격 훨씬 그래서 편집하면 사용하지 않는 vim-dirvish내 워크 플로우를 관리 할 수있는 강력한 충분히 (그것보다 실제로 빠르다입니다 netrw~ - 저자의 주장은 2 배, 내가 더 빨리보다 느낀다 정말 순간의 큰 코드베이스 / 저장소에 매우 유용한 ⚡). 나는 심지어 10K 파일 저장소에서 그것을 시도했고, -여전히 즉시 파일을 나열했습니다 ! 에 대해 테스트 한 사람vim-dirvishNerdtree 은 차이를 확인할 수 있습니다.

vim-vinegarvim-dirvish가 -어쨌든 바인딩을 가지고 있고 대부분의 구성 vim-vinegarnetrw구체적 이기 때문에 나도 떨어졌습니다 . 그것은 단지 그것을 필요로하지 않습니다. 한 돌에 두 마리!

이 플러그인의 장점은 VINE 의 철학을 수용한다는 것입니다 (Vim은 Emacs가 아닙니다). 자체적으로 모든 작업을 수행하는 대신 터미널의 다른 프로그램의 기능을 활용하여 파일 조작을 수행합니다. 중요한 부분은 이러한 외부 프로그램이 vim과 얼마나 자연스럽게 상호 작용하는지입니다. 그리고 그것은에 의해 달성되며 ( 반복 명령의 니모닉 인 도트 명령):Shdo 의 편리한 키가 있으며 버퍼의 선택 또는 실제 행에서 수행 합니다. 이름을 바꾸려면 제거를 입력 하십시오 ..vim-dirvish!rm!mv

netrw를 비활성화했기 때문에 ( :help netrw-noload) 가끔씩 도달 gx했습니다. gx기능을 되찾기 위해 플러그인을로드하고 싶지 않았습니다 .


이제 솔루션, A는, 명령 모드에서 바인딩있어 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>

통지 !외부 정력의 외부 프로그램의 힘을 활용 나타내는합니다. 포도 나무 !

당신이 원하는 경우 gx기능 등을, 당신은 단지 동일한 명령을 사용하여 매핑 할 수 있습니다 :

  • nmap gx :!open <c-r><c-a>

나는 내 바인딩을 침묵시키는 것을 좋아하므로 트릭을 추가 <silent>하고 :sil할 것입니다 ( :help :map-silent)

👉 nmap <silent>gx :sil !open <c-r><c-a><cr>

URL을 여는 플랫폼 별 프로그램에 대한 참고 :

  1. Mac은 :!open
  2. Linux는 :!xdg-open
  3. Windows (WSL2)에는 :!wslview

나는 세 가지 플랫폼을 모두 사용하며 훌륭하게 작동합니다. 예를 들어 vim 바인딩에 그중 하나를 사용할 수 있습니다. :!open당신의 단지 별칭 에 대한 명령은 어떤 플랫폼 별 프로그램, 당신은.bashrc/zshrc/fish configopen

예. alias open = wslview

이렇게하면 vimrc플랫폼에 구애받지 않고 bashrc/zshrc/fish config.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.