Skip to content
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

/のあとすぐにコマンドラインに入ると<Plug>(incsearch-nohlsearch)と表示される #82

Closed
NigoroJr opened this issue May 30, 2015 · 12 comments

Comments

@NigoroJr
Copy link

とても便利なプラグインをありがとうございます。デフォルト設定のVimで/のあとにハイライトが消えないとイラっとする程度に手放せなくなっております。

検索のあとに挿入モードに入り、すぐにノーマルモードに戻り:でコマンドモードに入ると、そこに<Plug>(incsearch-nohlsearch)と入力された状態になります。この際、

  • nohlsearchは実行されず、ハイライトが残ったまま
  • 「すぐに」というのがポイントのようで、1秒ほど待つとちゃんとハイライトが消える
  • *で検索する場合はすぐにコマンドモードに入っても<Plug>(incsearch-nohlsearch)が表示されたりされなかったり(単語によって異なる)
  • 挿入モードへの入り方でなったりならなかったり(iで入るとならないが、Aで入るとなる、等)
  • devブランチを使うと、<Plug>(_incsearch-sethlsearch)と表示される

ということを確認しました。また、<Esc>ではなくC-oで挿入ノーマルモードに入ってみたところ、:nunmap <Plug>(incsearch-nohlsearch)と表示されたため、autoload/incsearch/util.vims:silent_feedbackかな?と思ったのですが、はっきりとは分かりません。

以下が再現する.vimrcです。

  1. /set<CR>で検索する
  2. A<Esc>:を間隔をあけずに入力する
  3. コマンドラインに<Plug>(incsearch-nohlsearch)と表示される
set hlsearch
if has('vim_starting')
  set nocompatible
  set runtimepath+=~/.vim/bundle/neobundle.vim/
endif
call neobundle#begin(expand('~/.vim/bundle/'))

NeoBundleFetch 'Shougo/neobundle.vim'
NeoBundle 'haya14busa/incsearch.vim'

call neobundle#end()

let g:incsearch#auto_nohlsearch = 1

map / <Plug>(incsearch-forward)
map ? <Plug>(incsearch-backward)
map g/ <Plug>(incsearch-stay)

map n  <Plug>(incsearch-nohl-n)
map N  <Plug>(incsearch-nohl-N)
map *  <Plug>(incsearch-nohl-*)
map #  <Plug>(incsearch-nohl-#)
map g* <Plug>(incsearch-nohl-g*)
map g# <Plug>(incsearch-nohl-g#)

filetype plugin indent on
@haya14busa
Copy link
Owner

@NigoroJr さん報告ありがとうございます!

似たような現象は把握していたのですが,再現手順も固まっていなくて直せていませんでした.
@NigoroJr さん の手順でしっかり再現しました.
devブランチでも試していただいてありがとうございます!
ちょっと調査してみます 👍

@haya14busa
Copy link
Owner

改めて考えていたら解決できることに気づいたので dev ブランチで実装してみました ✨
もしよかったら試していただけないでしょうか? https://github.com/haya14busa/incsearch.vim/tree/dev

@NigoroJr
Copy link
Author

NigoroJr commented Jun 3, 2015

早速ありがとうございます!devブランチの変更を試してみました。
コマンドラインに文字が表示される問題は直っているみたいです:+1:

(なんだか壊そうとしているみたいで肩身が狭いのですが、)間隔をあけずに〜の操作をしたあと、set hlsearch?nohlsearchになっています(*などでもう一回検索をすると、ハイライトされない)。この行なのかなと思ったのですが、直前のコメントに書かれているヘルプを読んでみたところ、これは仕様なのでしょうか?

@haya14busa
Copy link
Owner

(なんだか壊そうとしているみたいで肩身が狭いのですが、)

いえいえ,自分でも再現手順がよくわかってなかったりするのでとてもありがたいです!

間隔をあけずに〜の操作をしたあと、set hlsearch?がnohlsearchになっています( * などでもう一回検索をすると、ハイライトされない)

これはバグですね.修正してみたので dev ブランチをアップデートして試していただけないでしょうか?
ただし,A<Esc>: の連続といったケースは対応していますが,他のケースに対応できたかはいまいちわからないのでもうちょっとこちらでも見てみます.

haya14busa added a commit that referenced this issue Jun 3, 2015
@NigoroJr
Copy link
Author

NigoroJr commented Jun 3, 2015

いえいえ,自分でも再現手順がよくわかってなかったりするのでとてもありがたいです!

そう言って頂けるとありがたいです。

修正してみたので dev ブランチをアップデートして試していただけないでしょうか?

うーん、やはりnohlsearchになってしまいます。念の為再現方法ですが、

  1. :set hlsearch?hlsearchと出ることを確認する
  2. /set<CR>で検索する
  3. A<Esc>:を間隔をあけずに入力する
  4. set hlsearch?をするとnohlsearchと表示される

ということです。A<Esc>:や他のケースでやってみましたが、nohlsearchになります。

haya14busa added a commit that referenced this issue Jun 4, 2015
InsertEnter attaches InsertLeave event which re-trigger auto nohlsearch
autocmds

ref: #80 #82
@haya14busa
Copy link
Owner

@NigoroJr さん

すいませんちゃんと再現しました, ありがとうございます.

そもそも実は インサートモードに入ったときにハイライトを消すという機能は #80 で入れてみた実験的なもので,
この機能を実現するためには &hogehlsearch の値をいじるしかありませんでした.
しかし,そもそもやはり &hlsearchの値をむやみに変更するのは筋が悪いと考えたこと,また個人的にはインサート時
にハイライトが消えるよりもインサートモードから抜けて動いた時に消えてほしいと思ったのでそもそもこの機能を
変更して修正を行ってみました.

お時間あるときにdevブランチを更新して確認していただけると嬉しいデス

@NigoroJr
Copy link
Author

NigoroJr commented Jun 4, 2015

インサート時にハイライトが消えるよりもインサートモードから抜けて動いた時に消えてほしい

なるほど、更新してそのままではインサートモードを抜けたときに消えなかったのですが、この行の1を0にすると、ちゃんとInsertLeaveでハイライトが消えました。0にすることで何か弊害はあるのでしょうか?

また、0に変更したあとにA<Esc>:をすぐに入力すると:nohlsearchが実行されなかったのですが、調べてみたところ、「間隔をあけずに」というのはターミナルVim特有(?)のもののようで、gvimでは起こりませんでした。timeoutlenを短くすることで一応待ち時間は短くなるのですが、他のキーバインドの待ち時間も短くなってしまうので、根本的な解決にはなりません。

@haya14busa
Copy link
Owner

この行の1を0にすると、ちゃんとInsertLeaveでハイライトが消えました。0にすることで何か弊害はあるのでしょうか?

"インサートモードから抜けて動いた" 時に消えると便利かなと思ったので弊害はないですが意図的でした.
というのも,/{pattern} してから cgn するときなどはどこが検索結果になっていたかわかりやすいほうが便利だと思ったからです.

ただし,InsertLeave時にもう消えてほしいという気持ちも僕もわかるのでオプションを実装することも考えています.
しかし,移動後にハイライトが消えるだけで十分だった場合はむやみにオプションを増やしすぎてもあとから困るのでちょっと様子見中です.

@NigoroJr さんはどう思われるでしょうか?

@NigoroJr
Copy link
Author

NigoroJr commented Jun 4, 2015

抜けて動いた時に

すみません、「動いた時に」というところを見落としていました。意図した動作だったのですね、納得です。

/{pattern} してから cgn するときなどはどこが検索結果になっていたかわかりやすい

なるほど!私はgnっていう方法があったんだーという程度のVim戦闘力なのですが、オプションはあるに越したことはないと思います。と言っておきながら、私は当初の、キー入力でコマンドラインに表示されていたのが気になっていただけなので「抜けて動いたときに」で使わせていただこうと思っています 😚 しかし #80 の方のように「抜けたとき」にハイライトが消えるのを期待する方もいることを考えると、可能性としては残しておき、 @haya14busa さんのお時間があるときに、というくらいで良いと個人的には思います。十分に便利なプラグインですので。

このIssueは解決しましたので、閉じさせていただきます。ありがとうございました!

@NigoroJr NigoroJr closed this as completed Jun 4, 2015
@haya14busa
Copy link
Owner

すいませんまだ master にはマージされてないので一応 reopenしておきます.がっ,僕が勝手にマスターにマージしたときに勝手に閉じるので @NigoroJr さんは特に問題無い限りは放置していただいて結構です :)

オプションは少し考えてみます

再現手順を含めた報告 & デバッグ 助かりました!ありがとうございます! ✨

@haya14busa haya14busa reopened this Jun 4, 2015
@haya14busa
Copy link
Owner

masterにマージしました.@NigoroJr さん改めてありがとうございました 👍

@NigoroJr
Copy link
Author

NigoroJr commented Jun 7, 2015

こちらこそありがとうございました! :-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants