在線精簡cheatsheet備查表:intellij.linesh.tw
Github項目:intellij-mac-frequent-keymap
Intellij的快捷鍵多而繁雜,從官方推薦的keymap,到網絡上很多的個人總結,資料可謂浩如煙海。相反,如何從眾多的快捷鍵中快速找到使用頻率最高、對工作效率提升最多的快捷鍵,則成為一個難題。這個cheatsheet速查表,正是為了解決Intellij快捷鍵學習過程可能遇到的這個問題。
這一年里我拉拉雜雜地閱讀了許多Intellij快捷鍵與使用理念的資料,不管是官方的keymap還是個人的博客,結合平時的工作和個人項目經驗,我嘗試整理並總結其中最精華的部分,同時通過這個子集來總結、思考與提高效率相關的思維模式和理念。分享出來,希望能順便給學海中的同學提供有益的幫助。
目標讀者和人群
- 想要快速上手Intellij快捷鍵的同學。多而沒有重點的其他資料不用看了,優先學習最精華最常用的快捷鍵,才是節省時間,提高效率之道
- 想要不斷對比、精簡你的快捷鍵集合的同學。畢竟快鍵辣么多,記得最有用的就好
- 備查。這個是最主要的目的,存個書簽或者記個網址,需要的時候只要有網絡,隨時跨平台可查
- 嘗試提高思維層級,從理念和思維模式的視角來看待編程和工具的同學
理念與思維模式
IDE與電腦作為工具,永遠是高效完成特定工作的輔助。因此我們所謂的高效有了上下文:以完成工作為主,在這個過程工具的作用是輔助工作。那么,所謂高效也即是問,如何更專注於工作本身,更高效地完成工作呢?在一系列落地的快捷鍵背后,這個圍繞快捷鍵所展開的工作系統,其實質性提高工作效率的理念和思維模式本身是什么呢?我的回答是:
- 更高層次的抽象
- 聲明式使用
更高層次的抽象
更高層次的抽象,指的是從代碼、從語言本身特性的層面思考編程,而非單純的文本或者字符串。要把思維從“把這五行代碼剪切並復制到一個新的方法里”等把代碼當成無意義字符的低層面活動,轉變到以作為語言核心的要素和特性為單位的思考,比如類、變量、方法、重命名、重構、if-else、循環、可循環元素等。
在這方面,IDE提供的 Live Template、重構(Refactoring)、部分后向聲明等,都是這種思想的產物,允許你從更高的層級(語言特性、與Java高相關的重構)來思考代碼,並盡量多地向上屏蔽細節。
聲明式使用
聲明式使用,指的是直接使用你完成工作所需要的元素(類、字段、方法等),讓IDE為你自動補全缺少的聲明或定義。這種思想同樣貫穿這本工具集的始終,以更語義化(更高階)的操作來使用工具。
在這方面,IDE提供的 后向聲明(Postfix Auto Completion)、自動補全(Auto Completion) 等,都是這種思想的產物。你不需要關注操作所在的上下文,IDE會為你補全,你需要關注的是工作和操作本身。
本cheatsheet如何通用?
像這種cheatsheet的記錄,有可能會隨時間或版本變遷而不再通用,過多的定制也可能使得追蹤和維護成本增加。為了盡可能多地減少維護成本,盡可能長地保持這份cheatsheet的有效性,下列快捷鍵的選取遵循以下幾個原則:
- 僅列出Mac版的快捷鍵
- 統一使用Mac OSX 10.5+版本的keymap作為基准
- 原則上對作為基准的keymap只刪不改,即可能刪除不需要的快捷鍵,但非特殊原因則不會更改已默認啟用的快捷鍵
- 少部分確實需要更改的快捷鍵,我會采用*星號標明,並標明原因
快捷鍵精簡子集
本章主要分七個部分展開總結:生產力大殺器、語言要素生成、編輯、導航、重構、搜索、運行時。版本控制的部分未錄入,原因是我傾向於使用命令行提交,而非IDE內置VCS支持。見仁見智。最后一欄是該操作在IDEA中的操作名稱,可以在keymap中檢索對應的action/shortcut找到。
生產力(Productivity)
Operation | Mac OSX 10.5+ | Comments | Description |
---|---|---|---|
模板補全 | ⌘+J | 插入一個符合某結構特征的模板,詳解見下 | Insert live template |
命令查詢 | ⇧+⌘+S | 以名稱的形式查詢某個操作或快捷鍵,是聲明式編程思想的完美體現 | Find actions |
意圖預測與智能幫助 | ⌥+Enter | 簡單重構、移除死代碼、結構調整、自動導包等 | Show intention actions |
模板補全(Live Template)
敲完以下模板補全的keyword之后可以直接通過tab或回車觸發模板補全,2…是需要你填充的模板變量。
Operation | Mac OSX 10.5+ Keyword | Expands to | Comments |
---|---|---|---|
判空 | ifn |
if ($1 == null) {} |
后向聲明也有同樣功能,讀者可揀順手的用 |
判非空 | inn |
if ($1 != null) {} |
|
創建索引循環 | fori |
for (int $1 = 0; $1 < $2; $1++) {} |
|
添加TODO | todo |
// TODO: $1 |
非常聲明式的用法 |
添加Fixme | fixme |
// FIXME: 7/19/16 $1 |
同上 |
類型關系判定 | inst |
if ($1 instanceof $2) {} |
|
System.out | sout |
System.out.println($1); |
必須入手的黑技能,調試打log的時候非常有用 |
后向聲明(Postfix Completion)
后向聲明是JetBrains系IDE的一項新功能,旨在減少光標經常性的前后移動,提高開發效率,形成這樣的編程思維:先使用元素,再考慮變量聲明或結構補全。它的主要功能是根據當前元素的屬性,提供可能的行為建議,例如使用if-else結構包圍、判(非)空、格式化、進行類型轉換等。因此,后向聲明所能提供的選擇視元素(主要是變量)的不同而不同。
所有元素都擁有的一些后向聲明選擇,僅選擇我認為常用的:
Operation | Postfix Completion Keyword | Expands To | Comments |
---|---|---|---|
變量聲明 | element.var |
Type $name = element; |
必備技能,聲明式使用的典范 |
轉換為類字段 | element.field |
private $Type element; |
剛發現的 |
將當前變量打印到輸出流 | element.sout |
System.out.println(element); |
|
返回當前值 | element.return |
return element; |
|
類型轉換 | element.cast |
(($Type) element) |
然后,對於特定的元素類型,有的后向聲明還有非常實用的選項,比如字符串的判空、布爾值的if-else、列表的循環等等:
ElementType | Operation | Postfix Completion Keyword | Expands To | Comments |
---|---|---|---|---|
字符串 | 判空 | string.null |
if (string == null) {} |
|
判非空 | string.notnull |
if (string != null) {} |
||
整數 | 分支 | int.switch |
switch (int) {} |
|
布爾值 | 如果為真 | boolean.if |
if (boolean) {} |
|
如果為假 | boolean.else |
if (!boolean) {} |
||
反義 | boolean.not |
!boolean |
||
列表 | 循環元素 | lists.for |
for (Type element : lists) {} |
非常常用 |
帶索引循環 | lists.fori |
for (int i = 0; i < lists.size(); i++) {} |
編輯(Editing)
Operation | Mac OSX 10.5+ | Comments | Description |
---|---|---|---|
基本代碼補全 | ^+Space | 一般都用這個補全,變量命名時及方法補全時常用 | Code/Completion/Basic |
智能補全 | ^+⇧+Space | 是否有必要記得兩個快捷鍵?可以統一設成一個 | Code/Completion/SmartType |
語句補全 | ⇧+⌘+Enter | 直接補全當前語句,在括號特別多時非常有用 | Complete Current Statement |
從上方開始一行 | ⌥+⌘+Enter | Start New Line Before Current | |
從下方開始一行 | ⇧+Enter | Start New Line | |
上移/下移一行 | ⇧+⌥+↑/↓ | 上下移一行。一般用於以單行出現的元素,否則會破壞元素間的關系 | Move Line Up/Down |
上移/下移一個塊 | ⇧+⌘+↑/↓ | Move Statement Up/Down | |
選中一個代碼塊 | ⌥+↑ | 常用 | Extend Selection |
取消代碼塊選中 | ⌥+↓ | Shrink Selection | |
重復當前行 | ⌘+D | Duplicate Current Line or Block | |
復制並且不刪除當前行 | ⌘+C | Edit/Copy | |
剪切當前行並復制到粘貼板 | ⌘+X | Edit/Cut | |
關閉當前標簽 | ⌘+W | 跟通常編輯器快捷鍵一致 | Edit Tabs/Close |
注釋當前行 | ⌘+/ | 隨手一注釋 | Comment with Line Comment |
優化import | ^+⌥+O | 沒啥用 | Optimize Imports |
格式化代碼 | ⌥+⌘+L | 沒啥用 | Reformat Code |
語言要素生成(Language Elements/Features)
Operation | Mac OSX 10.5+ | Comments | Description |
---|---|---|---|
測試、方法生成 | ^+Enter/ ⌘+N | 非常常用於創建測試方法、構造方法、覆寫接口方法、覆寫基類方法 | Code/Generate |
創建類、文件、目錄 | ⌘+N | 常用 | Code/Generate |
創建override方法 | ^+O | 有用 | Override Methods |
創建接口方法實現 | ^+I | 有用 | Implement Methods |
導航(Navigation)
Operation | Mac OSX 10.5+ | Comments | Description |
---|---|---|---|
轉到方法/字段的聲明 | ⌘+B | 調試跟代碼都很常用 | Navigation/Declaration |
轉到方法/字段的實現點 | ⌥+⌘+B | 同上,常用 | Navigation/Implementation(s) |
轉到方法/字段類型的類定義處 | ⇧+⌘+B/ ⇧+^+B | 常由下兩個快捷鍵取代 | Navigation/Type Declaration |
當前類與單元測試間跳轉 | ⇧+⌘+T | 非常方便 | Navigate/Test |
跳轉到當前類的基類 | ⌘+U | 配套食用,效果更佳 | Super Method |
類繼承體系 | ^+H | Type Hierarchy | |
方法繼承層次 | ⇧+⌘+H | Method Hierarchy | |
當前方法調用鏈 | ^+⌥+H | Call Hierarchy | |
本類及所有基類方法列表 | ⌘+F12 | File Structure | |
類/方法/字段定義的快速預覽 | ⌥+Space/ ⌘+Y | 小覽實現,一般可以看到方法/字段參數、返回值、前幾行實現,快速的信息足夠了 | Quick Definition |
方法文檔快速預覽 | ^+J | 看文檔,我不常用 | Quick Documentation |
方法參數快速預覽 | ⌘+P | 常用 | Parameter Info |
前一個標簽 | ⇧+⌘+[ | 導航常用,不過是否能以其他方式取代,比如聲明式使用類查找⌘+O等。仍在探索 | Select Previous Tab |
后一個標簽 | ⇧+⌘+] | Select Next Tab | |
往上一級 | ⌥+⌘+←/ ⌘+[ | 調代碼,跟方法體系時,非常有用,下同 | Navigate/Back |
往下一級 | ⌥+⌘+→/ ⌘+] | Navigate/Forward | |
轉到下一個錯誤或警告 | F2 | 代碼見紅時,常用此快捷鍵快速定位,並配合萬能快捷鍵⌥+Enter快速修復 | Next Highlighted Error |
提示錯誤信息 | ⌘+F1 | 不常用 | Error Description |
意圖預測與智能幫助 | ⌥+Enter | 簡單重構、移除死代碼、結構調整、自動導包等 | Show intention actions |
project視圖 | ⌘+1 | 有時導航項目結構時常用,不知是否有替代方案 | Other/Project |
search/find視圖 | ⌘+3 | 除了這幾個,其他視圖都不常用 | Other/Find |
run視圖 | ⌘+4 | 有時開關測試視圖 | Other/Run |
debug視圖 | ⌘+5 | Other/Debug | |
VCS視圖 | ⌘+9 | Other/VCS | |
terminal視圖 | * ⌘+0 | 自己改過,一是和各種視圖快捷鍵保持一致,另外是原生的⌘+F12實在有點難按 | Other/Terminal |
隱藏所有工具視圖 | ⇧+⌘+F12 | 同時開了工程和終端視圖時一鍵回編程頁面 | Hide All Tool Windows |
跳轉到第…行 | ⌘+L | 屬於細節型的活,能少用就多思考替代方案 | Navigate/Line… |
重構(Refactor)
Operation | Mac OSX 10.5+ | Comments | Description |
---|---|---|---|
復制類/目錄等 | F5 | Refactor/Copy | |
移動類/目錄等 | F6 | Refactor/Move | |
元素(類/方法/變量/…)重命名 | ⇧+F6 | 最常用的重構快捷鍵之一了吧 | Refactor/Rename |
類/方法簽名修改 | ⌘+F6 | Refactor/Change Signature | |
字段(類級別)抽取 | ⌥+⌘+F | Extract/Field | |
常量(類級別)抽取 | ⌥+⌘+C | Extract/Constant | |
變量(方法級別)抽取 | ⌥+⌘+V | Extract/Variable | |
參數(方法級別)抽取 | ⌥+⌘+P | Extract/Parameter | |
方法抽取 | ⌥+⌘+M | 最常用的重構快捷鍵之一 | Extract/Method |
方法內聯 | ⌥+⌘+N | Refactor/Inline |
搜索(Searching)
Operation | Mac OSX 10.5+ | Comments | Description |
---|---|---|---|
搜索 | ⌘+F | 通常快捷鍵 | Find/Find |
替換 | ⌘+R | 正則發揮作用的地方 | Find/Replace |
查找引用點 | ⌥+F7 | 重構或調試的時候經常用到,使用頻率高 | Find/Find usages |
查找類 | ⌘+O | 聲明式編程,使用頻率很高的快捷鍵 | Navigate/Class |
查找文件 | ⇧+⌘+O | 同上,使用頻率很高 | Navigate/File |
查找symbol | ⌥+⌘+O | 基本不用,不知道與上兩者有什么區別 | Navigate/Symbol |
全項目文本搜索 | ⇧+⌘+F | 搜索引用點和文本出現、改bug時非常有用 | Find/Find in path |
查找下一個 | ⌘+G | Find/Find Next | |
查找上一個 | ⇧+⌘+G | Find/Find Previous |
運行時(Runtime)
Operation | Mac OSX 10.5+ | Comments | Description |
---|---|---|---|
編譯 | ⌘+F9 | 調bug時可能是忘了編譯最新代碼 | Make Project |
運行(最近一個測試) | ^+R | 非常有用,有時可能節省在測試代碼和源文件之間的切換 | Run/Run |
調試 | ^+D | Run/Debug | |
打斷點/取消斷點 | ⌘+F8 | Toggle Breakpoints | |
查看所有斷點 | ⇧+⌘+F8 | View Breakpoints | |
跳入 | F7 | Run/Step Into | |
跳出 | ⇧+F8 | Run/Step Out | |
智能跳入(當前行多個調用時) | ⇧+F7 | ||
跳過(下一步) | F8 | Run/Step Over | |
求表達式值 | ⌥+F8 | Evaluate Expression | |
停止調試 | ⌘+F2 | Run/Stop |