You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
diff --git a/src/os_win32.c b/src/os_win32.c
index 91f453f2e..0d133c324 100644
--- a/src/os_win32.c+++ b/src/os_win32.c@@ -7378,10 +7378,15 @@ fix_arg_enc(void)
/* Now expand wildcards in the arguments. */
/* Temporarily add '(' and ')' to 'isfname'. These are valid
* filename characters but are excluded from 'isfname' to make
- * "gf" work on a file name in parenthesis (e.g.: see vim.h). */+ * "gf" work on a file name in parenthesis (e.g.: see vim.h).+ * Also, unset wildignore to not to be influenced this option.+ * The arguments specified in command-line should be kept even if+ * encoding options was changed. */
do_cmdline_cmd((char_u *)":let SaVe_ISF = &isf|set isf+=(,)");
+ do_cmdline_cmd((char_u *)":let SaVe_WIG = &wig|set wig=");
alist_expand(fnum_list, used_alist_count);
do_cmdline_cmd((char_u *)":let &isf = SaVe_ISF|unlet SaVe_ISF");
+ do_cmdline_cmd((char_u *)":let &wig = SaVe_WIG|unlet SaVe_WIG");
}
/* If wildcard expansion failed, we are editing the first file of the
Activity
mattn commentedon Mar 8, 2018
./.git/configの様に相対パスで開かなかった場合はパスが一旦フルパスに変換される。よってパスには cp932 の文字が含まれる。次に encoding が変更された事で引数リストのエンコーディングが変換されるが、その後で alist_expand を使って引数リストの再展開(ワイルドカードがあった場合の為)が行われる。(ちなみにこれが必要なのはコマンドライン引数のワイルドカードを自プロセスが展開する Windows だけ)本来、vim のコマンドラインから与えられた引数は、シェルがワイルドカードを展開し、wildignore の影響を受けない引数リストになっているはず。にもかかわらず alist_expand で再展開する際に wildignore の影響を受け引数リストから除外されてしまう、というバグ。なので
の様に順番を逆にすると
set encoding=utf-8を実行したタイミングではまだ wildignore が設定されていないので alist_expand が呼ばれても wildignore が干渉しない。よって正しく動く。パッチとしては alist_expand で wildignore が干渉しない様に wildignore の値を退避しながら空にしてやる。既に元々 isf の退避もやってるので、結論から言うと alist_expand を呼び出す際の退避漏れという事になる。
mattn commentedon Mar 8, 2018
vim/vim#2702
mattn commentedon Mar 9, 2018
patch 8.0.1591