@sengoku

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

矢印キー使うの辛くないですか? Re: テキストエディタにおけるカーソル移動、どうしてますか?

質問!

テキストエディタを使っている時、カーソル移動はどうやっていますか?

Emacs派、Vim派の場合はわかるんです。

それ以外のかたが、どうされているのか知りたいです。

何故?

なぜそんなことが気になるかといえば、普通のカーソルキーはホームポジションから遠すぎます。
とても日常的に使いたい位置にはないです。

image.png 1

なにか、自分の知らない最良の手段があるのではないかと、思った次第です。

一応

Emacs、Vim の場合をまとめます。

以下のキー操作でカーソル移動できます。

Emacs の場合

方向 キー
Ctrl + b
Ctrl + n
Ctrl + p
Ctrl + f

Vim の場合

方向 キー
h
j
k
l
  1. 画像は https://medium.com/@clmentviguier/how-to-type-like-a-hacker-5-steps-to-high-efficiency-e13501af3959 より

0 likes

10Answer

Comments

  1. @sengoku

    Questioner

    ご回答ありがとうございます。

自分自身はVSCodeを使っていませんが、ブラウザのキーバインドをVimやEmacs相当にする拡張機能があるくらいなので、VSCodeでも同じような拡張機能が探せば見つかります。

(追記)
「ホームポジションから離れているから矢印キーまで遠い」という感覚自体は理解できますが、使うときは集中して使う気もするのでそこまで煩わしいとは思っていません。

拡張機能があるのに使わないのであれば、取れる選択肢として「大人しく不便なキーボード配列に慣れる」「別の配列のキーボードを使う」くらいじゃないでしょうか。

後者についてはいわゆるテンキーレスキーボードが候補で、ノートPCのキーボードも矢印キーがEnterキーの下辺りまで"左側"に詰めこまれてることが多いです。
60%キーボードになるとそもそも矢印キー自体が存在せず、ファンクションキーとの併用でカーソル移動を実現していることが多いです。

ただ、これらのキーボードは限られたサイズに無理やり押し込んでいる感があって一長一短です。ZXCVの列やスペースキー辺りが犠牲になっていたり。

参考までに、会社支給で自分が使っているDellのノートPCは、矢印キーの上下は高さが半分しかないのと、PageUp, PageDownも無いので(Fnキーとの併用)、非常に使い勝手が悪く不満です。

1Like

Comments

  1. @sengoku

    Questioner

    ご回答ありがとうございます。

    そうですね。VimやEmacs風にする拡張機能ありますね。

    自分の質問の主旨は、VimやEmacs風にする拡張機能を使わず、どうやってカーソル移動をしているのかなぁ(まさか、あんな使いづらい位置にある矢印キーとかないよなぁ)?ということでした。

VSCodeですが移動時はマウス持ってます
左手でタイピングします
少数派ですかね?

1Like

Comments

  1. @sengoku

    Questioner

    ご回答ありがとうございます。

    想像したらかっこよく思えます。動画で見てみたいです。

矢印キーに手を動かすのが辛いのであれば、しばらくキーボードの前を離れて筋トレした方がいいと思います。

1Like

Comments

  1. @sengoku

    Questioner

    ご回答ありがとうございます。

  2. 真面目な話、筋トレが有効かは知りませんが机が短いとか、キーボードの位置とかの理由で負担がある可能性は十分考えられます。
    自分は自宅ではコンパクトなキーボードを使っているし、職場では机が広いので疲れませんが。。。

    状況によっては「遠すぎる」だったり「とても使いたい位置にない 」だったりはするのでしょう。

    まあPCに慣れていないとかもケースとしては有り得るかと考えられるので、こう考えられるとか言い始めたら無限ですが。

    で、入力のリズムが崩れるみたいな話があるのですが、そもそもVimなら入力モードとカーソル移動モードを使い分ける時点でリズムもへったくれもない気がしますw
    (emacsは知らない)

    冗長になるので初めの回答には書かなかったけどWindowsを普段使う自分からしたらディレクトリの選択とか、なんでも矢印キーを使う上にF2で編集とかの操作もそこまで煩雑には感じないからエディタで矢印キーよりいい方法がある云々より、エディタ以外で矢印キー以外の操作してる人もいるのか?はTipsとして知りたい。
    ターミナルで全部の業務完結させる人もいるが。

    ターミナルでも↑↓で履歴呼び出して使ってるから、これもなんかモード入って選択みたいなのができるのかな?
    別に↑↓でも困らないが。。。

    まあ、本回答に戻ると個人の特性(筋肉云々)の前にキーボードの違いもあるので、使いづらい位置にあるのにみんなどうやって使ってるんだ?って疑問は単にソフトウェアの問題だけじゃなくてハードウェアの問題がある可能性も高い。

    なんかこういうホームポジション関連の質問たまに見るけれど、カーソルの移動と文字の入力って自分的にはコンテキストが別物に感じるのでそこに一貫性を持たせたい派の気持ちはよく分からんのだ。

    それと、開発の規模にもよる側面もあるのかもしれないけど、スクリプトレベルのコード書くならかなりミクロになるので、全体像とコードのスケールがほぼ一致するのだが、規模が大きくなると基本コピペが多くなるというのもある。

    LispやAWKみたいな、コード汚染のレベルが低い言語ならキーボードオンリーでも良いのだろうが。。。
    というただの個人的な感覚

私も矢印キーでの移動が不便だと感じていたので、CapsLockFnに変更して、Fnとの組み合わせでVim風にIJKLで移動できるようにしています。
RealForceを使っていますが、Fnキーまわりのキーバインド変更はAutoHotKeyのような汎用ツールではなく、メーカー純正の専用ソフトで設定する必要があるのでそこがちょっと不便ではあります。

1Like

Comments

  1. @sengoku

    Questioner

    ご回答ありがとうございます。

    CapsLock を Fn に。なるほど。
    いつも Ctrl にしてしまうので、思いつきませんでした。

vi (vim, neovim) 使ってます。
1行上下(j, k)は使うけど、1文字左右(k, l)はあまり使わないです。
ページ送り:CTRL+F, CTRL+B, gg, G
上下移動: j, k, %, RETURN, H, M, L
左右移動: w, b, %, 0, ^, $

1Like

Comments

  1. @sengoku

    Questioner

    ご回答ありがとうございます。

私はalt+hjklをカーソル移動に割り当てています。(自分以外が使ってるのを見たことがないですが)
Ctrl同時押しは重要な機能がバインドされている場合が多く、特にctrl+h(BackSpace)をカーソル移動で上書きしてしまうのはテキスト編集で大きな損失なのでctrlではなくaltを使っています。
またaltは親指で押すキーであるため、ctrlやshiftと違って多用しても指が痛くなりません。

操作 キー
alt + h
alt + j
alt + k
alt + l
行頭に移動 ctrl + alt + h
下に5行移動 ctrl + alt + j
上に5行移動 ctrl + alt + k
行末に移動 ctrl + alt + l
右にワード単位で移動 alt + w
左にワード単位で移動 alt + b
1Like

Comments

  1. @sengoku

    Questioner

    ご回答ありがとうございます。

    親指使うのいいですね。

なぜそんなことが気になるかといえば、普通のカーソルキーはホームポジションから遠すぎます。

なぜカーソルキーがホームポジションから離れていることがイヤなのかを掘り進めると、ほとんどの人はコーディングの際にリズムが崩れることを嫌うからだと思いますが、現在、コーディングエージェントを使うようになっているので、カーソールキーへの移動ストレスなんて些事になりましたw
ので、特にケアせず初期設定のまま使用しています。

1Like

Comments

  1. @sengoku

    Questioner

    ご回答ありがとうございます。

    もう少ししたら、プログラム書くのにエディタ使わなくなりそうですね。

変則的な例ですがキーマップをいじりまくって、
FPSとかでありがちなWASDに矢印を当てるっていうのもあります。

image.png

1Like

Comments

  1. @sengoku

    Questioner

    ご回答ありがとうございます。

    本題とは外れますが、左右分割いいですね〜。

  2. 左下の空いてるとこにトラックボールがついてるモデルなので、
    ずっと手をキーボボにおいてられるし、肩もこらないしで助かってます。

  3. @sengoku

    Questioner

    コメントにはいいねボタンないので代わりにコメントで

    👍いいね

私もvimやemacsは使っていませんが、カーソル移動が不便なので、変換キーを修飾キー化し、vim風にカーソル移動できるようキーボード入力をアプリでいじってます。

例えば、変換キー + lで右に移動、といった具合です。任意のキーを修飾キーにできますが、変換キーは私の環境であれば右手親指でタイプでき、ホームポジションが崩れないため採用しました。

また、変換キー + 他の修飾キー(ctrl, shiftなど) + lの組み合わせも認識させることで、単語単位での移動や選択もできます。かなり便利です。

最後に現在使用しているAutoHotkeyのコードを貼っておきます。

autohotkeyのコード
  • windows環境
  • 事前にスタートアップにファイルを登録して、PC起動中は常駐させている
  • 管理者権限で開いたpowershellなどでは動作しない
  • 変換キーが修飾キーになるので本来の用途は使えなくなる
sc079 & j::
sc079 & l::
sc079 & i::
sc079 & k::
    ctrl := GetKeyState("Ctrl", "P")
    shift := GetKeyState("Shift", "P")
    if (ctrl && shift) {
        ; Ctrl+Shift+矢印
        if (A_ThisHotkey = "sc079 & j")
            Send, ^+{Left}
        else if (A_ThisHotkey = "sc079 & l")
            Send, ^+{Right}
        else if (A_ThisHotkey = "sc079 & i")
            Send, ^+{Up}
        else if (A_ThisHotkey = "sc079 & k")
            Send, ^+{Down}
    } else if (ctrl) {
        ; Ctrl+矢印
        if (A_ThisHotkey = "sc079 & j")
            Send, ^{Left}
        else if (A_ThisHotkey = "sc079 & l")
            Send, ^{Right}
        else if (A_ThisHotkey = "sc079 & i")
            Send, ^{Up}
        else if (A_ThisHotkey = "sc079 & k")
            Send, ^{Down}
    } else if (shift) {
        ; Shift+矢印
        if (A_ThisHotkey = "sc079 & j")
            Send, +{Left}
        else if (A_ThisHotkey = "sc079 & l")
            Send, +{Right}
        else if (A_ThisHotkey = "sc079 & i")
            Send, +{Up}
        else if (A_ThisHotkey = "sc079 & k")
            Send, +{Down}
    } else {
        ; 通常の矢印
        if (A_ThisHotkey = "sc079 & j")
            Send, {Left}
        else if (A_ThisHotkey = "sc079 & l")
            Send, {Right}
        else if (A_ThisHotkey = "sc079 & i")
            Send, {Up}
        else if (A_ThisHotkey = "sc079 & k")
            Send, {Down}
    }
return
1Like

Comments

  1. @sengoku

    Questioner

    ご回答ありがとうございます。

    変換キーを活用するのは目鱗です。
    確かに便利な位置にいるのに、全然使ってない。

Your answer might help someone💌