使用IDEA Intellij已有两年,在此罗列一下在实践中觉得能有效提升开发效率的一些小技巧和插件。
1. 重设移动键
方向键和Home/End键离基键太远,经常把手移过去其实很费时。所以建议重设到主键盘上。考虑到后面会提到的IdeaVim插件,所以最好使用类似Vim的方案。我个人的设定是:
Ctrl+H ←
Ctrl+J ↓
Ctrl+K ↑
Ctrl+L →
Ctrl+A End (Vim中Shift+A是在行尾插入)
Ctrl+I Home (Vim中Shift+I是在行首插入)
被冲掉的原本的快捷键可以设到Alt上(最常用的Ctrl+A全选和Ctrl+J Live Template)。当然你也可以把移动键设在Alt上,不过使用标准键盘时,左Ctrl可以用手掌来按(使用emacs的必备技能),非常方便。所以我个人喜欢把常用操作设到Ctrl上。
2. 好用的Select Word at Caret快捷键
在IDEA的Keymap中有Select Word at Caret这个动作,字面意思是“选中光标所在的单词”,默认快捷键是Ctrl+W。但事实上,这个动作的实际操作是选中更上一层的语法结构。例如,如果你在一个字符串的一个单词中,按一下Ctrl+W,会选中光标所在单词。再按一下,会选中整个字符串的内容,不包括引号。再按一下,会选中包括引号的字符串。再按一下,会选中整个表达式(如果表达式含有括号,会逐层选中)。再按一下,会选中整个语句块。再按一下,会选中整个方法。再按一下,会选中整个类。
3. Ace Jump插件
可以说Ace Jump和IdeaVim这两个插件是我使用了Intellij后再也不想用eclipse的最主要原因。Ace Jump是一种从emacs上借鉴过来的快速光标跳转方式,操作方式是:你用某个快捷键进入Ace Jump模式后,再按任一个键,当前屏幕中所有该字符都被打上一个字母标记,你只要按这个字母,光标就会跳转到这个字符上。这种跳转方式非常实用,你根本不用管当前光标在什么位置,眼睛只需要盯着需要跳转到的位置,最多三四下按键就能准确把光标定位,开始编辑。按道理这种功能非常容易实现,但偏偏到目前为止我没有在eclipse上找到类似插件。
安装与使用:
在Intellij的Setting -> Plugins -> Browse repositories中查找acejump,可以找到两个插件,AceJump和emacsIDEAs。AceJump是最纯正的Ace Jump插件,功能单一,也比较稳定,但我个人感觉没有emacsIDEAs好用。两者最大的差异是,Ace Jump是先按键调出跳转标记,再通过不同功能键(Ctrl,Shift,Alt等)配合书签按键追加额外功能(例如从当前位置选中文本至书签位置)。而emacsIDEAs是使用不同的快捷键进入不同的功能模式(例如跳转到字符,跳转到单词,选中到标签等)同时调出书签标记,然后再按书签按钮实现跳转。感觉emacsIDEAs的方式比较符合我的思维习惯。
如果选择了AceJump插件,重启Intellij后即可使用,默认快捷键是Ctrl+;(分号)。但我习惯将它重设到Alt+K。下面是使用AceJump的效果
在AceJump模式下,按下N键,屏幕可见范围内的字符N均被打上标记,按相应字母即可跳转到该位置。
详细使用方法可以看 http://johnlindquist.com/2012/08/14/ace_jump.html 的视频。不过视频是youtube上的,为了方便墙内朋友,在这里简单列一下可追加的功能:
* 列出标签后按回车键:对更外围的字符进行标签,当屏幕上相同字符太多,标签不够用时。离当前光标较远的字符一开始时不会有标签,你可以不停按回车键直到该字符被打标签
* Shift+回车:对更内围的字符进行标签,当按回车键过了头时使用
* Shift+标签字母:从当前光标位置选中文本到书签位置。
* Alt+标签字母:在书签位置选中一个单词并调出自动补全菜单。
如果选择了emacsIDEAs插件,由于默认快捷键使用了Meta键,在Windows下必须重设快捷键才能使用,我个人的方案是:
在插件说明上就能看到详细功能说明,在这里简单介绍一下,方便英文不好的童鞋:
所有AceJumpXXX快捷键都会进入AceJump模式,但按键调出书签,再按书签字母后会有不同效果
AceJumpChar : 跳转到标签
AceJumpCopy : 将光标当前位置到标签处的文本复制到剪贴板
AceJumpCut : 将光标当前位置到标签处的文本剪切到剪贴板
AceJumpWord : 调出书签时,只会匹配单词的首字母,但可追加一些复制粘贴的指令。个人觉得不太好用,就不详述了。有兴趣可以看插件说明。
而CopyWithoutSelection与AceJump无关,是emacsIDEAs插件的另一个功能,用来快速把某些文本复制到剪贴板。按下快捷键后,可以再追加以下字母指定复制范围:
w :光标所在单词
s :光标所在字符串(包括引号)
l :光标所在行
b :光标所在语句块({ } 所包含的内容)
q :光标所在字符串内容 (不包括引号)
a :由光标位置至行首
A :由光标位置至文件开头
e :由光标位置至行尾
E :由光标位置至文件末尾
p :光标所在段落
并且,在按下CopyWithoutSelection快捷键后,可以加入一个或两个空格来改变操作。加入一个空格为剪切,加入两个空格为选中。例如:按下【Alt+C,空格,空格,w】 为选中光标所在单词。(不过使用IDEA原生的Ctrl+W更为方便)
4. IdeaVim插件
另一个个人感觉非常好用的插件是IdeaVim,这个插件的作用是在Intellij中模拟Vim的操作方式。咋看上去,似乎是一个只有Vim的狂热玩家才会选用的插件。但事实上这个插件提供了一个非常实用功能,让它成为了我们这种普通开发者居家旅行的必备选择。这个功能是,IdeaVim允许设置一个快捷键来激活或关闭IdeaVim模拟器,而且在激活或关闭时,会自动切换Keymap。也就是说,你在输入大段代码时,可以使用自己惯用的Keymap。在阅读代码,小范围修改,或者进行一些重复性修改时,可以切换到Vim模式。甚至你可以把“关闭IdeaVim”看做“增强的Vim插入模式”。有了Vim普通模式下的各种功能,就可以省去记忆大量快捷键的苦恼,而且本来熟悉vim使用,是程序员迟早都要遇到的问题。
安装配置:
在Setting -> Plugins -> Browse repositories中查找IdeaVim插件安装即可。首次使用时,它会问你以哪个Keymap为基础创建Vim的Keymap。建议使用Default,否则一些自定义的快捷键可能会与Vim普通模式下一些按键冲突。然后在Setting -> Keymap中查找Vim Emulator,设定激活/关闭IdeaVim模拟器的快捷键,我设定为Ctrl+;(分号)。注意你需要在你惯用Keymap和名为Vim的Keymap上分别作同样的设定(否则进入了Vim模拟器就退不出去,或者退出去了就进不回来)。默认Vim Emulator按键是Ctrl+Alt+V,会覆盖掉很常用的Extract Local Variable(抽取局部变量)快捷键,因此强烈建议重设。另外,个人感觉AceJump比Vim常用的定位跳转(f/F, /查找等)好用,建议设定其在Vim Keymap中的快捷键。
不熟悉Vim的朋友可在 http://sourceforge.net/projects/vimcdoc/files/pdf-manual/1.8.0/ 找到中文文档(对应Vim版本7.3)。下面随手列一些在IDEA下常用且有用的操作(也就是IDEA本身做起来不方便的),这些操作均在Vim普通模式下发起,注意大小敏感,大写的字母可以按shift+字母输入(不知道什么是普通模式的朋友请看Vim文档):
1. 在普通模式下输入 :s/正则表达式/替换文本/g 可以在当前行范围内查找替换。(在正常的IDEA中需要选中当前行后在当前选区查找替换)
2. 在普通模式下输入 小数点 将在当前光标位置重复上一次修改操作。例如你在某一行进行了上述的查找替换,如果立即需要在另一行做同样操作,把光标移动到该行按小数点即可。
3. yyp 复制当前行。 yy10p 复制当前行10次
4. u 撤销修改 / Ctrl+R 重做修改
5. q加任何单个数字或字母,录制后续操作,记录到名为该数字或字母的宏(Macro)中。在录制状态下按q结束录制。@加某个已录制的宏名(单个数字或字母),回放宏。录制的宏只要不被覆盖,会自动保存。重启IDEA后仍然有效。(在正常的IDEA中使用宏需要进行菜单操作,不甚方便)
6. daw 删除一个单词,d$删除至行尾,d0删除至行首(包括缩进),d^删除至行首(保留缩进),dd删除当前行。删除后按p可以复制删除内容。
7. J 直接把下一行连接到本行末尾,去除缩进
8. % 跳到匹配的括号
9. 10ib<ESC> 插入10个b。(数字)i/a/o/O(字符串)<ESC> 可插入n个重复字符串,i在光标前插入,a在光标后插入,o在下一行插入,O在上一行插入。注意在IDEA默认情况下输入“i字符”后会弹出自动补全菜单,需要多按一下ESC取消掉补全菜单。
10. 在一个数字上按ctrl+a,可将该数字加1. 按ctrl+x可将数字减1. 按(数字)ctrl+a,可将光标数字加上输入的数字。
11. ~ - 将光标下的字母改变大小写。 g~aw - 改变当前单词的大小写。gU<空格> - 当前字母改大写。gu<空格> - 当前字母改小写。 gUaw - 当前单词改大写。 guaw - 当前单词改小写。 在字符串前面的引号上 gUf" - 字符串改大写。
12. 行号G - 直接移动到某行。(使用IDEA的Ctrl+G会弹出对话框,且移动到的那行会自动居中,颇为眼花)
13. H - 光标移动到屏幕第一行。 L - 光标移动到屏幕最后一行。 M - 光标移动到屏幕中间。 zz - 光标所在行居中。
当然这里只是列出一些简单的常用操作。Vim模拟器的玩法远远不止上述这些,有兴趣但还不熟悉Vim的朋友阅读文档之余也可以看看《Pratical VIM》这本书 http://www.itpub.net/forum.php?mod=viewthread&tid=1734891
5. Shortcut Translator插件
从其他IDE转到Intellij时学习快捷键的插件。安装后,按Ctrl+Shift+K调出快捷键翻译对话框,选定你惯用的IDE keymap和需要学习的keymap,按下惯用keymap的快捷键,即可看到学习keymap上的对应快捷键。
eclipse的ctrl+o 对应 IDEA default keymap的ctrl+F12
夜深,暂时先写这些,后面想起来再补上