-
-
Notifications
You must be signed in to change notification settings - Fork 76
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
[Vim-mode] ヴィジュアルモードを開始したとき,単語単位のオブジェクトが正しく選択できない #16
Comments
すみません。この振る舞いに関しては手元では適当に直してみましたが、他にもテストケースを作って調べると沢山 vim と違う動作が判明したので後で纏めて修正します。 (vim の help の説明は厳密には書いていないので、様々な個別の状況でどういう動作をすれば良いのかが全部試さないと分からないんですよね。今の所分かっている注意点(テストのチェックポイント)は「omap と xmap で動作が微妙に変わる事」「引数を与えた時の振る舞い」「xmap でカーソル位置が選択範囲の他の端点の前にあるか後にあるか同じ位置にあるかで振る舞いが変わる事」など…) |
確認いたしました。ありがとうございます。 以下,本筋と関係ないです。 |
仕様として定めるというのは楽しそうですね。 テキストオブジェクトの不思議な動作を考えると、他の模倣実装がどのレベルで Vim に準拠しているのかはまちまちなのだろうという気がします…。仕様・規格として定めるとしたら未定義の動作・未規定の動作などを持ち込んで誤魔化すか Vim 自体の細かい動作に対しても全般的に見直しが迫られるかのどちらかでしょうね。 |
一応 vi は POSIX で規格化されているので、POSIX.1-2017 vi を見に行ったら
と書いてありますね… (如何に inconsistent なのかの長い説明が…)。結局 POSIX vi では空行と空白行の取り扱いに関しては単純化しているようです。一方で |
VimはPOSIXの一部仕様を意図的に無視する方針のようですね[vim 2005]。しかし挙げられている非互換な項目に,テキストオブジェクトの空白文字に対する振舞いについてのものはありません。(Vimの開発陣がこれらの振舞いについて気が付いていないなんてことはありえないと思うのですが……)
NeoVimが一番忠実にVimの挙動を再現しようとしているのかな,とも思いました。が,そもそもNeoVimはVimをフルスクラッチで再実装するのではなく,Vimのソースコードをリファクタリングするというプロジェクト指針ですので,本質的にVimと同じですね。つまりNeoVimを開発するにあたって,あまりVimの厳密な仕様を考慮する必要はないのでしょう。「中枢部分はVimのものを利用する」と明記してありますし。 |
ありがとうございます! POSIX準拠についてもドキュメントに書かれているのですね。「テストを行いました」と言っていますが、たぶん POSIX のすべての記述内容に関して真面目に検証したのではなくて、テストを作りやすい項目の確認だけに留まっているのではないかという気がします。 POSIX 2004 でも該当部分の記述は同じですね…。POSIX を読み違えていなければ、少なくとも motion Vim のソースコードをリファクタリングしたくなる気持ち、物凄く分かります… |
使わないテキストエディタの模倣実装にこんなに労力を割けさしてしまって,ほんと,すいません。ありがとうございます。 (NeoVimでも当該部分に関しては同じコードのようですね。https://github.com/neovim/neovim/blob/master/src/nvim/search.c ) ところで,これは全く無関係な話題ですが,@akinomyoga 様が書かれているmemo.txtは,Emacsのorgモードで書かれているんでしょうか? |
こちらの趣味で恐縮させてしまっているようですみません。お気になさらないで下さい。何れは直さなければならなくなる (もし
なるほど。NeoVim もテキストオブジェクトには近づきたくないのですかね…
昔は、色々の開発ログや研究ログなどを HTML で書いたり Markdown にして見たり Wiki にして見たりなど試行錯誤したのですが、結局ただのテキストに落ち着いたのでした。どうせ端末の中でしか見ないので端末の中での見易さが重視で、そうするとマークアップ言語だと制限や面倒があります (Markdown はそれが目的で設計されたのだとは思うのですが、やはり面倒になりまして…)。体裁など考えず思考をただただ書きなぐるのに集中したいのでした。また昔は種類ごとにファイルを分けたりしていたのですが、 ただ Emacs のバインディングは (モードに関係なく) 弄っていて、 |
memo.txtには,僕ではとても与りきれないような沢山の有益な情報が詰まっていて,日々勉強させていただいております(問題が発生したときの対処の手順など)。memo.txtを構文強調で着色できれば更に素晴らしくなるなと思って,構文の種類を質問したのです(Emacsでのメモならばすなわちorgモードかな,と勝手に想像していまして。どうでもいいですが,なぜかVimの組み込みの構文強調にはorgモード用のものが存在しないんです。かなり有名なLML方言だと思うんですが)。 メモをどういった形式で書くかというのは,結構重要な要素の割に,個人の感性にかなり左右される部分があるせいで決定打となる記述形式がないのが現状ですよね……。最近はAsciiDocなんかもいいかなと僕としては思っています。公式がUML図やLaTeX形式での数式表現をサポートしていたり,XML形式であるDocBookと互換性がある点が気に入りました。欠点は,プレーンテキストとして見たときに(つまり端末上などで),可読であるとは言えかなり煩雑なマークアップが目立つという点です。 |
いえ、適当に思考を書き散らしているだけなのでそう価値のあるものではないはずなのです…。元々人に読ませるためのものではないので (そして問題対処の部分は自分が読み返すことすら想定していなかったり…)、冗長だったり、そもそも日本語になっていなかったり、検証していないいい加減なことが書かれていたり、その辺りは留意していただければ幸いです。
あと必ずしも上から下に順番に書いている訳ではない、ということも…。
大した構文はないですし参考になるか分かりませんが、一応気分は書いておきます。
取り敢えず (1) 入れ子構造はインデントで表現する (2) 箇条書きは
(3) 基本的にブロックは書きながらではなくて書き終わった後に囲んでいます。
LML なら構文強調の拡張を自分で書いても良いのかもしれませんね。ただ、
あ、はいそうなのです。知っていても大して訳には立たないですが、そういう色々の裏が見えてくると楽しいですよね。
これは難しいですよね。個人の性格やメモの用途にもよりそうです。僕の場合は、下手に構文が定義されているとその構文を使って整える事に凝ってしまって、肝心の思考の方が進まなくなって駄目駄目なのです。果ては構文を作ることにまで凝りだしたり… (akinomyoga/agh や akinomyoga/lwiki などはその副産物…)。そういう訳でテキストファイル (検証手段なし) にまで退化したのでした。あと、試行錯誤は |
|
本当はもっと沢山テストケースを作って試そうと考えていましたが、もう疲れたのでまたいつか試すことにします… (作るとまた振る舞いの違いが明らかになって修正しなければならなくなる…)。 ※既知の違い: ビジュアルモードで現在位置が1行目の2文字目でありそれが開始点よりも前にある時、 問題がなければ後で閉じますね |
ありがとうございます。 |
ありがとうございます! 取り敢えず閉じますね |
Commit ID: b7291a7
Version of GNU Bash: 4.4.12
ノーマルモードで
v
を入力した後にaw
などとすると単語単位で選択することができる筈ですが,できなくなっています。参考: https://vim-jp.org/vimdoc-ja/motion.html#v_aw
波下線部が選択されます。本来はfoobar全体が選択されるべきです。
同じような挙動は単語を単位とする全てのオブジェクトで起こっているようです。
The text was updated successfully, but these errors were encountered: