VS Codeでは「マルチカーソル選択」機能を使って、ドキュメントに含まれる同一のテキスト/識別子をまとめて選択し、それらを一括で変更できる。
Visual Studio Code(以下、VS Code)では、幾つかの方法で「現在のカーソル位置にある単語と同じ単語をまとめて選択」できる。これを「マルチカーソル選択」と呼ぶ。本稿では、マルチカーソル選択機能の使い方を説明する。
操作 | |
---|---|
現在のカーソル位置にある単語と同じ単語を一括して選択する | [Ctrl]+[Shift]+[L]キー(Windows/Linux) [Shift]+[Command]+[L]キー(macOS) |
現在のカーソル位置にある単語と同じ単語を1つずつ選択範囲に追加する | [Ctrl]+[D]キー(Windows/Linux) [Command]+[D]キー(macOS) |
「マルチカーソル選択」機能を使って複数の範囲を選択する方法 |
以下では、次のコードを例に取ろう。関数swapでは無駄な一時変数を導入しているが、これはサンプルなのでご容赦いただきたい(Pythonでは「return b, a」の1行で話が済む)。
def hello(to):
print(f"hello {to}")
def swap(a, b):
tmp = a
a = b
b = tmp
return (a, b)
hello("World")
hello("Insider.NET")
tmp = "atmark it"
hello(tmp)
現在のカーソル位置にある単語と同じ単語を一括して選択するには、Windows/Linuxでは[Ctrl]+[Shift]+[L]キー(Windows/Linux)を、macOSでは[Shift]+[Command]+[L]キーを押す。以下に例を示す。
上のGIFアニメでは、関数helloを定義している「def hello(to):」行にある「hello」にカーソルがある。ここで[Ctrl]+[Shift]+[L]キーを押し、文字列中の「hello」と関数helloの呼び出し箇所を含めて、全ての「hello」を一気に選択し、その後、選択したテキストをまとめて「Hello」に書き直しているところだ。
このように、ある語の出現箇所の全てをまとめて範囲選択するには、[Ctrl]+[Shift]+[L]キー(または[Shift]+[Command]+[L]キー)は使い勝手がよい。だが、文字列中の「hello」はそのままにしておきたい。あるいは関数swapで使っているローカル変数tmpの名前を変更したいけれど、その下で使用している(モジュールで)グローバルな変数tmpはそのままにしておきたいという場合には、この方法は使えない。
VS Code(とその拡張機能)でリファクタリングがサポートされている言語では、[F2]キーを押すのが1つの解決策だ。これにより、特定の識別子とその参照箇所のみを修正できる。別の解決策としては、以下で説明する「1つずつ選択範囲に追加」する方法がある(ただし、[F2]キーよりは使い勝手はよくない)。
例えば、関数swap内で使用されているローカル変数tmpのみを名前を変更したいという場合を考えよう。このようなときには、上で述べたように、[F2]キーでのシンボル名の変更が可能であれば、[F2]キーを押せばよい。そうでなければ、Windows/Linuxでは[Ctrl]+[D]キーを、macOSでは[Command]+[D]キーを押すことで、現在のカーソル位置にある単語と同じ単語を1つずつ選択範囲に追加した後で、それを変更できる。以下に例を示す。
上のGIFアニメでは、[Ctrl]+[D]キーを2回押して、関数swapで使われている変数tmpを選択範囲として、その後、それらを「temp」という名前に変更している。その下にあるグローバルな変数tmpはそのままだ。
変数にはある程度の局所性があるので、その名前をある程度まとめて変更したいといったときにはこれでも十分に役立つはずだ(関数やメソッド内で、ローカル変数が出現している全ての箇所を[Ctrl]+[D]キーで追加していけばよい)。ただし、最初の例で見たように、文字列に含まれる同じつづりもその対象となってしまう。そうした場合には、範囲選択→編集といった操作を繰り返して行う必要がある。とはいえ、変数や関数の名前を変更するための簡易的なリファクタリング手段としては使えるだろう。
Copyright© Digital Advantage Corp. All Rights Reserved.