成噸提升開發效率:Intellij Shortcuts精簡子集與思惟模式

在線精簡cheatsheet備查表:intellij.linesh.tw
Github項目:intellij-mac-frequent-keymapgit

Intellij的快捷鍵多而繁雜,從官方推薦的keymap,到網絡上不少的我的總結,資料可謂浩如煙海。相反,如何從衆多的快捷鍵中快速找到使用頻率最高、對工做效率提高最多的快捷鍵,則成爲一個難題。這個cheatsheet速查表,正是爲了解決Intellij快捷鍵學習過程可能遇到的這個問題。github

這一年裏我拉拉雜雜地閱讀了許多Intellij快捷鍵與使用理念的資料,不論是官方的keymap仍是我的的博客,結合平時的工做和我的項目經驗,我嘗試整理並總結其中最精華的部分,同時經過這個子集來總結、思考與提升效率相關的思惟模式和理念。分享出來,但願能順便給學海中的同窗提供有益的幫助。編程

目標讀者和人羣

  • 想要快速上手Intellij快捷鍵的同窗。多而沒有重點的其餘資料不用看了,優先學習最精華最經常使用的快捷鍵,纔是節省時間,提升效率之道網絡

  • 想要不斷對比、精簡你的快捷鍵集合的同窗。畢竟快鍵辣麼多,記得最有用的就好intellij-idea

  • 備查。這個是最主要的目的,存個書籤或者記個網址,須要的時候只要有網絡,隨時跨平臺可查編輯器

  • 嘗試提升思惟層級,從理念和思惟模式的視角來看待編程和工具的同窗ide

理念與思惟模式

IDE與電腦做爲工具,永遠是高效完成特定工做的輔助。所以咱們所謂的高效有了上下文:以完成工做爲主,在這個過程工具的做用是輔助工做。那麼,所謂高效也便是問,如何更專一於工做自己,更高效地完成工做呢?在一系列落地的快捷鍵背後,這個圍繞快捷鍵所展開的工做系統,其實質性提升工做效率的理念和思惟模式自己是什麼呢?個人回答是:工具

  • 更高層次的抽象post

  • 聲明式使用單元測試

更高層次的抽象

更高層次的抽象,指的是從代碼、從語言自己特性的層面思考編程,而非單純的文本或者字符串。要把思惟從「把這五行代碼剪切並複製到一個新的方法裏」等把代碼當成無心義字符的低層面活動,轉變到以做爲語言核心的要素和特性爲單位的思考,好比類、變量、方法、重命名、重構、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或回車觸發模板補全,$1/$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
相關文章
相關標籤/搜索