タイトルの通りなのですが、Xcode10からついにマルチカーソル機能が使用できるようになりました。
今までも ⌘+Control+E
(Use Selection for Replace) でマルチカーソルもどきは使用できたのですが、本格的なマルチカーソルは今回が初です
コマンド
Select Column Up(Down) Shift+Control+↑
Shift+Control+↓
(ダブルクォーテーションの補完が1行目のほうしかできてない😅)
上または下の行にカーソルを複製する。
このコマンドだけ唯一デフォルトでショートカットキーが設定されています。他のに関してはデフォルトだと設定されてないので自分で設定しないといけません。
Select All Symbols
同じシンボルをすべて選択してカーソルを割り当てる。
これによる選択はただ文字列が一致しているかを見ているのではなく、コードとして別の意味を持ったシンボルであれば選択されないようになっています。
例えば、上の例だとtextLabel.text
の.text
部分でこのコマンドを実行しても、下の.textColor
のtextは選択されません。
つまるところ既存の ⌘+Control+E
(Use Selection for Replace) と同じように見えます。どこに差分があるのだろう?
Split Selections By Lines
選択されている範囲を行ごとに分割する感じです。どういうときに使うんだろう?画像ではCSVとかから雑多にコピペした想定で行末が揃ってない文字列をトリムしてみましたが、あんまり使う機会ないような?
Balance Delimiters
字面からは意味がよくわからないですが、現在のカーソル位置の外側にある括弧を選択するっぽい挙動をします。これはマルチカーソル関係ないですね。
これもどういった場面で有用なのでしょう?長い関数があってその始点を知りたいときとか、まるっと削除したいときとか?
おわり
Xcode10で追加されたカーソル選択範囲まわりの機能を紹介しました。ようやく実装されたマルチカーソル、便利なのでぜひ使って開発効率向上させましょう。
ちなみにXcodeSourceEditorExtensionでは以前から XCSourceTextBuffer
に複数の選択範囲(XCSourceTextRange
) を渡すことができましたが、Xcode9以前では渡しても意味がありませんでした。
ところがXcode10では渡した部分がきちんとカーソルに反映されるようになったため、Sublimeなどのような押した回数だけ選択部分が増えるタイプのマルチカーソルもXcodeSourceEditorExtensionを用いれば作れそうでした。