-
Notifications
You must be signed in to change notification settings - Fork 11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
wildmode=longest 時にマルチバイト文字がバイト単位で補完される #791
Comments
patched. @thinca test書きませんか? diff -r 873eae260c97 src/ex_getln.c
--- a/src/ex_getln.c Tue Nov 10 21:30:05 2015 +0100
+++ b/src/ex_getln.c Thu Nov 19 18:03:55 2015 +0900
@@ -3691,9 +3691,43 @@
/* Find longest common part */
if (mode == WILD_LONGEST && xp->xp_numfiles > 0)
{
+#ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ int mb_len = 0;
+
+ for (len = 0; xp->xp_files[0][len]; len+=mb_len)
+ {
+ mb_len = (*mb_ptr2len)(&xp->xp_files[0][len]);
+ for (i = 1; i < xp->xp_numfiles; ++i)
+ {
+ if (mb_len == 1 && p_fic
+ && (xp->xp_context == EXPAND_DIRECTORIES
+ || xp->xp_context == EXPAND_FILES
+ || xp->xp_context == EXPAND_SHELLCMD
+ || xp->xp_context == EXPAND_BUFFERS))
+ {
+ if (TOLOWER_LOC(xp->xp_files[i][len]) !=
+ TOLOWER_LOC(xp->xp_files[0][len]))
+ break;
+ }
+ else if (vim_memcmp(&xp->xp_files[i][len],
+ &xp->xp_files[0][len], mb_len))
+ break;
+ }
+ if (i < xp->xp_numfiles)
+ {
+ if (!(options & WILD_NO_BEEP))
+ vim_beep(BO_WILD);
+ break;
+ }
+ }
+ }
+ else
+#endif
for (len = 0; xp->xp_files[0][len]; ++len)
{
- for (i = 0; i < xp->xp_numfiles; ++i)
+ for (i = 1; i < xp->xp_numfiles; ++i)
{
if (p_fic && (xp->xp_context == EXPAND_DIRECTORIES
|| xp->xp_context == EXPAND_FILES |
はやい! 👍
ちょっと考えてみます!(着手は早くても来週以降になりそうです) |
@h-east コード見ずに言ってしまって申し訳ないですが、パッチを見た感じ not FEAT_MBYTE 部分とコード共通部分が多いんじゃないかと思ってます。オフセット値のみを FEAT_MBYTE で変えるってのだと難しいでしょうか? |
もうネタ決まってるんで…。 |
test書いてvim_devに投げた。 |
👍 |
Patch 7.4.926 Appveyorでテストが落ちてますね... |
Thanks! Appveyorでコケている件、patch投げました。 mattn> |
でも good try! 👍 |
test_utf8 がAppveyorでfaildになっている件、PRした奴でもダメだったorz |
MinGW + MSYS でAppVeyorの結果と同じ動作になることを確認しました。 |
うーん、これはどう考えてもWindowsで |
Windowsのfeedkeys()は以前にもtestで変な動きをしていたことがあったような…。 |
全く試さずに勘で言ってしまうんですが、 |
テストは同じ感じで落ちてるので関係ないとは思いますが、longest 関係で修正パッチ入りました。
|
を伝えたのと、test_utf8 のrevertを提案してみました。 |
👍 |
@k-takata ありがとうございます。そこを参考にSuper Ad Hocな変更(*1)を入れたらAppVeyor OKになりました。(LinuxでもOK) *1
でもこれ本家に投げれないよなぁ。。 |
ダメ元でPR出したった @ynkdir 昔のコメントを引用させて頂きました。ありがとうございます。 |
いろいろあったんですが、最終的に以下のpatchでAPPVeyor PASSしました。 結論: 皆さんお疲れ様でした。 |
再現スクリプト:
:Test <Tab>
と入力。結果:
list:longest
の場合も同様。UTF-8 で、「あ」(0xE3 0x81 0x82) と「い」(0xE3 0x81 0x84) の共通部分が補完されてしまっている。
マルチバイト文字を認識して文字単位で補完してほしい。
The text was updated successfully, but these errors were encountered: