初めて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の場合は「Webブラウザーへのパス」を使用してください。
gx
とても強力です、ありがとう!また、適切なアプリケーション™でファイルを開きます。
Vim 7.4以降を使用している場合は、通常モードで、カーソルをURLの下に置いてからをクリックするgx
と、URLがブラウザーで自動的に開きます
:h netrw_gx
:* Windows 32または64の場合、urlおよびFileProtocolHandler dllが使用されます。* Gnomeの場合(gnome-openを使用):gnome-openが使用されます。* KDEの場合(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('.')
、and matchstr()
を使用する必要があります。残りは同じです。
OK、@ 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-miscのを vimの中で私が今まで-素晴らしい経由でこれを行うことをお勧めします病原体のプラグインして、単純にcd ~/vimfiles/bundle & git clone git@github.com:xolox/vim-misc.git & git clone git@github.com:xolox/vim-shell.git
msysgitから。(これらの2つのプラグインは、通常のウィンドウで必要な追加のコマンドプロンプトや他の愚かなナンセンスを作成せずに、デフォルトのブラウザーでURLを開きます。次のようにVimでURLを開くことができます::Open http://duckduckgo.com
試してください。気に入ってください。)
カーソルの下の行をブラウザにすばやく表示できるように、いくつかのvimマッピングを作成します。私はこれをuにマップします(私にとっては、,u
通常モードからのものです)。方法は次のとおりです。
nnoremap u:exec "Open" .getline( "。")
このマッピングを使用するには、通常モード+ 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
これは、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
。このプラグインは、周りの持っている500〜LOCをに比べ、netrw
さん(11,000+ LOC) 。
私は、リモートも多いので編集は使用しませんvim-dirvish
(よりそれは実際に高速です、私のワークフローを管理するための強力な十分ですnetrw
〜-著者の主張は2倍、私はそれがより速くよりだと感じ、それは本当に瞬間だ大規模なコードベース/リポジトリに非常に便利⚡)。私は10Kのファイルリポジトリで試してみましたが、-
まだインスタント経由でファイルをリストしています テストした人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の能力を最大限に引き出します。したがって、1つのモードにとどまらず、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
私は3つすべてのプラットフォームを使用しており、それらはうまく機能します。そのうちの1つをvimバインディングに使用できます。:!open
そして単にあなたbashrc/zshrc/fish config
のエイリアスopen
あなたが持っているものは何でも、プラットフォーム固有のプログラムへのコマンド。
例えば。 alias open = wslview
そうvimrc
すれば、私のプラットフォームにとらわれないままで、を介して不整合に対処しますbashrc/zshrc/fish config
。