tyru/open-browser.vim — pull request #14 by Milly (2012-11-22 09:38:47+00:00)
Title: Windows でURLエンコードと環境変数が衝突する

Windows でURLエンコードのパーセントが環境変数展開されてしまうことがあります。

例:
https://www.google.co.jp/search?q=%89%cd%90%ec&ie=sjis
→ https://www.google.co.jp/search?q=%89C:\Vim90%ec&ie=sjis
(%cd% がカレントディレクトリに展開されている)

さらに環境変数展開は system() 呼び出し時と cmd.exe 実行時の2回処理されるため、いったん URL を環境変数に格納しておき、system() 呼び出し時には ^ でエスケープしておくとうまく行きました。

#9 の修正と衝突してるかもしれません。

```diff
diff --git a/autoload/openbrowser.vim b/autoload/openbrowser.vim
index 61773a9..291ea21 100755
--- a/autoload/openbrowser.vim
+++ b/autoload/openbrowser.vim
@@ -30,7 +30,8 @@ elseif g:__openbrowser_platform.mswin
" NOTE: On MS Windows, 'start' command is not executable.
" NOTE: If &shellslash == 1,
" `shellescape(uri)` uses single quotes not double quote.
- return {'cmd.exe': 'cmd /c start rundll32 url.dll,FileProtocolHandler {uri}'}
+ " NOTE: Environment expansion by system() call and `cmd.exe`.
+ return {'cmd.exe': 'cmd /c start rundll32 url.dll,FileProtocolHandler ^%OPENBROWSER_URI^%'}
endfunction
elseif g:__openbrowser_platform.unix
function! s:get_default_open_commands()
@@ -380,6 +381,7 @@ function! s:open_browser(uri) "{{{
continue
endif

+ let $OPENBROWSER_URI = uri
let cmdline = s:expand_keywords(
\ open_rules[browser],
\ {'browser': browser, 'uri': uri}
```