はじめに
近頃は生成AI技術の進化で、人がコードを手打ちする時間というのは減ってきています。
そんな中でも、「そのくらいの作業なら自分でやった方が早くない?」という作業も多々あります。
この記事では、自分でやった方が早い範囲を広げるべく、VSCodeでの作業を最も効率よくできる「マルチカーソル」というテクニックとマルチカーソルをさらに効率よく扱えるようになるための必須知識を紹介します。
マルチカーソルに限らず、通常時にも使えるテクニックを紹介しているのでぜひ読んでいってください。
前提知識
ここでは、マルチカーソルを効率的に扱うためのVSCode機能の前提知識をザックリ紹介します。
※マルチカーソルについてだけ知りたい場合は、マルチカーソル まで読み飛ばしてください。
ショートカットキー割り当て
VSCodeにおいて、ショートカットキーの割り当ては変更することができます。
Ctrl + Shift + P
でコマンドパレットを開き「Preferences: Open Keyboard Shortcuts」を検索し選択します。
このような画面が開き、割り当てられている全てのショートカットキーを見ることができます。
適当な行をクリックするとこのようなモーダルが開き、割り当てたいキーを入力したうえでEnterを押すと割り当てを変更することができます。
ショートカットキー割り当てには、コマンドパレットで選択できる全てのコマンドを自由に割り当てることができます。
多くのコマンドはデフォルトでは何のショートカットキーも割り当てられていないため、よく使うコマンドは割り当てておくと良いでしょう。
また、同じキーに割り当てられたアクションには内部的に優先順位があるようで、拡張機能のショートカットキーにより使えないコマンドが出てくることもあります。
特に、後述する Ctrl+Enter
による改行はかなり便利なのですが、GitHub Copilot 拡張によって別の機能に上書かれます。
そのような場合は使わない方のアクションからショートカットキー割り当てを剥がすと、目的の機能が使えるようになります。
※この記事内で記載するショートカットキーはすべて、デフォルトのWindowsでのショートカットキーです。(Macの皆さんごめんなさい)
検索
Ctrl+F
で出てくる検索窓です。全く使っていないという人は、おそらくいないのではないでしょうか。
この検索窓には、単純な検索以外にもかなり便利な機能があります。
左から、
-
>
: Toggle Replace -
検索
: 検索文字列入力欄 -
Aa
: Match Case (Alt + C
) -
ab
: Match Whole Word (Alt + W
) -
.*
: Use Regular Expression (Alt + R
) -
↑
: Previous Match (Shift + Enter
) -
↓
: Next Match (Enter
) -
≡
: Find in Selection (Alt + L
) -
×
: Close (Escape
)
Ctrl+F
で開き、 Escape
で閉じるくらいのキーは覚えておいた方が便利でしょう。
ちなみに、検索窓内で改行はできないのですが、改行をコピーしてから検索窓に貼り付けることで改行を含めて検索できます。
下記では、普通の検索窓にはない機能を少し詳しく解説します。
2. 検索
: 検索文字列入力欄
検索自体は多くのエディタにありますが、VSCodeは検索履歴が保持されています。
↑
を押すことで前に検索した文字列が呼び出せます。逆に ↓
は次に検索した文字列です。
3. Aa
: Match Case (Alt + C
)
これを有効化すると、英字の大文字小文字を区別して検索を行います。
この機能がある検索窓は、他にも結構あるのではないでしょうか。
この中で一番使用頻度の高い機能です。
4. ab
: Match Whole Word (Alt + W
)
これを有効化すると、単語単位での検索を行います。
コーディングする上で使ったことはありません。多分覚えなくて良いです。
5. .*
: Use Regular Expression (Alt + R
)
これを有効化すると、正規表現での検索を行います。
正規表現をすべて覚える必要はありません。
マルチカーソルを扱う上では、↓のような表現は覚えておいた方が良いでしょう。
>[^<]*<\/span
↑ >
で始まり、 <
以外([^<]
)の0文字以上(*
)の文字列が続き、 </span
で終わる部分を検索しています。
↑ 少しレベルを上げ、属性の有無を問わずliタグを丸ごと抜き出すといったこともできます。
8. ≡
: Find in Selection (Alt + L
)
これを使うと、選択範囲のみで検索ができます。
少し挙動に癖がありますが、次の手順で行うと使えるかと思います。
- ヒットを絞りたい範囲を選択する
-
Ctrl + F
で検索窓を出し、Alt + L
で範囲検索を有効化する
- うまくいくと、この時点で範囲の行が右いっぱいまで薄くハイライトされる
- 検索したい文字列で検索する
これもマルチカーソルを扱う上ではかなり便利な機能ですが、この機能に頼らずとも、一時的に対象範囲だけを別ファイルに逃がすことでやりたいことを実現できます。必ずしも覚えておく必要はありません。
一時ファイルに逃がす場合は、範囲選択 → Ctrl + X
(カット)→ Ctrl + N
(新しい無名ファイル)→ Ctrl + V
(貼り付け)→ Ctrl + F
(検索)、という流れになります。
置換
Ctrl + H
で検索窓が置換窓に切り替わります。
マルチカーソルを扱う上で覚える必要のある機能ではないですが、マルチカーソルでなく置換で事足りる作業も多くあるためついでに解説します。
左から、
-
置換
: 置換後文字列入力欄 -
AB
: Preserve Case (Alt + P
)(置換後に大文字小文字を維持する、使ったことは無い -
b→c
: Replace (Enter
) -
ab→ac
: Replace All (Ctrl + Alt + Enter
)
全置換のショートカットキーくらいは覚えておくと便利でしょう。
前述した正規表現検索ですが、()
でグループ化した部分は $1
のように置換先で取り出せます。
例えば↓のような「説明」と「項目」を入れ替えたい場合、
検索: <span([^>]*)>([^<]*)</span> - <span>([^<]*)</span>
置換: <span$1>$3</span> - <span>$2</span>
このようにすることで置換ができます。
1ファイルだけの場合、正規表現を考えている暇があればマルチカーソルを動かした方が速いです。しかし複数ファイルにこれを適用したい場合、この置換を用意しておいて対象ファイルを巡る方が早かったりします。
ちなみに、Ctrl + Shift + F
, Ctrl + Shift + H
で開く、フォルダ内検索・置換も対象が広がるだけで、ほとんど同じ機能です。(そこからマルチカーソルを入れることはできないため省略します。)
カーソルの動かし方
左右移動
←
/ →
言わずもがな左右に1文字移動します。
単語単位左右移動
Ctrl + ←
/ Ctrl + →
単語単位移動という名前ではありますが、連続した記号やスペースはひとまとまりとして移動する、 _
は英字として扱われる、カーソル位置が空白の状態で英語方向に移動するとひとまとまりとして移動する等、かなり癖はあります。
この挙動は解説するよりも、使い続けて慣れる方が良いかと思います。
しかし、この移動はマルチカーソルを扱う上で最も重要な機能であり、この機能を知らないとマルチカーソルは使えないレベルです。いち早く慣れることをお勧めします。
上下移動
↑
/ ↓
ただの上下移動。しかし奥が深い。
横位置が内部的に保存されており、10文字目から5文字しかない下の行に移動すると行末にカーソルが移動しますが、その後20文字ある下の行へ移動すると10文字目にカーソルが当たります。
この横位置は横移動を挟むことでリセットされます。
マルチカーソルを扱う上では、この挙動がかなり重要になります。
表示幅上下移動
PgUp
/ PgDn
画面表示範囲の行数分、一気に上下移動する。
広い範囲を一気に移動したいときに使う。
文字通り「画面表示範囲の行数分」なので、 Ctrl + -
で画面を縮小すると、より多くの行数を移動できる。
ちなみに、Ctrl + ↑
, Ctrl + ↓
, Ctrl + PgUp
, Ctrl + PgDn
はカーソルを移動せず、画面だけ上下移動する。
括弧移動
Ctrl + Shift + \
これは「Go to Bracket」という機能で、ペアとなる括弧を行き来できます。
これとは別に「Select to Bracket」という機能があり、これにはショートカットキーが割り当てられていません。
マルチカーソルを扱う上で、括弧内選択はかなり便利なので、ショートカットキーを割り当てておくことをお勧めします。
おすすめは、「Go to Bracket」を Ctrl + \
に割り当て、「Select to Bracket」を Ctrl + Shift + \
に割り当てです。
行頭/行末 へ移動
Home
/ End
行頭・行末へジャンプできます。
すぐに使えると便利な場面は多々ありますが、他のアプローチはあるのでこれにこだわる必要はありません。
範囲選択
上記のカーソルの動かし方を Shift
を押しながら行うことで、移動元から移動先への範囲選択ができます。(デフォルト設定の括弧移動以外)
下記では追加で、特別な挙動の範囲選択アクションを紹介します。
行選択
Ctrl + L
: Expand Line Selection
カーソル行を丸ごと範囲選択します。
ブロック単位選択
Alt + Shift + →
/ Alt + Shift + ←
: Expand Selection / Shrink Selection
これもかなり癖のある機能ですが、使いこなせるとできることがかなり増えます。
詳しくは↓
括弧内→括弧ごと→括弧内→括弧ごと→行ごと→括弧内→括弧ごと
といった感じで選択範囲が広がっていきます。
←のショートカットは逆方向に選択範囲を縮めていきます。
例えば、スペースや記号を含む文字列リテラルのリテラル内を一気に選択したい場合などに使用します。
括弧選択
ショートカットキー割り当てなし。
前述した括弧移動(Go to Bracketの機能のペア機能(Select to Bracket)です。ショートカットキーの割り当てをお勧めします。
おまけ 単語単位選択
単語をダブルクリックすると、単語単位で選択できます。
削除
Backspace
: 左を1文字削除
Delete
: 右を1文字削除
前の文字を消す Backspace
キーは皆使っているでしょう。
次の文字を消したい場合、→
, Backspace
と押さずに、Delete
を押すことで削除できます。細かいようで何度も行うので塵積です。
切り取り
Ctrl + X
ごく一般的な切り取りのショートカットキーです。
選択範囲がない場合、カーソル行を丸ごと切り取ります。数行であれば、削除したい行数分これを連打することで削除ができます。
単語単位削除
Ctrl + Backspace
/ Ctrl + Delete
単語単位削除の矢印キーを Backspace
, Delete
に置き換えることで、同じ単語単位での削除ができます。これもよく使います。
deleteInsideWord
ショートカットキー割り当てなし。
カーソルがある位置の単語を削除します。上記 Ctrl + Backspace/Delete
では、単語内にカーソルがあると、その単語のカーソル位置より 左/右 のみを削除しますが、このアクションでは単語のすべてを削除できます。ただし、Ctrl + ←/→
をしてから Ctrl + Backspace/Delete
で事足りる話ではあります。
deleteAllLeft
/ deleteAllRight
ショートカットキー割り当てなし。
カーソル行のカーソル位置より 左/右 をすべて削除します。
おすすめは Alt + Shift + Backspace
/ Alt + Shift + Delete
に割り当てです。
選択行削除
Ctrl + Shift + K
選択範囲がない場合、上記の行ごと切り取るときと同じ挙動になりますが、クリップボードが荒れないという利点があります。明確に後で貼り付けたいという目的がない場合はこちらを使った方が良いです。
また、選択範囲がある場合は、1文字でも選択されている行がすべて削除されます。こちらは切り取りにはない挙動で、行を丸ごと全部丁寧に選択する必要がないため使いやすいです。
前述したショートカットキー割り当てでEclipseと同じ Ctrl + D
に割り当てておくと、慣れている人にとっては使いやすいかと思います。
(おまけ)単語部分
上記に頻出した「単語」という概念ですが、さらに細かい WordPart
という概念があります。
キャメルケース等の変数名は1単語として扱われますが、 SampleWordPart
の Sample
, Word
, Part
の部分が WordPart
にあたります。
検索してみると、これらのアクションにはすべてショートカットが割り当てられていませんが、これにも「左右移動」「選択」「削除」と一通りの機能が揃っていることがわかります。
稀によく使いたくなる機能なので、使いたい場合はショートカットキーを割り当てておくと良いでしょう。または、使いたくなった時のためにコマンドパレットから呼び出せるよう、それぞれのアクションが何をするのかは覚えておくと良いでしょう。
インデント操作
Tab
/ Shift + Tab
インデントを増やしたり減らしたりできます。
Ctrl + ]
/ Ctrl + [
こちらも同じインデントを増減するショートカットキーですが、Tab
とは違い行の頭に無くても使うことができます。
近頃は、Copilotの拡張機能で Tab
を押すと勝手に入力されたりカーソルがあっちこっち飛んだりしてしまうので、
Tab
より知名度はありませんが、実はこっちの方が使いやすかったりします。
上下操作
改行
Enter
ただの改行です。特に解説はありません。
上下に行を追加する
Ctrl + Shift + Enter
: Insert Line Above(↑)
Ctrl + Enter
: Insert Line Below(↓)
カーソルが行中の何文字目にあっても、その行の上または下に行を追加します。
上に行を追加(Ctrl + Shift + Enter
)は極稀に使う、Ctrl + Enter
はよく使うので覚えておいた方が良いです。一番後ろにカーソルを移動してから Enter
と、ひと手間挟む必要がなくなります。
ショートカットキー割り当てのセクションに前述しましたが、GitHub Copilotの拡張機能が、Ctrl + Enter
のキーを別機能に上書いて使えなくなってしまいます。
Copilot側はほとんど使わないであろう機能なため、割り当てを剥がしておくと良いでしょう。
選択行を上下へ移動
Alt + ↑
/ Alt + ↓
複数行を選択していれば、その行数分丸ごと移動できます。
また、行の全文字を丁寧に選択している必要はなく、移動したい行の1文字でも選択範囲に含まれていればその行は移動できます。1行だけの移動の場合は選択している必要はなく、カーソルがある行を移動します。
ただし、Ctrl + Z
で戻せる移動単位が1行ずつのため、長い距離を移動すると戻すのが面倒だったりする欠点があります。
選択行を上下へコピー
Alt + Shift + ↑
/ Alt + Shift + ↓
カーソルのある行、または選択範囲を上下へ複製します。
結果としてはどちらを使っても内容に変わりはありませんが、カーソル位置が押したキーの方になります。
コマンドアクション
Ctrl + Shift + P
でコマンドパレットが開き、コマンドアクションを選択できます。
ここではショートカットキーが割り当てられていない多くのアクションが利用できます。(もちろんキー割り当てのあるアクションも呼び出せます。)
下記では、マルチカーソルでよく使う一部のコマンドを紹介します。
大文字小文字変換系
-
Transform to Uppercase
: 選択範囲を全て大文字に変換する -
Transform to Lowercase
: 選択範囲を全て小文字に変換する -
Transform to Title Case
: 選択範囲内の単語の先頭文字を大文字に変換する
変数命名ケース変換系
-
Transform to Camel Case
: 変数をキャメルケースに変換する -
Transform to Pascal Case
: 変数をパスカルケースに変換する -
Transform to Snake Case
: 変数をスネークケースに変換する -
Transform to Kebab Case
: 変数をケバブケースに変換する
定数などに使う全大文字_区切りの Screaming Snake Case は用意されていませんが、
Transform to Snake Case
をしてから Transform to Uppercase
をすることで実現ができます。
このコマンドパレット、意外と適当に入力してもヒットします。
コマンドプロンプトに誤字なく入力するよりは、こっちで行った方が早い操作などもあったりします。
マルチカーソル
さて、いよいよマルチカーソルについてです。
今更ながら「マルチカーソル」とは、普段動かしている入力位置を示すカーソルを複数個所に配置し、そのすべての箇所に同時に操作を行うことができる機能です。
VSCodeに限らず、マルチカーソルという機能は他のエディタにもありますが、全てを覚える必要はありません。
VSCodeでのやり方だけ覚えて、マルチカーソルを使いたい場合はVSCodeで開くなどもできるので、汎用的なテキストエディタであるVSCodeだけでも覚えておくと非常に便利になります。
カーソルの増やし方
マウスカーソル位置に増やす
Alt + Click
Alt
キーを押しながらカーソルを増やしたい箇所をクリックすると、次々と自在にカーソルを増やしていけます。
ちなみに、コマンド「Toggle Multi-Cursor Modifier」で Ctrl + Click
に切り替えることもできます。これは、設定「Editor: Multi Cursor Modifier」で変更することもできます。
注意したいのが、もともとのカーソルは消えないということです。「これからクリックで複数個所にカーソルを入れるぞ」と意気込んだら、まず最初のカーソルだけは普通にクリックしましょう。そして二つ目以降を Alt + Click
で増やしましょう。
マウスホイール押し込み
マウスホイールを1回押し込むことでもマウスカーソル位置にカーソルを増やせます。
また、マウスホイールを押し込んだ状態で上下に動かすと、動かした範囲の行にカーソルをばら撒くことができます。
現在のカーソル位置からカーソルを増やす
Ctrl + Alt + ↑
/ Ctrl + Alt + ↓
: Add Cursor Above / Add Cursor Below
カーソル行の上下にカーソルを増やします。
カーソルが増える横位置は、カーソルをシンプルに上下移動したときの移動先と同じです。
Alt + Shift + I
: Add Cursors to Line Ends
選択範囲内のすべての行の末尾にカーソルを増やします。
行の文字全てを選択している必要はなく、1文字でも選択している行にはカーソルが追加されます。
逆に言うと、1文字だけでも(改行コードだけでも)範囲に含まれていればカーソルが追加されてしまいます。事故には気を付けましょう。
検索結果からカーソルを増やす
Alt + Enter
検索窓が出ている、かつ1件以上、後述する上限以下のヒットがあるときに、 Alt + Enter
を入力することで、検索にヒットしている個所全てにマルチカーソルを増やします。
これが一番、使い勝手が良い。「検索にヒットしている位置に」なので、前述した検索窓の豊富な機能を使いこなすほど、マルチカーソルの自由度が増します。
これだけなぜかショートカットキー一覧に載っておらず、割り当ての変更ができない模様。
Ctrl + D
: Add Selection to Next Find Match
今選択している文字列と一致する次の文字列の位置にカーソルを追加します。
たまにこれを連打している人を見かけますが、数個でないなら他の増やし方を使った方が良いです。
Ctrl + Shift + L
: Select All Occurrences of Find Match / addCursorsAtSearchResults
今選択している文字列と一致するすべての文字列の位置にカーソルを増やします。
これは Ctrl + F
→ Alt + Enter
のショートカット的な挙動ですが、
あくまで選択した範囲に完全一致するものにしか挿入できないため、正規表現での検索結果などには使えません。
前回編集位置から増やす
Ctrl + Z
/ Ctrl + Y
ご存じの通り、Undo / Redo のショートカットキーですが、直前の編集がマルチカーソルによる編集だった場合、編集を戻すと同時にマルチカーソルも元の位置に戻ってきます。
マルチカーソルでの編集途中、間違えてマウスパッドを触ってしまいカーソルが消えてしまった時などに使います。
編集内容をもとに戻したくない場合は、Ctrl + Z
→ Ctrl + Y
と行うことでカーソルが元の位置に戻ります。
カーソルの減らし方
Alt + Click
/ マウスホイール押し込み
マウスを使う増やし方は、マルチカーソルがある位置に行うとそのカーソルを消すことができます。
Ctrl + U
: Cursor Undo
直前に増やしたカーソルを一つ減らします。
Alt + Ctrl + ↓
などを連打または長押ししていると、たまに「あ、増やしすぎた」となります。
そんな時に初めからやり直さずに、落ち着いて増やしすぎた個数分 Ctrl + U
を押しましょう。
Escape
: removeSecondaryCursors
全てのマルチカーソルを消し、1つのみにします。
マルチカーソルでの操作が終わったら、Escape
でマルチカーソルをお掃除しましょう。
Click
エディタ内の適当な位置をクリックすることでも、マルチカーソルを消し、新たな位置にカーソルを置くことができます。
Ctrl + A
や Ctrl + F
全選択や検索のショートカットキーですが、新たな位置にカーソルを当てる挙動になるアクションを実行することとでも、すべてのマルチカーソルを消すことができます。このようなアクションは他にも複数あるかもしれません。
カーソルの個数
カーソルの個数上限
カーソルの個数には上限があります。デフォルトでは10000です。
設定「Editor: Multi Cursor Limit」で変更することができます。
上限値は100000個ですが、数千個から結構動作が重くなってきます。あまりにカーソルが多くなりすぎる場合は置換やスクリプトでの編集を検討しましょう。
間違えて100000個のカーソルを入れてしまった場合、入れただけでVSCodeがクラッシュする可能性すらあります。安全のため、どうしてもやりたいとき以外は少なめに設定しておいた方が無難でしょう。
カーソルの融合
複数のマルチカーソルの位置が同じになる、または選択範囲が重なった場合、それらのカーソルは1つになります。
設定「Editor: Multi Cursor Merge Overlapping」で変更でき、デフォルトではマージされます。
好みにもよりますが、個人的にはこの挙動にイラつかされたことが度々あるうえ、この挙動を有効活用できた試しもないためオフにしておきたいのですが、Alt + Ctrl + ↑/↓
でカーソルを増やすことができなくなってしまうのでオンにしておくのが無難です。(できなくはないが、同じ位置に余分に増えてしまう)
マルチカーソルでのペーストの挙動
設定「Editor: Multi Cursor Paste」で変更ができます。
spread
/ full
の2つを選ぶことができ、デフォルトでは spread
です。
spread
の場合、マルチカーソルの個数と、貼り付けしようとした内容の行数が一致している場合、各マルチカーソルに上から1行ずつ分割して貼り付けられます。
この挙動を理解しておくと非常に便利なため、設定はデフォルトにしておくと良いでしょう。
たまに、意図せずこの挙動になってしまう場合がありますが、その場合はコピー元を1行(改行コードだけでも)増やすことで対応できます。
ちなみに、マルチカーソルでのコピーを行った場合、クリップボードには各カーソルの内容が改行区切りでコピーされます。
ちょっと応用編
ここでは次のようなcsvを例にちょっとした応用方法を紹介します。
(csvの内容はAIに吐かせた適当なものです)
ulid,comment,foreign_key,random_id,long_comment
01K58MKR6QVMMA0REAAKYKBE6P,"The cat jumped on the table and spilled water.",01K58N4GSRZ9TQ8ESCNRD1TN18,824c-63-4eac-4d94-aaec-193b80-6d802e,"The cat jumped onto the table and knocked over a glass of water."
01K58MKR6R7A6NHYA6GB9CEG6W,"She enjoys reading history books at home.",01K58N4GSS9NS7DD5YX8VDM64W,f5-e-4e-2d99-434-4-93d1-ceb27f547c10,"She enjoys reading books about ancient history in her free time."
01K58MKR6RAK8TWNV3EJ9WD9B2,"The weather was nice, so we took a walk.",01K58N4GSSX4T0DRGY4TPRHWVN,4c1-a-5fd5-43a8--a5b7-3a-547-967ddbd,"The weather was so nice that we decided to go for a long walk."
01K58MKR6RHN84E8GMCDQ56MF6,"He forgot his umbrella and got wet.",01K58N4GSS0BNCCXY1ZTRPS8NE,a35a9c0-303e-4-4cc-821a-9078540f8a3d,"He forgot to bring his umbrella, so he got completely soaked."
01K58MKR6R91F2Z0QS498P14S0,"They are planning a summer trip abroad.",01K58N4GSSGQPF5KYDC6F3HSBV,1b0-f0-2d-5e-4045-a586-9262ad-362213,"They are planning a trip to Europe next summer."
01K58MKR6RR8TNEW681N79KGM4,"My brother cooks better than most professional chefs.",01K58N4GSSF46RAEGS4HN5G5QP,c0d63d-a-34d-4-5fa-9e05-9f63a0a92b61,"My brother cooks better than most professional chefs."
01K58MKR6RYSS4AM6HTDBTKVJK,"We stayed up all night watching movies and eating popcorn.",01K58N4GSSM1SX5EQ4YNRZQH83,14a04-6e78-48d1-a-b87-095cb1-d9a-689,"We stayed up all night watching movies and eating popcorn."
01K58MKR6RBNJN7XMYPGM0M0NQ,"The children laughed loudly in the park.",01K58N4GST0ZQGFDZBW6RJGZBT,-cbcc-18-6f51-4fb6-a7ad-43d9004009ff,"The children were laughing loudly in the park."
01K58MKR6RJMMF7R51HT0TQ4Q5,"I usually drink coffee, but had tea today.",01K58N4GSTRH1H6FQR39N8J6D3,dbfa2-c930-4165--8ac0-c5-0-36527819d,"I usually drink coffee in the morning, but today I had tea instead."
01K58MKR6R1Z20YN20D4RSYP2D,"The train reached the station late.",01K58N4GST60BMRH5GEXMPC4E0,20b545--b998-4f70-b873-6db-7c0d61060,"The train arrived at the station ten minutes late."
各列の定義は下記のとおりです。
-
ulid
: ULID 英数26文字 -
comment
: 自由形式文字列 -
foreign_key
: ULID 英数26文字 -
random_id
: 英数ハイフン36文字 -
long_comment
: 自由形式文字列
問題
次の3つを効率よく実現する手順を考えてみてください。
-
foreign_key
列をすべてコピーしてください -
long_comment
列をすべてコピーしてください -
comment
列をすべてコピーしてください(ただし、Home/End
キーの使用は禁止)
※csvであれば、Excelなどに取り込んで列をコピーするのが簡単ですが、今回は他への応用を学ぶためにVSCodeのテキストエディタのみでの完結とします。
解答
foreign_key
列をすべてコピーしてください
foreign_key
列は連続した英数なので、Ctrl + ←/→
などで選択はできそうですが、横位置が揃っていないので Alt + Ctrl + ↑/↓
では始点に揃えてカーソルを入れることができません。
そんな時は「カーソルを入れるときに位置を揃える」のではなく「カーソルを入れてから位置を揃える」と考えましょう。
1文字でも横位置が被っていれば、Alt + Ctrl + ↑/↓
で入れてから、Ctrl + ←/→
で全行の foreign_key
列の始点にカーソルが揃います。そこからは Ctrl + Shift + ←/→
で選択するだけです。
long_comment
列をすべてコピーしてください
long_comment
は単語数がバラバラなので、Ctrl + Shift + ←/→
では気持ちよく選択できなさそうです。
しかし、最後の列ではあるため列の始点にさえカーソルが揃えば Shift + End
で一気に選択ができます。
さっき foreign_key
にカーソルは入れられたので random_id
だけ跨げば long_comment
列の始点に合わせられそうです。しかし、ハイフンの個数が同じでないため、Ctrl + →
では動きが揃いません。
では列の定義を見返してみましょう。random_id
列は単語数こそ統一されていませんが、36文字で固定になっているようです。Ctrl + →
での移動だけ考えるのではなく、単純な →
で文字数分移動することも選択肢の一つとなります。
comment
列をすべてコピーしてください(ただし、Home/End
キーの使用は禁止)
long_comment
のように単語数がバラバラかつ行の最初や最後に無いため一気に選択することは難しそうです。
先頭はULIDなので、comment
列の最後にカーソルを揃えてしまえば Shift + Home
から Ctrl + Shift + →
で選択できそうですが、ここでは Home
キーが頭に浮かんでこなかった場合の回避策を紹介します。
そんな時は「一時的に改行を入れる」ことも選択肢に入れておきましょう。
foreign_key
はさっき選択できたので、foreign_key
列の前にいったん改行を入れておきましょう。
次に ulid
列から Ctrl + →
で comment
列の先頭にカーソルを持って来ます。
次は Shift + End
を使いたいところですが、End
キーが禁止されています。
その場合は「前の行から回り込む」ことが End
キーの使用を回避し、comment
列を丸ごと選択範囲にできます。
別解
(?<=\n[A-Z0-9]+,)"[^"]+"
このような正規表現の検索でも抜き出すことができます。
チートシート
最後に、ここまでのショートカットキーやコマンドアクションをまとめます。
カテゴリ | ショートカットキー | 説明 |
---|---|---|
検索 | Ctrl + F |
検索窓を開く |
Alt + C |
大文字小文字を区別して検索 | |
Alt + W |
単語単位で検索 | |
Alt + R |
正規表現で検索 | |
Alt + L |
選択範囲内のみ検索 | |
Shift + Enter |
前の検索結果へ移動 | |
Enter |
次の検索結果へ移動 | |
置換 | Ctrl + H |
置換窓を開く |
Ctrl + Alt + Enter |
全置換 | |
カーソル移動 | Ctrl + ← / → |
単語単位で左右移動 |
↑ / ↓ |
上下移動(横位置保持あり) | |
PgUp / PgDn |
画面単位で上下移動 | |
Ctrl + Shift + \ |
対応する括弧へ移動 | |
Home / End |
行頭 / 行末へ移動 | |
範囲選択 | Shift + 移動キー |
範囲選択 |
Ctrl + L |
行選択 | |
Alt + Shift + → / ← |
ブロック単位選択の拡大/縮小 | |
Select to Bracket (割当推奨) |
括弧内を選択 | |
削除 | Backspace |
左を1文字削除 |
Delete |
右を1文字削除 | |
Ctrl + X |
切り取り(選択なしで行全体をカット) | |
Ctrl + Backspace / Ctrl + Delete
|
単語単位で削除(左 / 右) | |
deleteInsideWord (割当推奨) |
カーソル位置の単語全体を削除(※デフォルト割当なし) | |
deleteAllLeft / deleteAllRight (割当推奨) |
行のカーソル位置より左/右を全削除(例:Alt + Shift + Backspace / Alt + Shift + Delete を推奨) |
|
Ctrl + Shift + K |
選択行削除(選択なしでも現在行を削除/クリップボードを汚さない) | |
(任意)Ctrl + D に Delete Line を割当 |
Eclipse風の行削除にしたい場合の割当例 | |
改行・インデント | Enter |
改行 |
Tab / Shift + Tab |
インデント増減 | |
Ctrl + ] / [ |
インデント増減(カーソル位置に依存せず) | |
行操作 | Ctrl + Enter |
下に行を追加 |
Ctrl + Shift + Enter |
上に行を追加 | |
Alt + ↑ / ↓ |
行を上下に移動 | |
Alt + Shift + ↑ / ↓ |
行を上下にコピー | |
マルチカーソル追加 | Alt + Click |
マウスクリックで追加 |
Ctrl + Alt + ↑ / ↓ |
上下にカーソルを追加 | |
Alt + Shift + I |
選択範囲の行末にカーソルを追加 | |
Alt + Enter |
検索結果全てにカーソル追加 | |
Ctrl + D |
次の一致箇所にカーソル追加 | |
Ctrl + Shift + L |
選択範囲と一致する箇所全てにカーソル追加 | |
マルチカーソル削除 | Ctrl + U |
直前に追加したカーソルを削除 |
Escape |
全てのマルチカーソルを解除 | |
Alt + Click |
同じ位置でクリックすると削除 | |
コマンドパレット | Ctrl + Shift + P |
コマンドパレットを開く |
Transform to Uppercase |
選択範囲を大文字に変換 | |
Transform to Lowercase |
選択範囲を小文字に変換 | |
Transform to Title Case |
単語の先頭を大文字に変換 | |
Transform to Camel Case |
キャメルケースに変換 | |
Transform to Pascal Case |
パスカルケースに変換 | |
Transform to Snake Case |
スネークケースに変換 | |
Transform to Kebab Case |
ケバブケースに変換 |