처음으로 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이 아닌 경우 Linux의 경우 gnome-open/ xdg-open를 사용 하고 Windows의 경우 '웹 브라우저 경로'를 사용하십시오.
gx정말 강력합니다, 감사합니다! 또한 적절한 응용 프로그램 ™으로 파일을 엽니 다.
Vim 7.4 이상을 사용하는 경우 일반 모드에서 URL 아래에 커서를 놓은 다음을 클릭 gx하면 URL이 브라우저에서 자동으로 열립니다.
: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 플러그인이 사용됩니다.
이 스크립트를 사용 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()을 사용해야합니다 . 나머지는 동일합니다.
좋아, @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에 vim-shell 과 vim-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.. 사용해보세요. 마음에들 것입니다. )
커서 아래의 줄을 브라우저로 빠르게 가져올 수 있도록 몇 가지 vim 매핑을 만듭니다 . 나는 이것을 u에 매핑 할 것입니다 (저는 ,u일반 모드 에서 왔습니다). 방법은 다음과 같습니다.
nnoremap u : exec "".getline ( ".") 열기
이 매핑을 사용하려면 일반 모드 + u에서 리더 키를 입력하십시오. 커서 아래 줄을 읽고 기본 브라우저에서 열어야합니다.
이것은 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>¬
이 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이것은 vim / neovim에서 netrw( :help netrw-noload) 를 제거한 사람들을위한 솔루션입니다 . 예를 들어, 그들은 다음과 같은 다른 파일 관리자를 사용합니다.vim-dirvish
👉 :!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-vinegar이 netrw구체적 이기 때문에 나도 떨어졌습니다 . 그것은 단지 그것을 필요로하지 않습니다. 한 돌에 두 마리!
이 플러그인의 장점은 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의 모든 기능을 활용하십시오.
👉 :!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>
:!open:!xdg-open:!wslview나는 세 가지 플랫폼을 모두 사용하며 훌륭하게 작동합니다. 예를 들어 vim 바인딩에 그중 하나를 사용할 수 있습니다. :!open당신의 단지 별칭 에 대한 명령은 어떤 플랫폼 별 프로그램, 당신은.bashrc/zshrc/fish configopen
예. alias open = wslview
이렇게하면 vimrc플랫폼에 구애받지 않고 bashrc/zshrc/fish config.