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

concealしていると検索時にカーソル位置がずれる #115

Closed
koron opened this issue Dec 28, 2011 · 19 comments
Closed

concealしていると検索時にカーソル位置がずれる #115

koron opened this issue Dec 28, 2011 · 19 comments

Comments

@koron
Copy link
Member

koron commented Dec 28, 2011

再現手順

:help pattern.txt
440G
/line<CR>

期待する動作

カーソルの下はlで続く文字がineである。

実際の動作

カーソルの下はfで続く文字は-lineである。

推測される原因

マッチ位置より左にconcealされた要素(文字)があること。
concealされた文字数分、カーソルが実際のマッチ位置よりも左へズレるようだ。

@thinca
Copy link
Member

thinca commented Dec 28, 2011

マッチ位置と言うより、左に conceal があると常にカーソルがずれますね。
conceal がある行とない行を移動するとよくわかります。
ちなみに v などでビジュアルモードにして conceal 文字を表示すると正しく表示されます。

@Shougo
Copy link
Member

Shougo commented Dec 28, 2011

確かにconceal時の挙動には「?」というところがあります。
改善できると良いのですが……。

@mattn
Copy link
Member

mattn commented Mar 19, 2012

@koron
Copy link
Member Author

koron commented Mar 19, 2012

説明読んだだけだとドンピシャ。でも、なにげにBramの要求(テスト書いてよ)が高度過ぎる件。
テストスクリプト、これ書けるのかなぁ? /%vあたりが効いてくれればあるいは?

@koron
Copy link
Member Author

koron commented Mar 19, 2012

/ で移動後に col(.) で拾って明らかに違う位置ってわかるのか。

@koron
Copy link
Member Author

koron commented Mar 19, 2012

ごめん。

Groupのはインデントの話で、本件はマッチ位置の話だった。

@mattn
Copy link
Member

mattn commented Mar 19, 2012

ここに便乗してついでに直してもらうのがいい気がする。

@h-east
Copy link
Member

h-east commented Nov 5, 2012

前提条件

:syntax enable
:set concealcursor+=n
:set conceallevel=3

ソース解析内容

conceal関連は以下の条件コンパイルで囲まれている。

#ifdef FEAT_CONCEAL
#endif

関連変数

curwin->w_p_cocu            //● カレントwindowの `concealcursor`オプション値
curwin->w_p_cole            //● カレントwindowの `conceallevel`オプション値

関連関数

conceal_cursor_line()
conceal_check_cursur_line()
win_line()              //● 指定されたwindowの行を描画する

src/screen.c : win_line()
4516~4528行でconceal属性のテキスト非表示の場合のカーソル位置を補正している。
4524行を以下のように修正すると/検索時のカーソル位置は正常になるが行内のカーソル移動がちょっとおかしくなる。
(修正前でも行内のカーソル移動はおかしいがそれとはまた別の動作になる)

diff -r b161d3c5b588 src/screen.c
--- a/src/screen.c      Tue Oct 23 05:17:38 2012 +0200
+++ b/src/screen.c      Mon Nov 05 22:09:57 2012 +0900
@@ -4521,7 +4521,7 @@
                && conceal_cursor_line(wp)
                && (int)wp->w_virtcol <= vcol + n_skip)
        {
-           wp->w_wcol = col - boguscols;
+           wp->w_wcol = col;
            wp->w_wrow = row;
            did_wcol = TRUE;
        }

ということから 変数boguscols を更新している部分を追いかければ色々分かってくると思われる。
(5004~5089行あたりが要注目か?)

#268の折り返し関連も同根かなぁ。少なくともwin_line()内の修正になるのは間違いない。

どなたか引き継ぎません?win_line()は2600行くらいあるけど、defined(FEAT_CONCEAL)で囲まれた部分だけを解析すれば何か見えて来ると思います。
(途中で投げ出してもOK)

@h-east
Copy link
Member

h-east commented Nov 17, 2012

※vim-jpの皆さんへ。このissueはお試しで @ramu (twitterではramusara)さんに調べてもらっています。いい感じにサポートお願いします。

@ramu さん
このissueに関する質問、調査結果等はココによろしくです。

現象再現しないとのことですが、こちらでは以下の手順で再現しました。(fedora16 64bit, vim ver:7.3.715 on PuTTY)

$ cd (vimソースを取得したフォルダ)
$ src/vim -N -u NONE -c "syntax enable" -c "set cocu+=n cole=3" -c "h pattern.txt" +440
/line<CR>

どうでっしゃろ?

@h-east
Copy link
Member

h-east commented Dec 5, 2012

以下のpatchでconceal関連のtestが追加された。
現在のカーソル位置の情報を返す関数が追加された。screencol() と screenrow()
だぶんbugはそのまま。
Patch 7.3.748
https://groups.google.com/d/topic/vim_dev/80Diqmk-S-o/discussion

@mattn
Copy link
Member

mattn commented Dec 5, 2012

Patch 7.3.747 じゃなくて?

@h-east
Copy link
Member

h-east commented Dec 5, 2012

ごめん。見逃してました。
Patch 7.3.747
https://groups.google.com/d/topic/vim_dev/5GADunZjHUc/discussion

@h-east
Copy link
Member

h-east commented Dec 5, 2012

動作確認しました。patch 7.3.747で治ってる!!
そもそも3月にpatchは出てたのか、、誰か教えてくれよーー。
http://comments.gmane.org/gmane.editors.vim.devel/33830

@ramu さん。。。また別のissueを頑張って下さい。

@h-east h-east closed this as completed Dec 5, 2012
@h-east
Copy link
Member

h-east commented Dec 5, 2012

そもそも3月にpatchは出てたのか、、誰か教えてくれよーー。

まず先にMLの過去の投稿を検索しなかった俺が悪かった。次から改善します。

@k-takata
Copy link
Member

k-takata commented Dec 5, 2012

そもそも3月にpatchは出てたのか、、誰か教えてくれよーー。

mattnさんが出した https://groups.google.com/d/topic/vim_dev/fc0p8bfFo2Y/discussion は、URLは違うがよく見ると全く同じスレッド…
このパッチで直るのはTabの表示位置だけだと思っていたのですが、同根だったんですね。

まだ、#268 は直っていないのでそちらの方を…。

@h-east
Copy link
Member

h-east commented Dec 5, 2012

あーっ、このissueの上の方に貼ってあったリンクすら見に行ってなかったw。。すんません。
@k-takata 情報ありがとうございます。

まだ、#268 は直っていないのでそちらの方を…。

そうですね、 @ramu さんにはconcealスペシャリストになってもらいましょう。

@mattn
Copy link
Member

mattn commented Dec 5, 2012

#268 再現しませんね。

@mattn
Copy link
Member

mattn commented Dec 5, 2012

あっちにキャプチャ貼っときました。

@mattn
Copy link
Member

mattn commented Dec 5, 2012

治ったんじゃないの? 今回ので

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

No branches or pull requests

6 participants