一般来说键盘用的越多鼠标用的越少,那么写起代码来效率就越高;常见的快捷键想必大家都已经掌握,接下来我就分享一些你可能不知道的但确非常实用的快捷键。
下文所有快捷键基于如下keymap
Windows: Default
Linux: Default
OSX: Mac OSX 10.5+
自动补全的时候是Enter还是Tab?
在使用自动补全的时候
Enter
和
Tab
的行为还是有一些细微的区别的:
- 使用
Enter
会补全你选择的语句 - 使用
Tab
的话,会替换掉你之前在这里的内容(删除后面的语句直到遇到点号,逗号,分号)
这种情况我们还是会经常遇到的,比如要替换一个资源的ID(R.id.a_xxx_xxx),想必大多数人都是先选择a.xxx_xxx
删除,然后输入新的内容,或者相反;其实这时候,用Tab
才是最优雅的方式。
快捷键:(在补全的时候)Enter/Tab
返回编辑器窗口
正在写代码的时候,很多操作会让焦点脱离编辑器;比如 Find Usage, Logcat, 切换到项目结构视图,类型继承树等;如果视图切换了如何快速切回编辑器继续写代码呢?简单的鼠标点一下编辑器就可以了,但其实还有两种选择:
Esc
: 让编辑器窗口获取焦点,这时候就可以输入代码了Shift + Esc
: 这个会让编辑器获取焦点,并且顺手帮你把刚刚打开的窗口关闭了。
个人喜欢第二种;Find Usage完毕了,Shift + Esc
, 优雅~
Esc
: 返回编辑器Shift + Esc
: 返回编辑器并关闭当前窗口
返回上次打开的工具窗口
接上面那个功能,如果你
Shift + Esc
写了一会儿代码,发现又需要打开刚刚的窗口怎么办?这种场景通常发生在
Logcat这个Tol Window上,看完了日志,写代码,写完代码看日志;如何快速切换?
快捷键:F12
快捷打开窗口
有木有发现有的窗口上面有个数字?这样的窗口(工具窗)我们可以快捷打开!
- Mac:
Cmd + 数字
- windows/Linux:
Alt + 数字
任意窗口切换
上面的切换还是无法满足你的要求?记得Mac的
Cmd + Tab
,Windows的
Alt/Win + Tab
吗?Android Studio也有这个类似的功能,可以让你切换到任意窗口!
在这个切换窗口打开的时候,你可以直接按数字切换到对应的工具窗口,或者输入字母搜索右边的编辑器窗口,如果你需要关闭某个窗口,在上面按BackSpace
即可。
快捷键:Ctrl + Tab
隐藏所有窗口
好了学了那么多打开窗口的技能,如果你想关闭那些乱七八糟的窗口,安安静静写代码应该怎么办?
- Mac:
CMD + Shift + F12
- windows/Linux:
Ctrl + shift + F12
如果需要恢复所有窗口,再按一次这个快捷键即可。
参数提示
这个功能估计很多人知道了,但是还是提一下。在自动补全以后,如果某个方法参数超级长,你不知道参数是什么怎么办?可以试试这个。
- Mac:
CMD + P
- win/Linux:
Ctrl + P
自动生成变量
作为一门静态类型语言,Java是有一定的类型推导能力的;那么你是否经常书写:
1 2 | String testStr = "testStr"; List<String> testStrings = new ArrayList<String>(); |
其实大可不必写那些恼火的类型声明的,一看就知道testStr, testStrings
就知道是什么类型,再这么干不就是废话么!好在IDEA给了我们这个能力。尝试一下这个快捷键吧,会给你惊喜。
- Mac:
Cmd + Alt + V
- Win/Linux:
Ctrl + Alt + V
有的童鞋可能会问了:我使用ArrayList, HashMap
的时候,习惯类型声明为List,Map
等接口,这个自动生成的类型声明还是具体的实现啊,怎么办?这一点IDE已经帮你想到了,试试shift + tab
,他会给你一个可以选择的类型列表~
自动提取参数
有时候你正在写一个方法的时候发现。哎哟,这个变量最好是当作参数传递进来啊;要做成这么一件事,你必须把这个方法内部所有使用这个局部变量的地方替换,把所有调用这个函数的地方添加参数,繁琐至极!好了有了这个你可以随便玩了:
- Mac:
Cmd + Alt + P
- Win/Linux:
Ctrl + Alt + P
当然,如果你想保留原来的方法,只是搞一个参数不同的方法(重载)出来,可以在弹出的那个对话框里面打勾。
自动提取方法
写代码的时候是否会发现不知不觉的这个方法已经太长了,适合分解然后提取出一个个子方法;或者是重构的时候看到一个一两千的函数,你是不是头都大了?一般情况下,我们都是把要提取的代码copy出来,然后写一个方法(还要什么该死的方法签名)然后把这段代码复制进来;其实这个过程是机械的,完全可以由IDE完成:
- Mac:
Cmd + Alt + M
- Win/Linux:
Ctrl + Alt + M
如果想改变方法的签名,在对话框里面选择你需要的就可以了~
上面提到了三个快捷键其实是比较类似的,如何记忆呢?
- 首先组合键都是
Cmd/Ctrl + Alt
- 然后提取变量Variable=V,参数Parameters=P,方法Method=M
内联变量/参数/方法
好了学会了上面那几个快捷键,万一玩high了,比如提取了太多的方法,想“弄回去”,该怎么办呢?这个操作叫他Inline..
:
- Mac:
Cmd + Alt + N
- Win/Linux:
Ctrl + Alt + N
上面那个图只是参考,其实不仅可以作用于变量,还可以是方法/参数,个人觉得方法inline比较有用。
万能重构键
静态类型语言重构起来相对容易的,但是通常修改一个地方会牵扯到很多别的地方,我们只有一处一处找到这些编译错误然后手动修复。其实有好多工作是可以自动完成的,比如删除某个方法;先确认有没有人调用(Alt + F7),没有的话把方法体删了,有的话去看看调用的地方再决定怎么办。
但是重构的操作实在是太多了!我们没有办法也没有必要一个个记住,知道这个快捷键即可,我叫他万能重构键:
- Mac :
Ctrl + T
- Win/Linux:
Ctrl + Alt + Shift + T
在Win/Linux上可以考虑把这个快捷键改一下键,一下按四个键臣妾很难做到啊。。
这个重构菜单每一个功能都可以自己去尝试一下,使用之后不好用你来打我。
重命名
好了介绍了那么多貌似很高端的玩意,来个大部分人都知道的吧。有时候你发现有个变量名字取得有问题,或者没文化的队友/自己单词拼错了咋办?需要把所有用到这个变量的地方重新命名,小case!
快捷键:shift + F6
有没有这样的场景:你在Android Studio打开了一个图片文件(或者别的文件),想在资源浏览器里面查看这图片;在Eclipse里面我想大部分的人是Alt + Enter
进入文件属性复制地址,然后在系统资源管理器里面打开;或者装一个EasyExplore插件。在Android Studio里面,这是内建支持的!而且还不止如此!比如你想看看某个文件在包的哪个目录,通常是不是点击Project View上面的那个小圆坐标;用这个快捷键鼠标就能搞定。
快捷键: Alt + F1
弹出的菜单有一系列的选项;按对应的数字就可以选择;其他的菜单有什么功能可以自己尝试一下。
拓展选择
这个功能应该很多人都知道;但还是说明一下,因为跟下面两个功能跟这个结合起来才有威力。这个功能太强大了,自己去按几遍就能想到很多使用场景了;我相信有了这个功能,你使用鼠标的机会会少很多。
- Mac:
Alt + up/down
- Win/Linux:
ctrl + w / ctrl + shift + w
Surround With..
如果你想把一段代码使用if
语句包起来;又或者使用try
包围一段可能有运行时异常的代码,你会怎么干?
首先用光标定位到代码块开头,写上 try {
然后,光标代码块末尾加上} catch (XXXRuntimeException e) {// todo}
?可以试试这个快捷键。
- Mac:
cmd + alt + t
- Win/Linux:
ctrl + alt + t
可以使用上面的拓展选择选择你需要的代码块,然后使用这个功能Surround With;如果你什么都不选择的话,那么默认选择的是光标所在行。
Unwrap/Remove
这个功能跟上面提到的是一对,有了Surround With自然就有Unsurround With;使用情况没有上面那个那么多,但是好歹一对,一起介绍吧。
高亮某东西
有时候看代码的时候,看到某个变量想知道哪里使用了它;你还在用肉眼查找吗?或者你杀鸡用牛刀Find Usgae
?其实你的需求就是把这个变量全部给我打个标签,我想直观的知道它在哪。
- Mac:
cmd + shift + F7
- Win/Linux:
ctrl + shift + F7
这个键功能远不止这个!
- 如果你高亮
return
或者throw
,那么会把这个方法所有的返回点高亮出来! - 高亮某个类的
extends
或者implements
会把这个类Override的方法高亮出来 - 高亮
import
会把使用的地方显示出来
如果不想要高亮了,按下Esc就行。
显示方法调用树
在看源码的时候,你还是使用alt + F7
和ctrl + B
在各个类之间来回穿梭吗?其实好多时候你就是想知道这个调用结构是怎么样的而已;谁是怎么一步一步滴调用谁的;这个快捷键会给你一个调用树。有了这个大菊观,继续探讨就很容易了。
快捷键: ctrl + alt + h
万能快捷键
记得之前提到过一个万能重构键, 有关重构的一切操作都可通过它完成。那么Android Studio这么快捷键,这么多功能,臣妾怎么可能都记住!要是有万能钥匙就好了!That’s it!
使用这个快捷键,你想到什么功能,打开它搜索就可以了;打个比方,我想看看Java的for each
循环和普通的for
循环底层是不是同一个实现;那么我就需要看虚拟机字节码了;我记得有这个功能但是不知道快捷键是啥;OK,Cmd + shift + A
,输入bytecode
: