何も選択していないときの逆インデント(アンインデント)について

  1. Kuroさん、こんにちは。

    フォーラム「検索ヒット件数が数万件に渡る場合『すべて検索』動作速度について」内の逆インデント(アンインデント)の話題の続きです。
    https://www.haijin-boys.com/discussions/7307#discussion-7364

    Meryのベータ版 Ver 3.5.6から何も選択していないときにShift + Tabキーを押すと逆インデントができるようになり、Markdownで入力するときに快適になりました。

    ですが、何も選択していないときにShift + Tabキーを押して逆インデントするとカーソルがある行が選択状態になり、違和感を感じます。
    https://imgur.com/gallery/sOnJtT7

    個人的には、何も選択していない状態で逆インデントするときはカーソルがある行を選択状態にしない方がしっくりきます。
    上記の動作はVSCode、Sublime Text、E〇Editor、Notepad++といったテキストエディタが該当します。
    https://imgur.com/gallery/ZmsYuZk

    よって、何も選択していない状態で逆インデントするときはカーソルがある行を選択状態にしないようにしてもらえませんか?
    また、このときはインデントと逆インデントを自由に繰り返せると助かります。

    なお、1行または複数行を選択した状態で逆インデントしたときは現状の仕様(行を選択状態のまま逆インデント)が分かりやすいです。

    【動作環境】
    ・OS:Windows 11 Home 22H2(64ビット)
    ・Mery:Ver 3.6.2(64ビット)インストーラー版
    ・導入しているマクロ:なし
    ・導入しているプラグイン:アウトライン

     |  MSY-07  |  返信
  2. こんにちは。ご意見ありがとうございます。

    何も選択していない状態での逆インデントについて、別のトピックでの脇道でしたが、改めてトピックを立てていただき、ありがとうございます。

    前回の回答と一部内容が重複するかもしれませんが、ご了承ください。

    > 個人的には、何も選択していない状態で逆インデントするときはカーソルがある行を選択状態にしない方がしっくりきます。

    別のトピックで既に触れていますが、この仕様については私も他のエディターで確認し、それぞれのメリットとデメリットを認識しており、個人的には選択状態にするほうが好みです。

    > また、このときはインデントと逆インデントを自由に繰り返せると助かります。

    そうなんですよね。選択状態にしないタイプでは、インデントと逆インデントを自由に繰り返すことができなくなるため、私は使っていて不便を感じた次第です。

    具体的には、VSCode で、カーソルが行頭ではなくテキストの途中にある場合に、Shift + Tab で逆インデントすることがあります。

    このとき、テキストは選択状態にならないため、続けて Tab を押すと、それがインデントなのか、タブ文字の入力なのかを区別することはできませんから、タブ文字が挿入されてしまい、インデントと逆インデントを自由に繰り返すことはできません。

    また、この方式のメリットとしては、逆インデントしたあとに、すぐに入力に移れるという点が挙げられます。

    ちなみに、Notepad++ で同様の操作をすると、カーソルが行頭に戻るようで、続けてインデントの操作はできますが、これだと、すぐに入力に移れるというメリットはなくなってしまいますね。

    というわけで、ユーザーとして、個人的には、インデントと逆インデントを繰り返せる点と、インデント対象が選択されることで分かりやすい点から、選択状態にするほうが好みです。

    もちろん、開発する側としては、VSCode 準拠というのは安心感があります。

    みなさんのご意見は開発の参考にさせていただきますので、ぜひ、ご意見をお聞かせいただければ助かります。

     |  Kuro  |  返信
  3. > そうなんですよね。選択状態にしないタイプでは、インデントと逆インデントを自由に繰り返すことができなくなるため、私は使っていて不便を感じた次第です。
    >
    > 具体的には、VSCode で、カーソルが行頭ではなくテキストの途中にある場合に、Shift + Tab で逆インデントすることがあります。
    >
    > このとき、テキストは選択状態にならないため、続けて Tab を押すと、それがインデントなのか、タブ文字の入力なのかを区別することはできませんから、タブ文字が挿入されてしまい、インデントと逆インデントを自由に繰り返すことはできません。

    確認したいのですが、「選択状態にしないタイプでは、インデントと逆インデントを自由に繰り返すことができなくなるため」と書いてありますが、これはカーソルが行頭ではなくテキストの途中にある場合も指すのでしょうか?
    というのも、Meryでカーソルが行頭にある場合はShift + Tabで逆インデントができるのですが、カーソルが行頭ではなくテキストの途中にある場合にShift + Tabを押しても何も起こらないからです(私の勘違いなら良いのですが)。

    もし勘違いでないのであれば、カーソルが行頭にある場合のみShift + Tabで逆インデントができるようにしたほうが分かりやすいです。
    というのも、左側にある行番号をクリックして行を選択状態にしたときにShift + Tabで逆インデントができるのは行頭部分だけなので、選択状態にしないタイプでも行頭部分だけ逆インデントできる方が操作に統一性があって分かりやすいからです。

    また、念のため聞きたいのですが、選択状態にしないタイプでカーソルが行頭にある場合のみインデントと逆インデントを自由に繰り返せるようにするのはできないのでしょうか?

     |  MSY-07  |  返信
  4. > 確認したいのですが、「選択状態にしないタイプでは、インデントと逆インデントを自由に繰り返すことができなくなるため」と書いてありますが、これはカーソルが行頭ではなくテキストの途中にある場合も指すのでしょうか?

    はい、そのとおりです。カーソルがテキストの途中にあるときに Shift + Tab を押した場合のことです。

    Mery では、自動的に対象の行が選択状態になり、逆インデントが行われるはずです。

    逆インデントが動作しない場合、Shift + Tab キーに別のコマンドやマクロなどを割り当てられていたりしないでしょうか?

    > また、念のため聞きたいのですが、選択状態にしないタイプでカーソルが行頭にある場合のみインデントと逆インデントを自由に繰り返せるようにするのはできないのでしょうか?

    選択状態にしないタイプは、カーソルが行頭にある場合のみ、インデントと逆インデントを繰り返すことができます。

    しかし、カーソルがテキストの途中にある場合は、逆インデントのあとにインデントはできず、タブ文字の挿入になります。

     |  Kuro  |  返信
  5. > はい、そのとおりです。カーソルがテキストの途中にあるときに Shift + Tab を押した場合のことです。
    >
    > Mery では、自動的に対象の行が選択状態になり、逆インデントが行われるはずです。
    >
    > 逆インデントが動作しない場合、Shift + Tab キーに別のコマンドやマクロなどを割り当てられていたりしないでしょうか?

    検証するため、一旦Meryをアンインストールして、Roamingフォルダ内のMeryフォルダも削除してから再インストールしました。
    マクロやプラグインは全て削除して、キーボードマップもリセットしました。
    ですが、何も選択していないときにカーソルがテキストの途中にある状態でShiftを10回押してインデントした後、Shift + Tabを10回押したのですが逆インデントされませんでした。
    https://imgur.com/gallery/F3lO0oW

    なお、比較対象としてNotepad++でも検証しましたが、こちらはShift + Tabを押すとカーソルが行頭に戻りました(以前、Kuroさんが説明していた通りでした)。
    https://imgur.com/gallery/hMeFWpv

     |  MSY-07  |  返信
  6. なるほど、"テキストの途中" という表現が誤解を招いてしまったようですね。

    インデント/逆インデントは、テキストの途中にあるタブ文字のことではなく、行頭にあるインデントのことです。

    具体的には、行頭にインデントがある状態で、"カーソル" がテキストの途中にある場合に、Shift + Tab キーを押して行う逆インデントのことを指しています。

    操作のスクリーンショットを貼っておきますね。(なぜか年齢確認が出ちゃうようですが、普通のスクショです)

    VSCode の場合:
    https://imgur.com/a/hOUCZwk

    上記のように、逆インデントを行った後にインデントができず、タブ文字が入力されてしまいます。

    Mery の場合:
    https://imgur.com/a/PVoqVZq

    上記のように、逆インデントを行うと選択状態になり、続けてインデントが可能です。

    個人的には、ソースコードをコピペした後のインデント調整などによく使う操作なので、VSCode のようにタブ文字が入力されてしまうのが好ましくないため、この仕様を選びました。

    もちろん、マクロを使用すればカスタマイズできるので、この仕様は必須ではなく、開発者としては中立の立場を取っています。

     |  Kuro  |  返信
  7. > なるほど、"テキストの途中" という表現が誤解を招いてしまったようですね。

    確かに「テキストの途中」という言葉の解釈を取り違えて迷走してしまいました。
    お手数をおかけしました。

    > 操作のスクリーンショットを貼っておきますね。(なぜか年齢確認が出ちゃうようですが、普通のスクショです)

    文章を何度も読んでも腑に落ちず、動画のスクリーンショットを見てようやく腑に落ちました。

    > 上記のように、逆インデントを行うと選択状態になり、続けてインデントが可能です。
    >
    > 個人的には、ソースコードをコピペした後のインデント調整などによく使う操作なので、VSCode のようにタブ文字が入力されてしまうのが好ましくないため、この仕様を選びました。

    解釈が正しくなった上で見ると、確かに現状の仕様の方が良いかなと思いました。

     |  MSY-07  |  返信
  8. いえいえ、こちらこそ説明が下手でした。

    ひとまず、意図が伝わって良かったです。それを踏まえて…

    > 解釈が正しくなった上で見ると、確かに現状の仕様の方が良いかなと思いました。

    私も考えてみたのですが、MSY-07 さんが最初の投稿でおっしゃられていた、以下の仕様は一理あると思いました。

    > よって、何も選択していない状態で逆インデントするときはカーソルがある行を選択状態にしないようにしてもらえませんか?

    VSCode などが挙げられていたため、つい VSCode 準拠のほうに思考が行ってしまいましたが、あいだを取って、次のような仕様はいかがでしょうか。

    ・何も選択していない状態で逆インデントするときは、カーソルのある行を選択状態にしない
    ・1 行または複数行を選択した状態で逆インデントしたときは、現状の仕様のまま

    これらは MSY-07 さんの最初のご提案に含まれていますが、それに加えて…

    ・少しでも選択範囲がある状態で逆インデントするときは、選択範囲を拡張してカーソルのある行全体を選択状態にする

    …という仕様です。

    VSCode の場合:
    https://imgur.com/zYamPI7

    ↑ VSCode は選択範囲がそのまま保持されるので、インデント操作がタブ文字の入力になってしまいます。

    Mery の仕様変更案:
    https://imgur.com/qNfRsnM

    ↑ 何も選択してない場合は VSCode と同じですが、少しでも選択範囲がある状態では、選択範囲を行全体に拡張することで、逆インデント/インデントを繰り返すことができます。

    この仕様案では、通常は VSCode のような操作ができ、必要に応じて行選択での逆インデント/インデントに切り替えられるため、利便性も向上できると思います。

     |  Kuro  |  返信
  9. > VSCode などが挙げられていたため、つい VSCode 準拠のほうに思考が行ってしまいましたが、あいだを取って、次のような仕様はいかがでしょうか。
    >
    > ・何も選択していない状態で逆インデントするときは、カーソルのある行を選択状態にしない
    > ・1 行または複数行を選択した状態で逆インデントしたときは、現状の仕様のまま

    上記の仕様で良いと思います。

    > これらは MSY-07 さんの最初のご提案に含まれていますが、それに加えて…
    >
    > ・少しでも選択範囲がある状態で逆インデントするときは、選択範囲を拡張してカーソルのある行全体を選択状態にする

    こういう使い方もあったんですね、知らなかった……
    これも上記の仕様で良いと思います。

     |  MSY-07  |  返信
  10. ご確認ありがとうございます。

    提案させていただいた仕様について、問題なさそうとのことで、ありがとうございます。

    > ・少しでも選択範囲がある状態で逆インデントするときは、選択範囲を拡張してカーソルのある行全体を選択状態にする
    > こういう使い方もあったんですね、知らなかった……

    秀〇エディタさんではこちらの仕様のみが採用されているようで、今回の提案は、言わば、VSCode と秀〇エディタさんのハイブリッド方式ですね。

    それでは、この方向で次のバージョンで実装できるよう、開発を進めていきたいと思います。

     |  Kuro  |  返信
  11. Ver 3.6.3のリリースお疲れさまでした。

    下記の仕様を確認しましたが、特に問題ありませんでした。

    > ・何も選択していない状態で逆インデントするときは、カーソルのある行を選択状態にしない
    > ・1 行または複数行を選択した状態で逆インデントしたときは、現状の仕様のまま
    > ・少しでも選択範囲がある状態で逆インデントするときは、選択範囲を拡張してカーソルのある行全体を選択状態にする

    おかげで以前より逆インデントが使いやすくなりました。
    仕様を変更していただきありがとうございました。

     |  MSY-07  |  返信
  12. ご確認いただき、ありがとうございます。

    問題なく動いているようで、ほっとしました。

    > おかげで以前より逆インデントが使いやすくなりました。
    > 仕様を変更していただきありがとうございました。

    こちらこそ、仕様検討へのご協力、ありがとうございました。

    VSCode に寄せつつ、ちょっと便利な使い方もできて、Mery らしい仕様になったのではないかと思います。

     |  Kuro  |  返信
スポンサーリンク