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

/_CTRL-L で "~(チルダ)" があるとおかしくなる #1055

Closed
ryunix opened this Issue May 22, 2017 · 7 comments

Comments

Projects
None yet
2 participants
@ryunix
Member

ryunix commented May 22, 2017

質問・報告の内容

:set incsearch の状態で /_CTRL-L を押下することにより、現在のマッチの末尾から1文字追加することができます。
この時に、~ があるとおかしくなります。

他のエスケープが必要な文字、例えば $ はエスケープされて \$ になります。
これは単にエスケープ処理が漏れているのか、それとも何か理由があってエスケープの対象となっていないのか...

とりあえず前者を仮定してパッチを書いてみました。
初パッチなのでおかしいところがないか、テストの書き方は正しいかを見ていただきたいです。

次の点が気になっています。

  1. "~" を追加した時に右括弧が揃わなくなってしまった、合わせたほうがいいのか (でもインデントルールがよく分からない)
  2. テストの妥当性、書き方は正しいのか (別のテストをコピーしたので意味が分かっていない箇所がある (char_avail とか))
diff --git a/src/ex_getln.c b/src/ex_getln.c
index c7a6d85..0dad315 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -1492,7 +1492,7 @@ getcmdline(
 			    if (c != NUL)
 			    {
 				if (c == firstc || vim_strchr((char_u *)(
-					      p_magic ? "\\^$.*[" : "\\^$"), c)
+					      p_magic ? "\\^$.*[~" : "\\^$"), c)
 								       != NULL)
 				{
 				    /* put a backslash before special
diff --git a/src/testdir/test_search.vim b/src/testdir/test_search.vim
index 730e683..842832b 100644
--- a/src/testdir/test_search.vim
+++ b/src/testdir/test_search.vim
@@ -270,6 +270,87 @@ func Test_search_cmdline2()
   bw!
 endfunc
 
+func Test_search_cmdline3()
+  if !exists('+incsearch')
+    return
+  endif
+  " need to disable char_avail,
+  " so that expansion of commandline works
+  call test_override("char_avail", 1)
+  new
+  call setline(1, ['  1', '  2 \', '  3 ^', '  4 $', '  5 .', '  6 *', '  7 [', '  8 ~'])
+  " Test 1
+  " CTRL-L special characters are escaped
+  " and adds to the search pattern (set magic)
+  set incsearch magic
+  1
+  " \
+  call feedkeys("/2\<c-l>\<c-l>\<cr>", 'tx')
+  call assert_equal('  2 \', getline('.'))
+  1
+  " ^
+  call feedkeys("/3\<c-l>\<c-l>\<cr>", 'tx')
+  call assert_equal('  3 ^', getline('.'))
+  1
+  " $
+  call feedkeys("/4\<c-l>\<c-l>\<cr>", 'tx')
+  call assert_equal('  4 $', getline('.'))
+  1
+  " .
+  call feedkeys("/5\<c-l>\<c-l>\<cr>", 'tx')
+  call assert_equal('  5 .', getline('.'))
+  1
+  " *
+  call feedkeys("/6\<c-l>\<c-l>\<cr>", 'tx')
+  call assert_equal('  6 *', getline('.'))
+  1
+  " [
+  call feedkeys("/7\<c-l>\<c-l>\<cr>", 'tx')
+  call assert_equal('  7 [', getline('.'))
+  1
+  " ~
+  call feedkeys("/8\<c-l>\<c-l>\<cr>", 'tx')
+  call assert_equal('  8 ~', getline('.'))
+
+  " Test 2
+  " CTRL-L special characters are escaped
+  " and adds to the search pattern (set nomagic)
+  set incsearch nomagic
+  1
+  " \
+  call feedkeys("/2\<c-l>\<c-l>\<cr>", 'tx')
+  call assert_equal('  2 \', getline('.'))
+  1
+  " ^
+  call feedkeys("/3\<c-l>\<c-l>\<cr>", 'tx')
+  call assert_equal('  3 ^', getline('.'))
+  1
+  " $
+  call feedkeys("/4\<c-l>\<c-l>\<cr>", 'tx')
+  call assert_equal('  4 $', getline('.'))
+  1
+  " .
+  call feedkeys("/5\<c-l>\<c-l>\<cr>", 'tx')
+  call assert_equal('  5 .', getline('.'))
+  1
+  " *
+  call feedkeys("/6\<c-l>\<c-l>\<cr>", 'tx')
+  call assert_equal('  6 *', getline('.'))
+  1
+  " [
+  call feedkeys("/7\<c-l>\<c-l>\<cr>", 'tx')
+  call assert_equal('  7 [', getline('.'))
+  1
+  " ~
+  call feedkeys("/8\<c-l>\<c-l>\<cr>", 'tx')
+  call assert_equal('  8 ~', getline('.'))
+
+  " clean up
+  set noincsearch magic
+  call test_override("char_avail", 0)
+  bw!
+endfunc
+
 func Test_use_sub_pat()
   split
   let @/ = ''

Vimのバージョン

8.0.0600 (MacVim)

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

  • macOS Sierra

使用している or 関係していそうなプラグイン

なし

その他

よろしくお願いします 🙇

@h-east

This comment has been minimized.

Show comment
Hide comment
@h-east

h-east May 23, 2017

Member

良いと思います👍

"~" を追加した時に右括弧が揃わなくなってしまった

一番右側の ')' のことですか?80カラムにあるので今のpatchで問題ないです。
変更するなら、p_magic~ の開始位置が4の倍数カラムから始まっていないので合わせてあげてもいいかもです。

Member

h-east commented May 23, 2017

良いと思います👍

"~" を追加した時に右括弧が揃わなくなってしまった

一番右側の ')' のことですか?80カラムにあるので今のpatchで問題ないです。
変更するなら、p_magic~ の開始位置が4の倍数カラムから始まっていないので合わせてあげてもいいかもです。

@ryunix

This comment has been minimized.

Show comment
Hide comment
@ryunix

ryunix May 23, 2017

Member

@h-east ありがとうございます!

一番右側の ')' のことですか?

そうです!
変更前は揃っていたようなのでどうするかな〜と思いましたが、p_magic の前を削ることによって合わせるのよさそうですね!

Member

ryunix commented May 23, 2017

@h-east ありがとうございます!

一番右側の ')' のことですか?

そうです!
変更前は揃っていたようなのでどうするかな〜と思いましたが、p_magic の前を削ることによって合わせるのよさそうですね!

@h-east

This comment has been minimized.

Show comment
Hide comment
@h-east

h-east May 23, 2017

Member

変更前は揃っていた

あー、理解しました。右括弧が次行の!= NULL)の右括弧とカラムが同じになっていることを「揃っている」と認識しているのですね。
それはたまたまです。合わせる必要はないです。

Member

h-east commented May 23, 2017

変更前は揃っていた

あー、理解しました。右括弧が次行の!= NULL)の右括弧とカラムが同じになっていることを「揃っている」と認識しているのですね。
それはたまたまです。合わせる必要はないです。

@ryunix

This comment has been minimized.

Show comment
Hide comment
@ryunix

ryunix May 23, 2017

Member

その通りです、伝わりづらくて申し訳ないです 🙇

なるほど、それでは修正は行わずに最初のパッチを送付することにします。

Member

ryunix commented May 23, 2017

その通りです、伝わりづらくて申し訳ないです 🙇

なるほど、それでは修正は行わずに最初のパッチを送付することにします。

@ryunix

This comment has been minimized.

Show comment
Hide comment
@ryunix

ryunix May 23, 2017

Member

今日一杯くらいはコメントを募集して、明日以降にパッチを送付する予定にしておきます。

Member

ryunix commented May 23, 2017

今日一杯くらいはコメントを募集して、明日以降にパッチを送付する予定にしておきます。

@h-east h-east added xlose/fixed and removed status/patched labels Jun 29, 2017

@h-east

This comment has been minimized.

Show comment
Hide comment
@h-east

h-east Jun 29, 2017

Member

他の人がバグ報告して、ChrisBraさんがサクッとpacthを書いちゃいました。
https://groups.google.com/d/msg/vim_dev/pmMBT51AGrY/w0KaXHtHAwAJ

patch 8.0.0689
vim/vim@a693d05

Member

h-east commented Jun 29, 2017

他の人がバグ報告して、ChrisBraさんがサクッとpacthを書いちゃいました。
https://groups.google.com/d/msg/vim_dev/pmMBT51AGrY/w0KaXHtHAwAJ

patch 8.0.0689
vim/vim@a693d05

@h-east h-east closed this Jun 29, 2017

@ryunix

This comment has been minimized.

Show comment
Hide comment
@ryunix

ryunix Jul 10, 2017

Member

🙇

Member

ryunix commented Jul 10, 2017

🙇

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment