PyCharm(IntelliJ)の機能を使い倒すTips集

# 前置き

JetBrains社の開発するPyCharm(IntelliJ Idea)等の製品は強力な補完を行うことができる高機能なIDEです。

一方で高機能ゆえに、「使いこなせていないなぁ」と感じる方も多いのではないでしょうか。

本記事では、自分のよく使う機能をgif付きでまとめます。

また、最近はJetBrains製品の公式マニュアル日本語βが公開されています。合わせてこちらも押さえておくと良いと思います。

- [JetBrains公式マニュアル日本語版β \- 使い方から高等テクニックまで](https://pleiades.io/)

最新は本家公式を追うとよいです

- [Getting help \- Help \| PyCharm](https://www.jetbrains.com/help/pycharm/getting-help.html)


# 環境

- PyCharm 2018.3.4 (ProfessionalEdition)

筆者環境の都合によりMacのみショートカット記載します

# Tips

以下よく使う順で書いていきます。

機能名については検索性を考え、極力公式の英語に合わせることとします。

また、 **「この機能クールだぜ」「この機能これにキーマッピングすると便利」** など情報あれば教えてください。

とくに自分が全然知らないのはHTTP ClientやFavoriteのあたりです。StructureViewも詳しいことは知らないです。


## Search Everywhere

* Shiftを2回押す

ファイル名とかディレクトリ名とかClass名とかPJのテスト実行設定等を対象に検索する

基本的にファイル開く動作はこれ

![searcheverywhere.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/839740a0-33bf-6ed0-9b7e-ff0367772931.gif)


## ShowIntentionActions

* `Alt + Enter`

赤線、黄色線出てるところで使うとそのコードに対して行える操作一覧が出る

どう考えても `Alt + Enter `は押しづらいので `Ctrl + Enter` などに変えるのがおすすめ

加えて `Down / Up` を `Ctrl + N / P` に設定しておくとキーボードから手を離さずに修正できる
![intentionaction.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/0bcac3d4-6971-e0d0-fba2-325a122a695c.gif)


## Find

* `Cmd + F`

ファイル内検索
![find.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/5ac0f3cf-051b-4ea2-a096-adbad7acf3ce.gif)


## FindinPath

* `Cmd + Shift + F`

PJ以下に対してファイル横断検索
![findinpath.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/ef4a0485-1518-2568-307f-593e718e6e6c.gif)


## ReformatCode

* `Cmd + Option + L`

PJ固有設定にそってコード整形する

拡張子によってやることは自動で変わる

例えばeslintとかの設定は見てくれたはず
![reformat.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/a494ac2d-78cf-214a-30c5-f360c0f7d5da.gif)


## OptimizeImport

* `Cmd + Option + O `

import文などをいい感じに並び替えてくれる

拡張子によってやることは自動で変わる
![optimize.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/c175fe38-65d5-8e9a-a38f-5df5d786c328.gif)


## AutoIndentLine

* `Cmd + Option + I`

PJ固有設定にそってコード整形する

拡張子によってやることは自動で(ry

ReformatCodeしてれば使うことない気がする
![autoindent.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/238ce38c-df76-01f8-14df-068063fde795.gif)


## GotoNextError / GotoPreviousError

* 初期設定なし

赤線、なければ黄色線にカーソル移動する

ShowIntentionActionsと組み合わせると爆速で修正できるのに加えて、エラーがないことの確認としても使う

`IdeaVim` 使ってるのであればノーマルモードの `cn/cp` などをマッピングするといい感じになる。 `.ideavimrc` は最後に載せておきます。
![nexterror.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/9a834377-5459-f2d7-3f2c-69d642c7e84b.gif)


## MethodsDown / MethodsUp

* `Ctrl + ↓ / ↑`

メソッド単位でカーソル移動する

合わせて後述のStructureViewも使うと吉
![nextmethods.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/0fedef98-3c1b-c48b-de97-59a37954a783.gif)


## SplitVertically

* 初期設定なし

エディタ画面を垂直分割する

水平分割するSplitHolizontallyもあるけどそっちはあまり使わない
![split.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/22e98e07-9aab-a69f-df17-1654391c141f.gif)


## ProjectViewを開く / 閉じる

* `Cmd + 1`

左のプロジェクトのファイルツリーが表示されている領域を開く / 閉じる

画面を広く使いたいときに使う
![project.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/561e9975-1cfa-592c-1040-848c865f9d92.gif)


## StructureViewを開く / 閉じる

* `Cmd + 7`

現在のファイルの構造を示した領域を開く / 閉じる

ClassやMethod単位でカーソル移動できる　概要眺めるのにも便利
![structure.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/eb108595-6779-8ead-f496-c3d2fdcf9d91.gif)


## VersionControlViewを開く / 閉じる

* `Cmd + 9`

Gitなど、VCS使ってるとき変更されたファイル一覧を出してくれる

ゆとりなのでGit以外の表示がどうなるのかは知らないです
![vcs.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/3047193b-d7d4-af6a-2eb5-e5737852d771.gif)


## ShowDiff

* `（DiffViewやVCSViewでファイル選択状態で）Cmd + D`

変更されたファイルの差分を表示する

hank単位で変更をもとに戻したりもできる
![vcs_diff.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/1b0986e2-adff-07ba-daf3-a6103015239d.gif)

## Diffとその前後のみ表示

* ShowDiffのWindowで特定ボタン押下

変更とその前後のみ表示する 地味だけど便利
![vcs_diff_accordion.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/f5fc1381-0b72-b9da-38e7-2c0661dfd7f8.gif)


## Diff画面で左右の画面のスクロールを同期する

* ShowDiffのWindowで特定ボタン押下

地味だけど便利
![vcs_diff_sync.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/176c6332-8d3d-4891-89d2-7eee0dbfac58.gif)

## git commit

* `Cmd + K`

git commitするウィンドウを開く

commitのタイミングで前述の `ReformatCode` や `OptimizeImport` するか否かを選択できるほか、 `commit-hooks` が設定されている場合、そちらも項目に出てくる
![vcs_commit.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/7913ba0e-4a70-6f78-f537-169856ff3f12.gif)

## git push

* `Cmd + Shift + K`

remoteが設定されている場合pushできる
![vcs_push.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/2d79121f-0d37-3358-02f4-6889f9104ddd.gif)


## conflictの解決

* コンフリクトしているときDiffViewで特定の操作

コンフリクトを選択的に解決できる めちゃくちゃ便利　これなしの生活には戻れない　出番が無いのがホントは一番いい
![conflict.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/f90625ae-13d7-eb31-40db-62955fc1a422.gif)


## 該当ファイルのcommit履歴をVersionControlViewに一覧表示する

* 初期設定なし

タイトルどおり　これも経緯追うのに便利

キーマッピングするといいです　自分は `Cmd + Ctrl + H` に設定してます
![vcs_history.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/d686c767-c6e8-14a5-dbce-52b966b0ee19.gif)


## Revert

* `（DiffViewでファイル選択状態で）Cmd + Option + Z`

ファイル単位で変更もとに戻す　Gitのrevertとは違うので注意
![revert.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/d3da254f-6ebd-fa33-f27a-7d3f5924428e.gif)


## 〜Viewの移動

* ドラッグ&ドロップ

たとえばVersionControlViewは初期だと下ですが好みで右側に移動できます。
![move.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/01546456-6525-3b4b-1d00-82dbe88586d6.gif)


## 選択行を上下に移動

* `Shift + Option + ↓ / ↑`

地味に使う
![moveline.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/f76f08e8-29ea-7386-ac0e-b62ab109718f.gif)


## 選択行を上下に移動（インデントやシンタックスを考慮）

* `Shift + Cmd + ↓ / ↑`

地味に使う

インデントやシンタックスを考慮というのは、たとえばPythonでif文の中身なくなるような行移動すると `pass` 勝手に入れてくれたりする
![moveline_syntax.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/ecfc17e1-05c0-47bc-04ae-dead571e662d.gif)

## Rename

* `Shift + F6`

ファイル同士の関連を考慮してリネームしてくれます。

オプション次第で全文検索してリネームしてくれたりしますが基本的に最小設定でIDE任せがベター

IDEの恩恵を大きく受ける機能でもありますが、多少挙動の確認はしといたほうが良い気がしてます
![rename.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/68ca141d-f0b0-9ad9-fb25-a4d0f42b279c.gif)


## RecentFile

* `Cmd + E`

最近開いたファイル一覧
![recentfile.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/33aa905e-b765-0f75-c035-3920b1a1e7df.gif)

## RecentProject

* 初期設定なし

最近開いたプロジェクト一覧
![recentproj.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/8abc4c6f-70ec-050e-4ace-b1dd2c980b76.gif)


## Scroll from source / Collapse all

* ProjectViewで特定ボタン押下

Scroll from source: ProjectView上で現在開いているファイルにカーソル移動　地味に重宝します

Collapse all: 個人的な用途ですが、気持ちが行き詰まったとき視界をクリアにしたくて使います
![scrollfrom.gif](https://qiita-image-store.s3.amazonaws.com/0/67790/d92328d7-b91d-de7e-875f-c28e7c4b5d17.gif)


# まとめ

機能があることを知ってるのと知らないのとではかなり変わってくると思っています。

ショートカットは1週間に1つ覚えるぐらいのペースで徐々に生活に取り入れればいいと思います。

使いこなしている諸兄らはおすすめのキーマップ教えてください。

### おまけ .ideavimrc

`.ideavimrc` ではIDEの機能（:action）を各モードにマッピングできます。

参考までに載せておきます。

```vimrc
noremap cc :action CommentByLineComment<CR>
vnoremap cc :action CommentByLineComment<CR>

nnoremap R :action RenameElement<CR>
nnoremap <C-CR> :action ShowIntentionActions<CR>

nnoremap cn :action GotoNextError<CR>
nnoremap cp :action GotoPreviousError<CR>

nnoremap <C-n> :action MethodDown<CR>
nnoremap <C-p> :action MethodUp<CR>

set clipboard+=unnamed
set surround
set hlsearch
set incsearch
set ignorecase
set smartcase
```

## 参考

基本的な部分については、昨年の `PyCon JP 2018` の発表がまとまってて良いです。動画では僕も質問してたりします
 
- [PyConJP2018でPyCharmの話をしてきました \#pyconjp — kashew\_nuts\-blog](https://kashewnuts.github.io/2018/09/22/pyconjp2018.html)

`.ideavim` の設定はこちらをよく参照します

- [IntelliJ\(Android Studio\)のVimプラグイン「IdeaVim」の使い方と設定](https://ikenox.info/2017-12-25-ideavim-introduction/)