目录
0. 前言
首先要修正上一篇的问题,Unreal GenProj
这个插件已经被Rider实现了,安装之后再使用就会报错,所以这个插件要卸载掉,那么生成VS文件如何操作呢?就是Rider上面的一个刷新按钮,产生新文件后点击刷新,就会自动生成VS文件,其实是调用的UE功能,只是更快捷方便了,如下图所示:
另外找到了一篇Rider 使用技巧 总结,还要一篇Rider官方和VS的对比:JetBrains Rider vs Visual Studio,知乎的大佬Tanzq
说Rider可以独立运行,笔者这边的确在卸载VS后出问题了,无法Build编译,重新安装VS的一些基础模块后才恢复正常,个人认为Rider还是依赖VS的,至少是依赖那些基础工具链的,希望可以独立出来.
另外发现了Rider官方账号:JetBrains中国官方,上面有一些教程和新闻.
至于官方文档:JetBrains Rider Documents,和编辑器一样不支持中文,希望官方尽早完成对中文的支持吧.
1. 快捷键配置
Rider的快捷键设置有两个入口,一是上一篇中的配置按钮,二是在进入编辑器后,右上角有个设置按钮,点击之后可以进行配置
在下拉菜单中可以找到Keymap,如下图所示:
熟悉快捷键后,编辑器的所有操作都可以通过快捷键进行设置,所以提升效率的关键在于快捷键.下图所示的是右上角区域的关键按钮:
点击右上角下拉菜单的Keymap后会弹出一个设置窗口,如下图所示:
这个菜单中可以选择一套自己熟悉的快捷键,笔者选择的是VS,因为这个IDE用的时间非常久,对于VS的快捷键很熟悉,大家可以根据自己的情况进行预置.当然,更多还是需要自己配置,这里选择0 配置快捷键,打开配置窗口,如下图所示:
1.1 书签快捷键
这个快捷键是怎么好记就怎么配置,这里举个例子,大家如果有经常添加书签的习惯,就会使用添加书签的快捷键.顺便说一下,添加书签有助于快速找到自己的目标代码,所以推荐在关键代码的地方使用书签.
上图是笔者自己的配置,非常好记忆:
- 切换书签,触发的时候可以快速添加和删除书签,这里使用Ctrl+B,Ctrl+M,这个组合就是Book Mark的首字母,所以很容易记忆;
- 要给已经添加的书签再弄一个快捷键,就需要这个,Ctrl+B,N,这个是Bookmark Note的缩写,可以打开一个设置书签快捷键的小窗口;
- 快速找到上一个书签,Ctrl+B,P,这个B就是Bookmark的缩写,P是Previous的首字母,这个也很好记忆;
- 这个可能和第二条有点混淆,建议修改一下第二条Ctrl+B,Ctrl+N,然后这一个使用Ctrl+B,N,这里的N代表Next.
其他的,书签的工具窗口是Alt+2,这个很好记忆,所以没有变更.大家可以根据自己的习惯来设置,这个纯属便捷性操作,怎么方便就怎么设置,熟练之后操作就特别便利.
上图所示的是一些操作,如果要设置新的快捷键,最好移除原来的,避免过多的快捷键导致冲突.最好使用1+1的组合触发方式,因为系统上已经有很多快捷键了,一键触发的方式大多数都被占用了,根据实际情况来设置.
纠错,上图中的第三条
Add Abbreviation
不是废除,而是添加缩写,具体还没有使用过,大家可以尝试下.
其他的快捷键根据个人需求修改,这里就不多写自己的快捷键方式了,之后的教程中的所有快捷键都是个人便捷性的方式,大家可以使用,也可以自行设置,有了这个前提,后文就好写了,不再给不熟悉快捷键的朋友造成困惑.
2. Rider编辑器基础
下面开始正文,这一篇教程主要是讲Editor Essentials,这个原文可以在Rider中找到,只不过是英文版本的,这里把这个教程重述一遍,一方面是复习,另一方面是给大家做个预习,大家看了之后再去操作就更顺畅了.
如上图所示,可以在打开Rider后的首页找到这个教程,大家如果没有语言障碍的话可以直接去Rider学习,这一篇也是试验性质的,看看大家对Rider中文教程的需求高不高,点赞/收藏破百再写下一篇.
打开教程后,出现下图的界面,左侧是教程使用的项目,右侧是教程提示,需要按照提示进行实操.
这里翻译一下右侧的教程简介,当然,希望Rider尽快出中文支持.
2.1 教程简介
Rider编辑器基础
欢迎来到第一个互动教程!这个教程会帮助你入门最重要的Rider代码编辑器的特色功能,在开始教程前请先阅读下面这些要点.
重要提示:
- 必须在电脑上安装
.NET6.0
版本; - 如果你正在使用IdeaVim或者其他修改键盘输入的插件,请禁用;
- 教程使用自带的案例项目,不会影响你的配置;
- 教程是交互式的:包含一系列的操作,这些操作是需要我们执行的,你的进度会被自动检查.如果想要退出教程,关闭教程项目即可.
- 请遵循教程的操作提示,避免提示之外的其他操作,这可能会影响进度检查.
这个教程还是做得比较好的,可以看出官方很用心,点击Start按钮就可以正式开始了.
2.2 Alt + Enter
这是目前Rider最重要的快捷键了,几乎可以说是万金油.
Rider会根据输入光标所在的位置智能的给出一些可用操作,比如快速修复,补全,跳转等等,根据代码的实际情况就会有适用于这个快捷键的触发动作.笔者怀疑以后会有深度学习的AI加入进来,这个AI就像钢铁侠里面的AI助理贾维斯,就是后来得到智慧宝石变成超级英雄的Vision幻视,后来又被灭霸强行剥夺智慧宝石而扑街了.
跑题了,总之AI协助编程应该是IDE的一个发展方向,现目前使用的几乎全是索引来提升效率.
Rider总是会在可以通过Alt+Enter的快捷键方式触发操作的时候给出提示:
- 代码元素下面的下划线;
- 在编辑器左侧间隔区域的图标提示;
- 黄色灯泡:修复一个警告;
- 红色灯泡:修复一个错误;
- 锤子:上下文动作;
- 更多的后文讲.
点击Next下一步.
2.2 应用快速修复
注意,Rider所有的操作都需输入光标在目标代码元素区域闪动,这样才能定位目标代码,这个在后文中作为默认前提,所以这里前置讲一下,后文就不赘述了.
这个UnusedClass
类没有在我们的代码中被使用过,我们来移除它:
- 输入光标必须在
UnusedClass
代码元素上,注意左侧间隔中有一个黄色灯泡的提示; - 按下Alt + Enter的快捷键;
- 选择
Remove unused class
(移除无用类)选项,点击Next
(下一步)在打开的窗口来应用修复.
具体的操作大家按照这个提示去做就行,系统检查我们操作了才可以进行下一步教程.
记住,上面图中这些操作不要使用鼠标,全部用键盘,这样才可以确保操作被正确检查.
2.3 应用上下文动作
上一步操作无误后会自动跳转到这一步,如果误操作了,可以通过Ctrl + Z来回退,然后重新操作.
上下文动作是一样的,如果有可以执行的上下文动作,Rider将用下划线标记代码,左侧的间隔中有一个锤子图标提示.
举个例子,我们想要对ReturnMessage
方法的参数msg
做null
检查:
- 输入光标(后文会重复将这个前置条件,全部省略成"光标"),注意锤子图标;
- 按下Alt + Enter的快捷键;
- 选择
Check expression for null
,这个可以避免空值导致的致命错误崩溃.
正确操作后,Rider会自动添加对参数msg
的null
检查代码,如下图所示:
这个是不是非常便捷,说白了可以帮我们写一部分代码,提升编程效率.当然,这部分代码都是非常简单的重复操作.
2.4 查找并应用操作
大家的教程可能和笔者的不一致,没有关系,这个教程就是做个引导,笔者尽量抽时间来补充.
你还可以使用Alt + Enter来运行Rider命令.例如,我们可以使用它来重命名一个类:
- 输入光标;
- 按下Alt + Enter的快捷键;
- 直接输入"rename"重命名;
- 在列表中选择
Rename...
; - 把这个类重命名为
Renamed
.
这个就是在按下Alt + Enter的快捷键后可以进行命令动作进行搜索,当然,如果记得快捷键会更快速,例如重命名,笔者的快捷键是Ctrl+R和Ctrl+R的组合按键,这样比这步操作更高效,大家可以在Keymap中搜索Rename来进行快捷键配置.
今日份的Alt + Enter
快捷键教学就愉快的结束了,大家只需记住这个万金油快捷键就可以在Rider中横着走了,当然,越多的快捷键可以带来更多的效率提升.点击下一步可以进入下一个主题.
3.预设在线模板
Rider里面预置了很多模板,利用模板可以避免很多重复性的机械代码,非常便利.
3.1 创建类
在线模板是经常需要用到的代码片段,可以提供快速插入代码,包括:表达式,完整构造,整个类或函数方法.
要插入一个模板,首先输入一个缩写,然后将其扩展成完整的代码.一起来利用在线模板快速创建一个新类吧:
- 输入光标应该在空白的地方,足够可以创建一个新类的空间;
- 输入"class" 类;
- 在列表聚焦在
class
上后,按下Tab
或Enter
按键; - 输入
MyCircle
作为类名,注意在MyCircle
外围有个边框,表明是当前模板的参数; - 按下Tab键来完成类创建.
3.2 创建属性
在完成类的创建后,我们一起来为这个类添加属性.由于这个类代表一个圆,它应该有int
类型的Radius
半径属性,当然大家可能更倾向使用float
或double
来作为半径属性的类型,总之这只是个编辑器教程,而不是编程教学.
- 输入光标必须要要在这个类里面;
- 开始输入"prop"
- 在列表聚焦在
prop
上后,按下Tab或Enter.
下面需要为属性命名和指定类型:
我们可以发现prop
模板有两个可编辑的参数,即属性的类型和名称.红色边框的表明当前可编辑的参数.我们的Radius
半径属性将使用int
类型:
- 开始输入"int"
- 在列表聚焦到
int
上后,按Tab或Enter; - 然后在输入光标移动到下一个参数上后按Tab键;
- 输入"Radius"
- 按Tab或Enter键.
3.2.1 创建圆心属性
在完成半径属性的编写后,在添加一个CenterCoordinates
类型属性来作为圆心的坐标.
- 输入光标必须在类里面;
- 输入"prop"
- 在列表聚焦在
prop
上后,按Tab或Enter; - Rider支持驼峰命名规则,这个编程的老师应该会讲,简单的输入"ccoo"就有提示;
- 在提示的列表中选择
CenterCoordinates
类型,按Tab或Enter; - 将输入按键移动到下一个属性模板参数,按Tab;
- 默认选择提示列表中的
CenterCoordinates
命名; - 按Tab或Enter完成命名.
3.3 创建构造函数
我们的MyCircle
类还缺一个构造函数,这里有更多的在线模板支持添加构造函数和初始化类属性.
- 输入光标必须在类里面;
- 开始输入"ctor"
- 在弹出的列表中选择
ctor
,并按下Tab或Enter
然后Rider就会为我们创建好一个构造函数,是不是很高效?
Rider有更多预设模板来应对所有的编程需求:if
和else
,for
和foreach
,do...while
,try...catch
,using
,等等.
只需要简单地输入你需要的构造,按下Tab键,Rider会做剩下的事情.
完整的可用在线模板,接下来看看Rider提供的其他特性.
4.代码生成
你只需要知道代码生成的快捷键:Alt + Insert.
这个快捷键会打开当下可选的所有代码生成选项.
比如,为了保障MyCircle
类的值等式,我们想要基于Radius
和CenterCoordinates
属性实现Equals()
和GetHashCode()
函数:
- 光标输入;
- 快捷键Alt+Insert;
- 选择
Equality members
- 在对话框中,选择
Radius
和CenterCoordinates
属性,点击OK.
protected bool Equals(MyCircle other)
{
return Radius == other.Radius && Equals(CenterCoordinates, other.CenterCoordinates);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != this.GetType()) return false;
return Equals((MyCircle)obj);
}
public override int GetHashCode()
{
return HashCode.Combine(Radius, CenterCoordinates);
}
这就是代码生成.
5. 重构
重构的快捷键:Ctrl+Shift+R.
R是Refactorings的缩写.
举个重构的例子,我们想要将新创建的MyCircle
类移动到一个新文件:
- 输入光标要在
MyCircle
类的声明上; - 快捷键:Ctrl+Shift+R;
- 选择
Move to Another File
并将类移动到MyCircle.cs
就是这么简单.
6.导航
使用Rider,你可以简单地找到一条通往源代码的方式.你可以导航到指定的声明,成员,方法调用,继承层次,错误,等等.
我们一起来看看这个是怎么操作的,我们想看看CenterCoordinates
类的声明,那么可以快速导航到这个类声明:
- 快捷键:Ctrl+鼠标点击.
哪里不懂点哪里Orz.
6.1 查找引用
我们可能想知道CenterCoordinates
类在别的什么地方都被用过.
- 输入光标;
- 快捷键:Shift+ F12,觉得不方便,可以自定义;
- 在
Find Result
查找结果窗口,双击private CenterCoordinates _coordinates;
就可以导航到该类的第一次使用.
6.2 万能导航
另外一个Rider万金油的功能就是:Shift,Shift.
这个连按两次Shift的操作在永劫无间里面叫做双闪,非常实用.
- 代码中的任意位置,双闪;
- 在打开的菜单中输入"mc"
- 在列表中选择
MyCircle
并导航到源码.
除了双闪这个万金油外,导航的另外一个基于上下文判断的智能导航快捷键是:Alt+`,和双闪的区别在于这个快捷键更智能,会基于输入光标的位置来判断我们可能想去的地方,弹出一个可能的列表供我们选择.
还有一个笔者喜欢的导航方式,就是Ctrl+Tab,这个快捷键可以快速切换编辑窗口.
还有一个,Alt+O,这个快捷键可以在头文件header和cpp实现之间快速切换.
这两个快捷键是笔者从VS那边继承过来的,所以并不算Rider独有的特性,只是顺带分享一下啊.
6.3 智能导航
我们来使用一下基于输入光标上下文的智能导航.
导航到CenterCoordinates
的声明,但是使用智能导航:
- 输入光标要在
CenterCoordinates
的属性声明上面; - 快捷键:Alt+`
- 在导航列表中选择
Declaration
声明.
7.重新排列
我们想让你知道的下一件是:如何快速重排代码元素.四个简单的快捷方式:
如上图所示,笔者偷懒一下,这四个快捷键可以快速重排表达式,声明,类型成员和其他的代码元素.
这个案例就是将msg
参数移动到右侧:
- 输入光标聚焦
msg
; - 快捷键输入.
第二个案例是将ReturnMessage
上移:
- 光标聚焦;
- 快捷键.
8. 格式化代码
我们在这里将向你展示的最后一个特色就是重新格式化代码,快捷键:Ctrl+Alt+Enter,笔者习惯用VS的Ctrl+K+D,大家可以自行配置.
编码风格不一样,格式化的效果就不一样,这个是编程常识哈,编程语言不同采用的形式也不一样,这些可以进行配置:如何配置代码风格?
使用方式就是在代码的任意位置按下快捷键,代码就会按照语言风格自动编排.
9.总结
以上这些功能只是Rider编辑器的基础,如果大家喜欢这个教程,可以给作者点个关注,这一篇的点赞/收藏达到100就写下一篇,如果大家没有这个需求,笔者也没有必要继续写这个系列.毕竟IDE的教程不是特别重要的,只能说提升大家编程效率,和编程本身比起来就不是重中之重,而是锦上添花.
所以,如果真的对大家有帮助,请大家动动金手指支持一下作者,非常感谢!
预祝各位程序员1024 Happy Coding!