分享我的 Android Studio Emacs 风格快捷键

[图片上传失败…(image-99d8ae-1533279659132)]

Emacs 风格的快捷键通过前缀键来扩展更多打字区的快捷键,尽量把快捷键控制在打字键区,显著减少编码过程手腕的移动,是个经得起考验的快捷键方案(非 emacs 用户可能深痛恶觉)。

这套快捷键在 Emacs keymaps 的基础上进行自定义,首先减少对功能键区的使用,一来容易与系统快捷键冲突,二来手指移动的幅度过大难定位不容形成肌肉记忆,所以只保留编译运行相关的快捷键。至于编辑键区则更次,手腕必须得移动,眼睛也得跟着辅助定位,只保留少部分不常用的默认快捷键。数字键区最糟,手腕移动幅度最大,再说我的 87 键盘都没有小键盘-_-,直接弃用。至于鼠标,那更是万恶之源,整个手臂都得移动,还要眼睛配合才能用鼠标完成一次操作,写代码的过程大多是用鼠标辅助点击几次,然后又回到打字区继续敲,这样来回一次切换成本太高。何况程序员经常用鼠标点点点?多没 B 格啊。虽说如此,不过想要完全不用鼠标还是不太容易,只能说一个命令通过鼠标打开层层菜单来执行超过一次,第二次就应该用 Find Action 来执行,如果一天超过三次那就应该给它设个快捷键并记住。

Android Studio 相比 Eclipse 内置的 Emacs keymaps 强大了许多,不过 Eclipse 有 Emacs+, Android Studio 却没有这方面的插件。所有 Android Studio 相比 Emacs 多了一些不足,比如:

  1. Android Studio 只支持一个前缀键(prefix key),所以 spacemacs 那样的助记法快捷键 Android Studio 难以实现
  2. Android Studio 中 Esc 不能作为修饰键使用
  3. IntelliJ 可以为 Escape 命令配置快捷键,但不少 UI 还是硬编码为键盘的 Esc 键。所以为了退出浮窗,经常要 C-gEsc 交替使用
  4. 不过窗口的操作逻辑不一致,有些 UI 可以用移动光标快捷键,有些只能用方向键

一些约定先说明,特别是非 Emacs 党:

最终使用的前缀键有下面三个:

  1. C-x
  2. Esc
  3. M-g

首先,最基本又最重要的键肯定就是 Find Action,简直就是 Emacs 中的 Run Command,必须绑定为 M-x。别的快捷键记不住不要紧,只要记住这个还是能做到无鼠标操作,特别是还附带快捷键提示,如果有的话。不过还是得对命令的关键字有点概念,表格中的关键字项就是表示通过该关键字在 Find Action 或者 Keymaps 设置搜索到相应功能;自定义有 * 表示快捷键是我自定义的,非 Emacs Keymaps 的默认配置。

快捷键功能关键字自定义
M-x执行命令find Action*
C-g取消escape
C-M-s打开设置settings

光标移动(Move cursor)

光标移动类的快捷键,这里指的是在单一文本的内的光标移动,又包括语法无关的移动和语法相关的移动,语法无关的移动指的就是光标的上下左右移动等等,这一块与 Emacs 基本一致。另外 C-l虽然不是移动光标,但也是放在这里。

快捷键功能关键字自定义
C-f向前移动一个字符right
C-b向后移动一个字符left
C-n向上移动一行up
C-p向下移动一行down
M-f向前移动一个单词next word
M-b向后移动一个单词previous word
C-a移动到行头line start
C-e移动到行尾line end
C-v下一页page down
M-v上一页page up
M-<移动到文本头text start
M->移动到文本尾text end
C-l将光标位置滚动到屏幕中央scroll to center
C-Pgup移动到当前页的起始处Page Top
C-PgDn移动到当前页的结束处page end

语法相关的移动:

快捷键功能关键字自定义
C-[移动到当前 Block 起始大括号处Code block start
C-]移动到当前 BLock 结束大括号处Code Block End
C-M-a移动到前一个方法previous method
C-M-e移动到后一个方法next method

Android Studio 将 M-g 作为跳转到行数,我改其作为前置键,同时作为跳转高亮错误的前置键。

快捷键功能关键字自定义
M-g g作为跳转到行数line*
M-g n下一个高亮问题next highlighted error*
M-g p上一个高亮问题next highlighted error*

与光标相关的还有文本选择,我保留 C-space 来加入选择模式,但这个快捷键也常被操作系统用来切换输入法,
在 Linux 下我把输入切换配置为 Win-space,其他系统我也建议想办法把 C-space 留给 Android Studio。

快捷键功能关键字自定义
C-space切换选择模式sticky selection
C-x, h全选select all

特别是 Android Studio 不像 emacs 可以用 C-F 等进行选择。只能用传统的 S-→。所以保留 C-space 还是有必要的,下面是例外:

快捷键功能关键字自定义
C-{选择到当前 Block 起始大括号处Code block start
C-}选择到当前 Block 结束大括号处Code block end
C-S-PgUp选择到当前页的起始处page start
C-S-PgDn选择到当前页的结束处page end
C-S-Home选择到当前文本的起始处text start
C-S-End选择到当前文本的结束处text end

导航(Navigate)

导航,在不同文件中切换。常用的导航我用一段式快捷键。一定要善用前三个,对编码效率绝对是很大的提高,起码不会让切换文件的速度脱慢你的思路。

C-M-GC-M-g 的高级版,直接从实例名跳转到其类中。

快捷键功能关键字自定义
C-M-f上一个位置forward*
C-M-b下一个位置back*
C-M-g跳转到定义处declaration
C-M-G跳转到类型type declaration*
C-M-u跳转到父类方法super method*
M-←/→左右切换标签select tab

如果对简洁有要求或者屏幕太小(比如我),可以将 Android Studio 的标签关掉,具体参考:Configuring Behavior of the Editor Tabs,那么这时 M-←/→ 就不会起作用了。

另外 M-num 都被 Android Studio 绑定到切换功能窗体,很实用但不一一罗列了,比较常用的是 M-6 打开 Android Monitor、M-7 打开 Structure,至于 Project 有更好的快捷键打开。

C-num 用于跳转书签。C-M-num 则用于设置书签,书签是全局的。

Select in… 可谓的鼠标杀手中的 MVP,多少鼠标操作就是为了在其他窗体中操作当前文件。大部分情况下它都是比 M-num 更好的选择。默认的 Alt+F1 与系统冲突,我修改为 Esc,S-i,好记,不过需要前缀键确实难为了这个命令。

快捷键功能关键字自定义
Esc,S-i在其它窗体中选择,比如在项目窗体定位当前文件select in..*
S-Esc隐藏工具窗口,配合上个命令使用更佳。Hide Active ToolWindow
C-S-Esc隐藏所有工具窗口Hide All ToolWindow*

编辑(Edit)

看快捷键说明, Android Studio 有 kill ring 的概念,比如 M-wC-wM-dM-backspace 都是操作 kill ring,但是居然没有 yank pop,所以 M-y 只能绑定为不太实用 paste from history…,话说你把 kill ring 藏到哪了?

快捷键功能关键字自定义
C-x,C-f打开文件file
C-x,b切换 Bufferswitcher
C-x,k关闭当前文件close
C-_撤销undo
M-_重做redo
C-w剪切kill selected
M-w复制save to kill ring
C-y粘帖paste
M-y粘帖历史选择paste from history
M-S-↑/↓移动当前行move line up/down
C-S-↑/↓移动当前语句/代码块move statement up/down
M-;注释当前行line comment
M-:注释块block comment*
C-=展开expand
C-M-=全部展开expand all*
C--收缩collapse
C-M--)全部收缩collapse all*

Android Studio 对分割窗格的支持,基本可以做到和 Emacs 一致,除了 C-x, 0,在 Android Studio 中它的行为与 C-x, k 一致。

快捷键功能关键字自定义
C-x, 1关闭其他窗格unsplit
C-x, 2平行分割当前窗格split
C-x, 3竖直分割当前窗格split
C-x, 0关闭当前窗格unsplit
C-x, o切换不同窗格goto next spliteer

查找(Find)

C-D 是 Dash 插件的默认快捷键,用于在 Dash/Velocity/Zeal 中搜索

快捷键功能关键字自定义
C-s文本内搜索/下一个匹配find next
C-r下一个匹配find previous
M-%替换replace
C-S全局搜索find in path*
C-R全局替换replace in path
M-S查找使用find usage
C-DDash 中搜索Search in Dash*

Android Studio 支持宏功能,默认的宏操作都没有配置快捷键,不过没有 C-u 宏的实用性大打折扣

快捷键功能关键字自定义
C-x, (开始宏录制start macro
C-x, )停止宏录制stop macro
C-x, e运行宏play last macro

编码(Code)

重构的 Extract 都被绑定为 C-M-key,本来也是不错的选择,可惜太多冲突,我改为 Esc,key,取首字母相同来助记。前缀键我在 EscC-c 间犹豫了下,显然 C-c 效率更好,但我觉得重构的话,在操作前有个停顿思考下也不是坏事。所以最终选择了 Esc

C-M 的默认功能与 C-[C-] 重叠了,所以不如绑定为显示方法的参数信息,毕竟 Android Studio 的代码补全不支持显示方法参数,所以这个功能也是很有必要的。

快捷键功能关键字自定义
M-/代码补全,按两次能显示更多选项completion
C-M-/代码补全,智能类型completion
M-enter显示建议行为,类是 quick fixshow intention actions
C-q快速文档quick document
C-I快速显示定义quick definition
C-P显示当前表达式返回类型expression type
C-M显示方法参数信息parameter info*
C-x, f格式化reformat code*
C-x, r重命名rename*
C-x, i优化 importsoptimize imports*
C-x, j插入在线模板,代码补全也支持补全模板insert live template*
C-x, g生成代码generate*
C-x, s生成包围代码surround with*
Esc, f提取为字段field*
Esc, c提取为常量constant*
Esc, m提取为方法method*
Esc, p提取为参数parameter*
Esc, v提取为变量variable*

运行(Make)

快捷键功能关键字自定义
S-F10运行当前配置run
S-F9调试当前配置debug
C-S-F9运行当前 Activityrun context configuraton
M-S-F10弹出运行选择菜单run
M-S-F9弹出调试选择菜单debug

Git

大部分 Vcs 相关的快捷键默认配置都和上面的配置冲突了,考虑到用于跳转的 M-g 前缀键只用了 3 个,我的 VCS 只用 git
一个,所以把 git 相关操作用 M-g 前缀键重新编排下。因为很少用到,可能不太合理,一些 git 的基本操作我都是都是直接在 Shell 里输入。

快捷键功能关键字自定义
M-g, +add 当前文件add to vcs*
M-g, C-ccommitcommit*
M-g, C-zrevertrevert*
M-g, C-ffetchfetch*
M-g, C-upushpush*
M-g, C-aannotateannotate*
M-g, C-ppullpull*
M-g, C-d比较文件,在历史记录窗体可直接对比compare file/show diff*
M-g, C-D弹出比较文件浮窗compare with*
M-g, C-h显示当前文件历史show history*
M-g, C-H显示当前选择区域历史show history*

鼠标(Mouse)

某些情况鼠标还是比键盘更高效

快捷键功能关键字自定义
Button2矩形选择
M-S-Button1放置多个光标

Live-plugin

live-plugin 是一个强大的插件,能给 Android Studio 提供类似 elisp 的运行环境及解析器,通过 groovy 脚本在运行时更改 IDE 的行为,所谓的 InternalReprogrammability

我将其运行当前插件的快捷键更改为 Emacs 中执行 elisp 表达式的快捷键。其他的我还没有深入使用,只是写了个脚本用来实现单词首字母大写功能,并将其绑定到 M-c,见 capitalizeWord。原理主要是registerAction 来增加自定义 action,自定义的 action 能绑定快捷键,也能通过 find action 来搜索十分方便。

快捷键功能关键字自定义
C-x, C-e运行当前插件run current plugin*
C-x, C-t测试当前插件test current plugin*
M-c单词首字母大写captilazie word*

总结

这只是我常用的或偶尔用到的快捷键的罗列,不是完整的 Android Studio 快捷键说明,还有很多 Android Studio 的基本功能没有涉及到,记下来只是为了备忘和分享。这份快捷键会持续变更,可在 douo_keymaps 查看最新的配置。

参考

Customizing IntelliJ for Emacs Compatibility

原文链接:https://dourok.info/2016/08/20/share-my-android-studio-emacs-keymaps/

    原文作者:TiouLims
    原文地址: https://www.jianshu.com/p/1c742e72ede1
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞