如何成为 IntelliJ IDEA 键盘流?

推荐个人常用的几个键盘流的plugin和技巧:

1. IdeaVim 插件

Intellj的Vim模拟是我所用过的IDE中最接近完美的了,不用实在可惜。从完全不会Vim到基本可以使用Vim键位来进行日常开发也就两三个星期的事。好处也很多,首先Vim的操作方式速度确实很快,其次可以解放出大量ctrl和复合键位来做其他用途(这一点emacs的键位模拟就做不到,还会经常和IDE本身的热键冲突),再者现在大部分主流编辑器或IDE都有Vim模拟器,使用一套键位在各种环境下都能进行常用的操作。

2. emacsIDEAs插件

不要被名字唬住了,其实这个插件跟emacs关系不大,只是实现了emacs里的AceJump功能(但个人感觉比另一个AceJump插件好用)。如果你看插件的说明的话,它还围绕AceJump实现了一些其他功能,但已经有了IdeaVim的话这些就没必要用了,只使用它的AceJump就行了。

所谓AceJump,就是你按快捷键进入AceJump模式后(默认是Ctrl+J),再按任一个字符,插件就会在屏幕中这个字符的所有出现位置都打上标签,你只要再按一下标签的字符,就能把光标移到该位置上。换言之,你要移动光标时,眼睛一直看着目标位置就行了,根本不用管光标的当前位置,非常舒服。

3. Shortcut Translator插件

如果你是从其他IDE(比如Eclipse)转过来的,可以用这个插件查询在其他IDE中某个热键所对应的IDEA热键。

4. 善用Select Word at Caret功能(Ctrl+w)

在IDEA的Keymap中有Select Word at Caret这个动作,字面意思是“选中光标所在的单词” ( 2015/07/22 更新:在14版中已改名为 Extend Selection ),默认快捷键是Ctrl+W。但事实上,这个动作的实际操作是选中更上一层的语法结构。例如,如果你在一个字符串的一个单词中,按一下Ctrl+W,会选中光标所在单词。再按一下,会选中整个字符串的内容,不包括引号。再按一下,会选中包括引号的字符串。再按一下,会选中整个表达式(如果表达式含有括号,会逐层选中)。再按一下,会选中整个语句块。再按一下,会选中整个方法。再按一下,会选中整个类。

如果没有用IdeaVim,这个功能是非常强大的(完美替代鼠标双击和shift+右键选中)。如果使用了IdeaVim的话,用Vim自带的Text Object功能就能实现大部分选择语法结构场景。但有一些Text Object在IdeaVim中没有实现,比如说选中花括号(非block)中的内容( vi{ ),或者选中xml标签之间的内容 ( vit )。这时用Ctrl+w也很方便。

5. 善用Postfix Completion

简单来说就是你可以先输入语句的主体(例如要赋值的表达式,或者要循环的集合变量),然后输入用小数点分隔的模板名称后缀,IDE自动帮你智能展开。

比如说,你想写

for (User user:users) { ... }

只需要输入 users.for 再按tab就行了

你想写

Date birthday = user.getBirthday()

只需要输入 user.getBirthday().var 再按tab就行了。IDEA会自动推断赋值类型和生成默认的变量名称。


===============================================================================================


仅针对Mac用户,补充一条增加快捷键的方案,全系统有效。个人觉得效率非常高。

这套方案的好处是:

1. 增加了490多个与常用快捷键不冲突的快捷键组合(如果需要可以自己增加至700个),供重定义。换而言之,你不需要改动本来的快捷键布局,同事来你的机器上协助编程时不会找不着北。

2. 绝大部分新增的快捷键都在基键上,且减少了对功能键的需要,极大提高小尾指的幸福感。

3. 绝大部分快捷键组合带有方向和轻中重的含义,便于记忆。

4. 可针对不同应用定义不同的方案。

唯一坏处是,Keyboard Maestro这个软件要36美刀,不过在Mac下玩键盘流我个人觉得这必不可少,至少目前没有找到好的替代品。


以下是一些我自己在Intellij中的快捷组合设定,供参考

1. 全局定义 (在Intellij外也才有此设定)


(dio)或ctrl-j : 光标下移 (括号括起的按键组合指先按下第一个键,然后后两个键同时按下或在200微秒内先后按下。像这里就是先按下d然后io齐按。)
(eio)或ctrl-k:光标上移
(fio):光标右移

(sio):光标左移


此外,引用答案中的配置文件本来就配置了以下解放小尾指的全局配置:


[jk]: ESC (方括号括起的按键组合指同时按下括号内的键,这里指jk一起按下就是ESC)
[jl]:回车
[jh]:delete (Mac里面相当于Backspace)
[jf]:TAB

2. (df+动作键),(ds+动作键),(fd+动作键) 组合为输入常用关键字 (是的我就是这么懒,按头几个字母再按一下TAB都觉得烦。。。)


(dfj):private
(dfk):protected
(dfl):public
(dfu):void
(dfi):String
(dfo):Boolean
(dfh):final
(dfn):static
(dfm):@Inject
(dsj):return
(dsk):null
(dsl):.equals(
  (dsu): .stream()
  (dsi): .collect(Collectors.toList())
  (dso): .collect(ArrayList::new, ArrayList::add, ArrayList::addAll)
  (dsh): throw new
  (dsm): this

3. 左手方向键 + 右手双动作齐按 (前面已定义方向加io齐按为全局方向,这里不再重复定义)


(dkl): 缩小选区到下一级语法结构
(ekl): 扩大选区到上一级语法结构 (就是前面说的Ctrl+w)
(dui): 光标移动至语法块结尾
(eui): 光标移动至语法块开头
(fjk): 光标移动至行尾
(sjk): 光标移动至行首
(skl): 返回前一历史位置
(fkl): 前进到下一历史位置

3. 两右手相反方向加一动作


(sfj): Code complete (相当于option+/)
(fsj): Code complete反向滚动
(den): 移入上面的代码窗口 (当使用了split分隔出多个代码窗口时)
(edn): 移入下面的代码窗口
(sfn): 移入右面的代码窗口
(fsn): 移入左面的代码窗口

(sfu): "0p (vim插件下的复制)
(sfi): viw"0p (vim插件下用复制内容替换当前光标所在单词)

(deo): [Esc]gUiwgi (vim插件下,在插入模式中把光标所在单词改大写并在原来位置继续插入)

4. sd+动作 代码重构相关


(sdj) : Quick fix (映射到原来的option+enter)
(sdk) : Code generate (映射到原来的option+insert)
(sdl): 弹出重构菜单 (映射到原来的shift+ctrl+option+T)

5. se + 动作 打开代码相关


(sej): 打开类 (相当于原来的ctrl+n)
(sek): 打开文件 (相当于原来的shift+ctrl+n)
(sel): 打开最后编辑过的文件列表
(seh): 打开动作输入框(相当于原来的ctrl+shift+A)
(seh): 打开上一个关闭的文件

(时间关系先列这些,理解思路就好,真有人有兴趣和需要的话再列出剩下的吧)

你可能感兴趣的:(如何成为 IntelliJ IDEA 键盘流?)