451 Views
September 26, 24
スライド概要
関西モバイルアプリ研究会A #5 の発表資料です。
https://kanmoba.connpass.com/event/329447/
PDF化したことで、スライド中のgif画像が再生できません。記事で確認できるのでそちらをご参照ください。
https://qiita.com/shin5884_kt/items/bcecee670fa79dacaa27
IdeaVim活用術 〜複雑な繰り返し操作をやっつけよう〜 Sansan株式会社 Sansan Engineering Unit Mobile Application Group 小林 慎梧
小林 慎梧 Sansan株式会社 技術本部 Sansan Engineering Unit Mobile Application Group Androidエンジニア SIerに4年務めた後、2022年にSansan株式会社に入社。 Androidメインにかれこれ6年くらいアプリ開発をやっている。 半年前くらいからVimにハマってる(なので今日もVimのはなし) © Sansan, Inc. 2
IdeaVimとは - AndroidStudioなどJetBrains製IDEでVimのキーバインドを使えるように するプラグイン © Sansan, Inc. 3
実装時にこんな場面ないでしょうか?
data class User( val id: String, val firstName: String, val lastName: String, val department: String, val email: String, val phoneNumber: String, val dateOfBirth: String, val hireDate: String, val salary: Double, val position: String, val address: String, val supervisorId: String?, val isActive: Boolean, val lastLogin: String? ) © Sansan, Inc. // ユーザーの一意のID // ユーザーの名 // ユーザーの姓 // ユーザーが所属する部署 // ユーザーのメールアドレス // ユーザーの電話番号 // ユーザーの生年月日 // ユーザーの採用日 // ユーザーの給料 // ユーザーの役職 // ユーザーの自宅住所 // ユーザーの上司のID(オプション) // ユーザーがアクティブかどうか(雇用中かどうか) すべてのプロパティをprivateにして、 // ユーザーの最後のログイン日時(オプション) プロパティ名の先頭にアンダーバーをつけたい 5
data class User( private val _id: String, // ユーザーの一意のID private val _firstName: String, // ユーザーの名 private val _lastName: String, // ユーザーの姓 private val _department: String, // ユーザーが所属する部署 private val _email: String, // ユーザーのメールアドレス private val _phoneNumber: String, // ユーザーの電話番号 private val _dateOfBirth: String, // ユーザーの生年月日 private val _hireDate: String, // ユーザーの採用日 private val _salary: Double, // ユーザーの給料 private val _position: String, // ユーザーの役職 private val _address: String, // ユーザーの自宅住所 private val _supervisorId: String?, // ユーザーの上司のID(オプション) private val _isActive: Boolean, すべてのプロパティをprivateにして、 // ユーザーがアクティブかどうか(雇用中か private val _lastLogin: String? プロパティ名の先頭にアンダーバーをつけたい // ユーザーの最後のログイン日時(オプショ ) © Sansan, Inc. 6
IDEのマルチカーソルを活用すれば一瞬だ © Sansan, Inc. 7
data class User( private val _idLocal: String, // ユーザーの一意のID private val _firstNameLocal: String, // ユーザーの名 private val _lastNameLocal: String, // ユーザーの姓 private val _departmentLocal: String, // ユーザーが所属する部署 private val _emailLocal: String, // ユーザーのメールアドレス private val _phoneNumberLocal: String, // ユーザーの電話番号 private val _dateOfBirthLocal: String, // ユーザーの生年月日 private val _hireDateLocal: String, // ユーザーの採用日 private val _salaryLocal: Double, // ユーザーの給料 private val _positionLocal: String, // ユーザーの役職 private val _addressLocal: String, // ユーザーの自宅住所 private val _supervisorIdLocal: String?, // ユーザーの上司のID(オプション private val _isActiveLocal: Boolean, // ユーザーがアクティブかどうか(雇 次に、プロパティ名の末尾にLocalをつけよう。 private val _lastLoginLocal: String? // ユーザーの最後のログイン日時(オ ) © Sansan, Inc. 8
data class User( private val _idLocal: String, // ユーザーの一意のID private val _firstNameLocal: String, // ユーザーの名 private val _lastNameLocal: String, // ユーザーの姓 private val _departmentLocal: String, // ユーザーが所属する部署 private val _emailLocal: String, // ユーザーのメールアドレス private val _phoneNumberLocal: String, // ユーザーの電話番号 private val _dateOfBirthLocal: String, // ユーザーの生年月日 private val _hireDateLocal: String, // ユーザーの採用日 private val _salaryLocal: Double, // ユーザーの給料 private val _positionLocal: String, // ユーザーの役職 private val _addressLocal: String, // ユーザーの自宅住所 private val _supervisorIdLocal: String?, // ユーザーの上司のID(オプション private val _isActiveLocal: Boolean, // ユーザーがアクティブかどうか(雇 あれ?今回は縦のラインが揃ってないからマル private val _lastLoginLocal: String? // ユーザーの最後のログイン日時(オ チカーソルでさっきみたいにできないぞ ) © Sansan, Inc. 9
こんな時、IdeaVimがあれば
© Sansan, Inc. 11
解説 - Vimにはマクロという一連の操 作を記録し、あとから繰り返し 実行できる機能がある - 1行目にLocalを追加する一連の 操作をマクロで記録し、残りの 13行で繰り返し実行している - プロパティが例え100個あっても 余裕で対応できる キー入力: qqf_eaLocal<Esc>+q13@q © Sansan, Inc. 12
もう少し複雑な繰り返し操作
data class User( // ユーザーの一意のID private val _idLocal: String, // ユーザーの一意のID // ユーザーの名 private val _firstNameLocal: String, // ユーザーの名 // ユーザーの姓 private val _lastNameLocal: String, // ユーザーの姓 // ユーザーが所属する部署 private val _departmentLocal: String, // ユーザーが所属する部署 // ユーザーのメールアドレス private val _emailLocal: String, // ユーザーのメールアドレス … // ユーザーがアクティブかどうか(雇用中かどうか) private val _isActiveLocal: Boolean, // ユーザーがアクティブかどうか(雇 コメントを上の行に移動させたい // ユーザーの最後のログイン日時(オプション) private val _lastLoginLocal: String? // ユーザーの最後のログイン日時(オ ) © Sansan, Inc. 14
© Sansan, Inc. 15
解説 - 先ほどと同様にマクロを活用 - 1行目のコメント手前までを一度 削除、下に行を追加して貼り付 け - それを13回繰り返し キー入力: qqf/hv^do<Esc>p+q13@q © Sansan, Inc. 16
おわりに IdeaVimのマクロを活用して繰り返し操作を一瞬でやっつける方法を紹介し ました。 今回の発表の内容は記事としても公開しています。 - IntelliJユーザーに贈るIdeaVim活用術 〜複雑な繰り返し作業をやっつけよう〜 Vimをこれから始める人向けの記事も書いているので、そちらもぜひ。 - © Sansan, Inc. 今度こそ挫折しないVim 17