:hideの後にコメントが書けない #974

Closed
norio13 opened this Issue Oct 30, 2016 · 7 comments

Projects

None yet

2 participants

@norio13
norio13 commented Oct 30, 2016

:hideの引数{cmd}を省略した場合のみ、後ろにコメントを書いて実行するとE474が出ました。

sample.vim

hide " a

Vim起動

vim -Nu NONE -S sample.vim

表示されたエラー

E474: 無効な引数です: hide " a

hideに引数を付けた場合や、hide以外のコマンドで確認した所、エラーは起こりませんでした。

hide ls " a
tabedit a.txt " a
tabedit " a
bdelete a.txt " a
bdelete " a
botright " a
botright edit a.txt " a

Vimのバージョン

8.0.54

OSの種類/ディストリ/バージョン

  • Debian jessie 8.6 64bit
@h-east
Member
h-east commented Nov 2, 2016

このpatchでエラー出なくなると思います。(未ビルド&未動作確認)
特に悪影響なければpatch送っても良いかもです。取り込まれるかどうかは分かりませんけど😁

diff -ru vim.orig/src/ex_cmds.h vim/src/ex_cmds.h
--- vim.orig/src/ex_cmds.h  2016-10-30 13:57:52.000000000 +0900
+++ vim/src/ex_cmds.h   2016-11-02 15:48:49.193934300 +0900
@@ -623,7 +623,7 @@
            BANG|EXTRA|TRLBAR|SBOXOK|CMDWIN,
            ADDR_LINES),
 EX(CMD_hide,       "hide",     ex_hide,
-           BANG|RANGE|NOTADR|COUNT|EXTRA|NOTRLCOM,
+           BANG|RANGE|NOTADR|COUNT|EXTRA,
            ADDR_WINDOWS),
 EX(CMD_history,        "history",  ex_history,
            EXTRA|TRLBAR|CMDWIN,
@norio13
norio13 commented Nov 2, 2016 edited

ありがとうございます。
h-eastさんのpatchを参考にしてpatchを書きました。
こうするとエラーが消えましたがこれでいいのかよく分かりません。

diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 6802b8b..3dc1999 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -7575,7 +7575,7 @@ ex_all(exarg_T *eap)
 ex_hide(exarg_T *eap)
 {
     if (*eap->arg != NUL && check_nextcmd(eap->arg) == NULL)
-   eap->errmsg = e_invarg;
+   win_close(curwin, FALSE);   /* don't free buffer */
     else
     {
    /* ":hide" or ":hide | cmd": hide current window */

testファイル

function Test_hide_with_comment()
    tabedit
    let bufnr = bufnr('')
    hide
    call assert_equal([1, 1, 1], [bufexists(bufnr), buflisted(bufnr), bufloaded(bufnr)])
    execute bufnr . 'bwipeout'

    tabedit
    let bufnr = bufnr('')
    hide " comment
    call assert_equal([1, 1, 1], [bufexists(bufnr), buflisted(bufnr), bufloaded(bufnr)])
    execute bufnr . 'bwipeout'

    tabedit
    let bufnr = bufnr('')
    hide silent set bomb?
    call assert_equal([1, 1, 1], [bufexists(bufnr), buflisted(bufnr), bufloaded(bufnr)])
    execute bufnr . 'bwipeout'

    tabedit
    let bufnr = bufnr('')
    hide silent set bomb? " comment
    call assert_equal([1, 1, 1], [bufexists(bufnr), buflisted(bufnr), bufloaded(bufnr)])
    execute bufnr . 'bwipeout'
endfunction
@h-east
Member
h-east commented Nov 12, 2016

patch更新しました。おそらくこれが正しい修正なのではないかと思っています。
https://gist.github.com/h-east/c5bad05b9615d521b0245f5d5e8e7420

後で @norio13 さんのtestを取り込まさせていただきます。

@norio13
norio13 commented Nov 12, 2016

@h-east ありがとうございます。よろしくお願いいたします。

@h-east
Member
h-east commented Nov 13, 2016

patch更新しました(rev. 3)
testを追加しました。 @norio13 さんのtestコードからだいぶ違ったものになったので、申し訳ないですがauthorは私とさせて下さい🙇

@h-east h-east self-assigned this Nov 13, 2016
@h-east h-east added the xlose/fixed label Nov 15, 2016
@h-east
Member
h-east commented Nov 15, 2016

patch 8.0.0086
vim/vim@2256c99

@norio13 Thank you for reporting the issue.👍

@h-east h-east closed this Nov 15, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment