VSCodeのVimプラグインでUndo/Redoの設定を調整する

私はVSCodeでVimプラグインを使っている。VSCodeのVimを使っていて微妙に困るのが、Vim経由でUndoをすると、自分の想定しているものより多くの変更がもとに戻ってしまうことだ。

この問題は開発元でもIssueとして認識されているが、今のところ解決には至っていない。そこで今回は、この問題の現時点(2019年6月)での回避策を紹介したい。

Read full post gblog_arrow_right

リフォーマットコードを特定のディレクトリ・ファイルのみ除外する設定

私はGitの操作はほぼ全てIntelliJ系のIDEで行っている。慣れれば便利である。 コミットする際には自動的にreformat code(コードスタイルに基づいて自動的に整形してくれる機能)が走るように設定しているのだが、これが今回おもわぬ事故を引き起こした。 コミット時に自動フォーマットする機能は大変便利なのだが、特定のファイルで問題が発生するためにオフにはしたくない。 そこで特定のファイルのみ自動フォーマットされないようにする設定を探してみた。

Read full post gblog_arrow_right

VSCodeVimのundo設定

Visual Studio Code+Vimプラグインを使っていて、undoを使った際に想定より大きくundoされてしまって使いづらい。 VimプラグインにおけるuとCtrl+rによるundo/redoを、Visual Studio Codeのundo/redoにマッピングすることで対策できる。 https://github.com/VSCodeVim/Vim/issues/1490#issuecomment-352167221 User Settingsで"vim.otherModesKeyBindingsNonRecursive"を追加して、上記コメントにある設定を加えれば解決する。

Settings Repositoryプラグインを使ってIDEの設定を共有する

いつもOverwrite local/Overwrite remoteが、どっちがどっちなんだっけと使うときに混乱するのでメモ。 どっちがどっち、というのはovwerwrite localが、現在の設定をリモートリポジトリの設定で上書きするのか、現在の設定でリモートの設定を上書きするのか混乱してしまうのである。 Overwrite localは現在の設定をリモートの設定で上書きする、が結論なんだけど。 これがわかりにくいと思うのは私の英語力がないせいなのだろうか。 Settings repositoryの設定について ちなみにSettings Repositoryをご存じない方向けに簡単に紹介。 IntelliJ IDEAで使える設定共有用のプラグイン。 私の場合で言うと、Android Studio(stable/canary)とIntelliJ IDEA community editionを行ったり来たりすることがあるので、このプラグインを使って設定を共有している。 バージョンアップする際に以前の設定を引き継ぐというのはできるが、同時に運用しているときにAで行った設定変更をBでもまたやらないといけない、というのが起こらなくなるので非常に便利だと思う。 利用しているプラグインによっては、そのプラグインの設定ファイルもバックアップ対象になるらしい。 例えば私はIdeaVimを利用しているが、どのファイルのどの位置にカーソルが移動した、という情報までバックアップ対象になってしまっている。 そのため必要に応じて不要な設定ファイルは.gitignoreで管理対象から外すなど工夫が必要。 (私はvim_settings.xmlは管理対象から外している) MacであればFileメニューのところにSettings Repositoryがあるので、GitHubなりBitbucketなりで管理用リポジトリを用意してそのURLを設定すれば使えるようになる。 ちなみにどうもエディタでタブを使わないとか、キーマップの設定でどれを使うかなどまでは合わせてくれないようだ。 例えば私の使っているキーマップはMac OS X 10.5+ copyとなっているのだが、このキーマップ設定自体は共有してくれるものの、これが有効な状態にまでは復元してくれない。 そのため、どのキーマップを使うか、コードスタイルはどれを使うかなどは手動で直さないといけないようだ。

Android Studio2.2でレイアウトエディタを開いた際にTextで開くようにする

layout.xmlを開いた際に、デフォルトではDesignタブで開かれると思います。これをTextに変更する方法です。 Android Studio 2.1まではレイアウトのPreview画面に歯車アイコンがあって、Prefer XML EditorにチェックをつければOKでしたが、Android Studio 2.2のPreview画面にはそのようなものが見当たりません。 Android Studio 2.2からは、設定画面から変更するようです。 Preference > Editor > Layout Editorで設定できます。

AndroidManifest.xmlでコード補完機能を使う際に注意すべきこと

Android Studioのコード補完機能を過信しすぎてはよくないというお話です。 例えば、AndroidManifest.xmlにpermissionを追加するときのことです。<uses-permission android:name="android.permission.INTERNET"/>を追加しようとしたさいに、Android Studioのコード補完に任せると<uses-permission android:name="ANDROID.PERMISSION.INTERNET"/>となることはないでしょうか。しかもAndroid Studioで補完された文字列だから、大文字のままでも問題ないのかなと放置していないでしょうか。 実はこれが全部大文字になっているとうまく動きません。android.permissionの部分は小文字でなければなりません。 原因と対策 これはコード補完で候補を絞り込む際に、INTERNETの部分を大文字でタイピングしたときに起こります。最初の1文字目を大文字でタイピングすることで、選んだ選択候補の文字列がすべて大文字で入力されてしまうようです。 この対策は実はとても簡単なことで、internetと小文字でタイピングして絞り込むことです。 INTERNETの部分が大文字だから大文字で入力しなければならないと思い込んでいないでしょうか。私は思い込んでました。なぜなら、コード補完で絞り込む対象が定数である場合、少なくとも最初の1文字目は大文字でタイピングしないと絞り込めなかったからです。だからpermissionでも同じなのだろうと思ってました。 しかし、このpermissionの場合は小文字でタイピングしても絞り込めます。そして、小文字で絞り込んだ場合だと正しくandroid.permission.INTERNETと入力されます。 定数だとなぜ大文字で入力しなければ絞り込めないか これはAndroid Studioの設定によるものです。デフォルト設定がどうなのかはよく知らないので、人によって違うかもしれません。 Android Studioのコード補完機能の設定で、大文字・小文字を区別する設定があります(Preference > Editor > General > Code Completion)。私の場合はここが「First letter」になっています。そのため補完候補の最初の1文字目だけは大文字・小文字が区別されてしまうのです。 そのため定数(例えばREQUEST_CODEといったもの)の場合、少なくとも最初のRだけは大文字で入力しなければ候補に残りません。一方でandroid.permission.INTERNETの場合は最初の1文字目が小文字であるため、INTERNETの部分で絞込をする場合に入力する文字は小文字でも問題ないのです。 今のところ私が遭遇して実際に影響を受けたのはAndroidManifest.xml上でだけですが、他の部分でも影響があるのかもしれません。

Android StudioでJDKのパスを指定する

久しぶりにAndroid Studioでサンプルアプリを作ろうとしたら、JDK7を使えと怒られてしまいました。 設定を確認すると、JDK6を使うように設定されていました。 Project Structureはcmd + ;で開きます。 JDKは1.8をインストールしていたはず・・・と思って確認すると、やっぱり1.8がインストールされていました。 コマンドプロンプトを開いてjava -versionでインストールされているJavaのバージョンが確認できます。(正確にはJREのバージョンの確認ですけど) しかし、/System/Library/Java/JavaVirtualMachinesにはJDK6しかない。調べてみると、JDK1.7以降ではインストールされているディレクトリが異なる模様。 それぞれのJDKのディレクトリを確認するには、コマンドプロンプトで/usr/libexec/java_home -v バージョンで、JDKのバージョンごとのインストールされているディレクトリが確認できます。 とりあえずJDK7を使えというエラーメッセージだったので、JDK7のディレクトリを指定してやることでエラーメッセージが消えました。 ちなみに、JDK7はOracleのサイトからダウンロードできます。

Setter,Getterを自動生成する際にフィールド名先頭のmを無視する方法

Androidのコーディング規約で、非Publicかつ非staticなフィールドは、先頭にmつけるというものがあります。これに従ってコーディングしていくわけですが、そのままだととあることをしようとしたときに困ったことになります。それは、Getter,Setterを自動生成する時です。 ソースコードエディタ上でcmd + nもしくはctrl + enterを入力すると、Generateというポップアップが出てきて、そこでGetterやSetterの生成を行うことができます。 例えば作成しているクラスがmHogeというフィールドを持っていて、Setterを生成するとしましょう。 ここで何も考えずにSetterを作成すると、生成されるメソッド名はsetmHoge()となります。そう、余計なmが一緒についてくるのです。この場合、通常はsetHoge()としたいでしょうから、これでは非常に面倒くさいことになります。 これはAndroid Studioの設定を変えることで対処できます。 cmd + ,でPreferenceを開き、Code Style > Javaを選択、Code Generationのタブを開きます。そしてFieldのName prefixの欄にmを入力してやります。これだけでオッケー。 ついでにコーディング規約でstaticフィールドの先頭にはsをつけるという規約があるので、Static fieldにsも追加しておきます。 これでSetterを生成した際にsetHoge()と解釈してくれるようになります。 Android Studioと銘打っているのに、なぜコーディング規約に従った設定になっていないのか不思議で仕方ありません・・・。