/EclipseKey

some shotcut keys add-ins for Visual Studio like Eclipse

Primary LanguageC#

Visual Studio EclipseKey 插件说明

意图

使用过 Eclipse 的开发人员都知道,在 Eclipse 中有几个非常常用的快捷键, 比如 ALT-UP DOWN 代码块上下移动,智能分号 等等。这些快捷键在开发过程中使用频度 特别的高,可以大量减少使用鼠标操作的次数,提高代码输入的效率。

但是这些功能在 VS 中一直没有提供,即使在 RESHARP CODERUSH 等重量级别的开发插件中 也没有提供这样的功能,因此开发 EclipseKey 插件的需求就这样产生了。

安装

安装 EclipseKey.vsix 到对应的 VS 版本即可。

重启 VisualStudio 后插件自动被加载,可以从 工具|外接程序管理器 中看到加载的插件程序。

代码块整体编辑功能

EclipseKey 主要提供了以下功能:

  • CTRL-D :删除选择的代码块(如果选择的代码块不是整行,则扩展选择区为整行)
  • ALT-UP :将选择的代码块上移一行
  • ALT-DOWN :将选择的代码块下移一行
  • CTRL-ALT-UP :将选择的代码块拷贝复制到下方
  • CTRL-ALT-DOWN :将选择代码块拷贝复制到上方
  • CTRL-/ :注释/反注释选择的代码块。能根据所选择代码块当前的状况决定是注释还是要反注释。 如果代码块的每一行都是行注释的,则反注释之,否则注释每一行。

在以上功能中,“选择的代码块”并非等同于编辑器中当前的选择区域:

  • 如果选择区域的开始点不在一行的开头,则扩展到这一行的开头
  • 如果选择区域的结束点不在一行的结尾(输入光标不在下一行的第一个字符),则扩展到这一行的结尾
  • 如果没有任何选择区域,则扩展到输入光标所在的行

也就是说“选择的代码块”总是自动扩展到选择区域所对应的完整的若干行代码,从而不会只对半行代码进行操作。

成对输入括号

在代码中经常要输入一些需要成对出现的字符,例如左右各种括号,引号等,良好的代码录入习惯应该是在输入时 成对的输入两边的括号或引号后,再输入中间的内容,这样括号等的配对就不会乱,但这样的输入方式通常 需要在输入完后面的括号或引号后,用左箭头将输入光标移动到括号之间,效率比较低。

成对输入括号功能在我们输入左括号时,自动添加相应的右括号并将输入光标定位在两个括号之间, 因而输入的过程中双手不需要离开键盘主区域去寻找箭头按键,以提高输入效率。

成对输入目前支持:

  • (: (|)
  • [: [|]
  • ': '|'
  • ": "|"

智能分号

在 CSharp 程序中,分号是输入次数非常多的一个键,而且通常在一行的最后, 但是熟练的程序员一般输入程序一般不会一个字符一个字符顺序输入,而是成对的输入括号, 因而通常会出现一行代码输入完以后,输入光标在一行的中间的情况, 这时候通常需要按一下 END 键将输入光比移动到一行的最后然后再输入分号, 不但需要多敲一个键,更主要的是 END 键的位置通常很难盲打,需要到键盘上去找, 极大的影响录入的效率。

智能分号功能即对分号键进行智能处理:

  • 如果在一行的中间位置输入分号,则分号会被添加到这一行的最后,并且输入光标移动到分号之后
  • 如果这一行的最后已经有一个分号了,则不会重复的添加分号,只是将输入光标移动到分号之后
  • 如果需要在光标所在位置输入一个分号,也很简单,连续按两次分号键, (也就是在输入第一个分号,输入光标移动到行末之后再输入一个分号) 则取消第一个智能分号,在原来光标的位置插入一个分号。

例如要录入 Console.WriteLine("Hello world;"); 这样一行代码,代码录入的过程大致为:(|表示光标位置)

Console.WriteLine|                    -- 
Console.WriteLine(|)                  -- 左右括号成对输入
Console.WriteLine("|")                -- 输入成对的引号
Console.WriteLine("Hello world|")     -- 在引号内输入字符串内容
Console.WriteLine("Hello world");|    -- 字符串结尾的分号,按下分号键以后分号智能跳到行未去了,并没有插入到字符串中
Console.WriteLine("Hello world;|")    -- 再按一下分号键,分号又回到了字符串中,行尾的分号不见了
Console.WriteLine("Hello world;");|   -- 结束整行代码,按一下分号键,智能跳到行尾添加了一个分号

快速键入

在 CSharp 代码中,有一些经常输入的符号按键不是很顺畅,例如 != =>

  • 惊叹号的位置在左上角,而等号位置在右上角,惊叹号还需要和 shift 键组合,导致输入 != 很麻烦。相比之下,不论是输入 1= 还是 <> 都要顺畅的多。
  • 同样输入 => 时也需要 shift 组合键,因此输入 === 或者 >>> 都要顺畅很多。
  • 这些自动的按键替换,可以在 EclipseKey.dll.config 配置文件中根据自己的需要或爱好修改。

Surround With

在当前有选择区域的时候,如果输入以下字符,将会触发 Surround 模板,将选择的代码块用相应模板包围起来。 以下说明中 ... 表示选择的代码块, | 表示应用模板后输入光标所在位置。 请注意为避免输入时不小心触发模板,大部分模板只在选择区是整行的时候触发。(括号、转换模板除外)

  • i : if (|) { ... }
  • u : using (|) { ... }
  • f : for (|) { ... }
  • w : while (|) { ... }
  • d : do { ... } while (|)
  • t : try { ... }|
  • l : lock (|) { ... }
  • { : 两端添加花括号
  • r : #region ... #endregion
  • ? : ((|) ... ) 强制类型转换
  • ( : 两端添加括号

模板可以在 EclipseKey.dll.config 文件中配置,可建立自己的模板或修改按键。

已知问题

  • 仅在简体中文版下测试通过,是否支持英文版不可知。

Version History

1.0.170317

  • 初始版本,包括了基本的 整块操作、智能分号、快速键入、SurroundWith 模板功能

1.0.170325

  • [FIX] 修正了当整块操作包含文档最后一行没有换行符时,会导致错误的问题
  • [CHANGE] 修改了快速键入的逻辑,允许配置文件类型匹配,指定的模板仅在对应的文件类型中有效。
  • [FEATURE] 新增了 PasetImage 功能,可绑定快捷键将剪贴板的图片或图片文件粘贴为 MarkDown 或 HTML 图片链接。