[[📒Productivityを上げるために大切な100のこと]] No43. 🥉
----
テキストを編集するとき、任意の場所に移動する方法はいくつかある。
- `Ctrl + F`などの検索
- [[EasyMotion]]のような単語へのジャンプ
- 行番号ジャンプ
私はこの中でも**行番号ジャンプ**をプッシュしたい。
## 行番号ジャンプが優れているワケ
**行番号ジャンプ**を勧める理由は、==最も[[ステートレス]]で効率のいい操作==だからだ。操作の[[プロダクティビティ]]を上げるには、[[📗できる限りステートレスな操作を採用する]]ことが大事だと私は考えている。具体例を挙げてみよう。
```ts:router.ts
import {createRouter, createWebHashHistory} from 'vue-router';
import Home from '/@/components/Home.vue';
const routes = [
{path: '/', name: 'Home', component: Home},
{path: '/about', name: 'About', component: () => import('/@/components/About.vue')}, // Lazy load route component
];
export default createRouter({
routes,
history: createWebHashHistory(),
});
```
上記には表示されていないが、[[IDE]]で編集する場合は行番号が表示されることが多いだろう。このソースコードの1行目にカーソルがある状態で、最後から3行目の`routes,`に移動したいケースを考える。
### Ctrl + F 検索の場合
`routes`と入力すると最終候補が2つに絞られる。2つ目に移動して`ESC`を押せば完了だ。
![[2021-09-09_1.mp4]]
この操作は状況に応じて、いくつかの判断に迫られる。
- 検索にいくつヒットするか
- いくつ目に移動しなければいけないか
- 今アクティブカーソルはどこにあるか
少なくとも[[思考の速度でパソコンを使う技術]]には程遠いだろう。
### 単語ジャンプの場合
[[Vim]]の[[EasyMotion]]プラグインのように、いくつか入力するとピンポイントに瞬間移動できる移動方法もある。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://github.githubassets.com/favicons/favicon.svg" />
<span class="link-card-v2-site-name">GitHub</span>
</div>
<div class="link-card-v2-title">
GitHub - easymotion/vim-easymotion: Vim motions on speed!
</div>
<div class="link-card-v2-content">
Vim motions on speed! Contribute to easymotion/vim-easymotion development by creating an account on GitHub.
</div>
<img class="link-card-v2-image" src="https://opengraph.githubassets.com/9ca25796da8f0696545ef619e567c49cb7f44770b43cb4649ebb1c6e2381662c/easymotion/vim-easymotion" />
<a href="https://github.com/easymotion/vim-easymotion"></a>
</div>
この方法は`Ctrl + F`検索より俄然効率的だ。私の場合だと`s -> ro -> d`の4キーで移動できる。
![[2021-09-09_2.mp4]]
ただ、この方法でも`ro`から始まる単語が複数ある場合、**そのあとにどのキーでジャンプできるかは==ラベルが表示されるまで==分からない**。判断が必要なのである。
また、この機能はツールによっては使えないケースもある。幸い、私が使っているツールはどれもプラグインでこの機能が提供されている。
- [[Vim]]は[[EasyMotion]]
- [[VSCode]]は[[VSCodeVim]]
- [[IntelliJ IDEA]]は[[IdeaVim-EasyMotion]]
### 行番号ジャンプの場合
改めてになるが**行番号ジャンプはスレートレスな操作**である。敢えて言うなら、アクティブなファイルが変われば結果が変わる..がその前提は無粋というものだろう。
今回のケースでは`routes`が表示されている**10行目に移動**すればいい。**他にどのようなワードが入力されていようと、==必ず10行目の`routes`に==移動する**。
![[2021-09-09_3.mp4]]
私の場合は[[Vim]]のキーバインドを利用しているため、入力したキーは`10G`の3文字だ。行の途中にジャンプする場合ならまだしも、行単位の操作を行う場合はこれが最強だろう。以下は5~6行目と10~11行目を入れ替える操作だ。
## 行番号ジャンプの欠点
行番号ジャンプも2つほど欠点がある。これらにより、状況次第で必ずしも最善ではない..とだけは言っておきたい。
### 数字を素早く入力できないと厳しい
キーボード上段、もしくはテンキーを使って数字を素早く入力できない場合は厳しいだろう。私は[[HHKB]]を使っているが、[[AutoHotkey]]でテンキーをホームポジションに引き寄せる設定をしている。
![[Pasted image 20210909161331.png]]
`無変換 -> R`と連続して押すと青枠の部分がテンキーに変わる。③④の部分は`1`と`0`になるため`10`と入力したことになり、その状態で`G`を押すと`Shift + G`と同じ効果を持つ。2桁だと普通に入力した方が速いかもしれないが、3桁の平均値はこちらの方が上だ。
### 編集中に行番号は変わることがある
『[[ステートレス]]と言っておきながら話が違うじゃないか..』と思うかもしれないが、==複数の操作==**を行うときに限り、間の編集で行番号が変化することがある。**
そのため、行番号ジャンプを行う前は行番号に変化がないか確認しておこう。実際は1~2行ずれても上下キーでリカバリーが効くため、さしたる問題ではないはずだ。
以下はそのような事象に遭遇した具体例である。
![[2021-09-09_4.mp4]]