以下文章来源于平凡而诗意,作者Jackpop
我一直认为 vs code 是一款名不副实的开发工具,直到它的远程开发功能吸引我开始慢慢尝试着使用它、适应它,才慢慢发现它的优秀及强大之处。强大的远程开发、丰富的插件、轻量化的编辑器...... 每一点都让我觉得它恰到好处。本文,我就来详细介绍一下 vs code 的远程开发并推荐 5 款我个人认为不错的插件。
—▼—
兜兜转转,在开发工具方面我还是选择了 VS Code,原因非常简单 -- 远程开发。
工作之后,开发平台慢慢就开始以 Linux 为主。之所以选择 Linux,首先,是因为它在编译、操作等方面更加便捷省心。其次,是因为和后期测试、部署环境更加统一。
但是,这就遇到了一个矛盾,日常办公主要以 windows 为主,而开发只能在无桌面的服务器端进行,这样随之而来的就是开发效率和便捷性的降低。虽然一些小的项目可以使用 vim 完成,但是在大一些的工程,就会觉得处处都显得非常不顺手。而且,对于记忆 vim 繁多的快捷键一直非常排斥,可能还是习惯的问题。
因此,在我的远程开发之路上,就开始了长时间的变迁之路。
Pycharm+vim+Putty
这是我最先采用的方式,主要的编码工作是在 windows 下用 Pycharm 完成,然后用 SVN、SFTP 同步到远程服务器,然后使用 Putty 结合 vim 做一些小规模的开发,然后进行调试,打包、测试。虽然现在看起来会非常繁琐,但是在当时眼界被局限的时候,认为这就是本应该有的远程开发形式,所以,延续的很久。
MobaXterm
后来,我遇到了 MobaXterm,使用几个月之后我很惊叹,为什么有这么强大的工具?
Mobaxterm 相对于 Putty 是一款功能非常丰富的增强型终端模拟工具,更重要的是它集成了 xming,能够自动把远程服务器下的窗口投影到本地,这样的话我们就可以轻松打开带有 UI 的客户端。
因此,这时候我开始在远程服务器上配置 Pycharm 和 Python 开发环境,然后使用 MobaXterm 打开 Pycharm 客户端进行开发。
就这样又延续了几个月,我认为,也许这就是远程开发最完美的解决方案。
xshell+xming
再后来,我尝试了一下 xshell,然后就再也回不去了。经过对比之后逐渐凸显出 MobaXterm 的缺点,也让 xshell 的优点显得更加突出,
但是,随之而来也遇到了一个问题。一直喜欢的有界面的 Pycharm 不能用了,xshell 自家的 Xmanger 收费。只能自己安装 xming,设置转发隧道,用 xming 显示 Pycharm 客户端。
这时候,我觉得也许我可以在探索远程开发的道路上停下脚步了,但是,这时候我却遇到了 vs code。
最近两年 vs code 在开发工具领域表现得非常抢眼,让很多原本热衷于 eclipse、IntelliJ、Atom 的同学纷纷转向了 vs code,并且对其赞不绝口。一直以来,我认为 vs code 名不副实,它只不过是一个并没有什么特色之处,依靠插件而使其丰富起来的编辑器而已。因此,虽然我会安装 vs code,但是使用频率缺少的可怜。
直到今年 5 月份微软在 PyCon 2019 大会上发布了 VS Code Remote 之后,我才发现它对我太具有诱惑力了。
我不愿意为了一点优势而舍弃 Pycharm 强大的自动补全和代码调试功能,但是,我愿意为了便捷的远程开发去学着改掉自己的使用习惯,去适应一款新的开发工具。当然,前提是这款工具真的能够惊艳到我的情况下,这一点 vs code 做到了,它在远程开发方面的确让我惊艳了一把。
为什么选择 vs code?
远程开发对于开发工具并不算是一个新鲜的事情,其中在我们熟知的 InteliJ 家族的开发工具里就已经实现了远程开发功能。但是,为什么只有 vs code 吸引到我了?
对比一下 IntelliJ 和 vs code 的远程开发就一目了然。
不得不佩服微软在软件方面的实力,一旦他们去专注做一件产品,真的会做到令人惊艳的地步。所以,经过多项的对比,我还是选择了 vs code 作为远程开发工具。这样,真的彻底解放了对终端模拟工具的依赖。
远程开发配置
下面开始详细讲一下 vscode 远程开发的配置。
第一步:安装插件
配置远程开发首先需要安装一个名为 Remote Development 的插件,具体操作步骤如下,
安装之后会侧边活动栏看到一个远程资源管理器按钮。
第二步:配置远程服务器
安装插件之后,点击远程资源管理器,在 SSH TARGETS 配置远程服务器,具体步骤如下,
这里需要注意一个,Host 是一个名称,自己可以随意命名。Hostname 是远程服务器的 IP,User 是用于登录远程服务器的账户名称。
第三步:打开远程连接窗口
把鼠标放在上一步配置的远程连接条目上,点击 Connect to Host in New Window,然后就会在新的窗口打开我们想要的远程连接。
配置免密登录
由于 vs code 是通过 SSH 远程连接到远程服务器的方式进行远程开发,因此,每次打开远程连接是都会提示输入密码,显然这是非常繁琐的。不过,还好有不错的解决方案,我们可以通过配置免密登录的方式避免每次打开连接时都需要重复输入密码。
第一步:生成 windows 公钥
这个需要 windows 配置有 ssh 工具,可以通过安装 git、openssh 实现。
打开 cmd,
$ ssh-keygen
然后一直点击 Enter 键,不用输入任何内容,最后会在C:\Users\user_name\.ssh
路径下生成公钥文件,可以看到有一个id_rsa.pub
文件,然后通过 FTP 等方式把这个文件上传到远程服务器。
第二步:配置远程服务器
进入 SSH 配置目录,
$ cd ~/.ssh
$ ls
查看一下是否有一个名为authorized_keys
的文件,如果没有就创建一个,然后把刚上传的id_rsa.pub
中的内容附到authorized_keys
文件中,
$ touch authorized_keys
$ cat ~/id_rsa.pub >> authorized_keys
第三步:修改文件权限
这一步非常重要,如果没有这一步,前面的操作都没有用。就是给authorized_keys
修改为 600 的权限,
$ chmod -R 600 authorized_keys
这样就完成了免密登录的配置。
一款工具,单凭它自带的工具,是很难满足不同人群的需求的,因此,插件就成了一个不可或缺的部分。通过适当的插件配置能够让一款看似平淡无奇的工具瞬间变的丰富强大起来。我认为 vs code 的优势之一就是它丰富的插件及便捷的配置方式,在这里,我推荐 5 款个人认为不错的 vs code 插件。
TabNine
当然首推还是这一款基于 GPT-2 语言模型的自动补全工具,我在前面一篇文章中花了一篇文章对这款插件进行了介绍。在这里,我再次强烈推荐 TabNine 这款插件,哪怕你使用的不是 vs code 也可以尝试一下这款插件。
TabNine 和我认识中的自动补全工具有很大的不同,传统的补全工具更多的是根据上下文信息和第三方库进行补全,换句话说就是基于既有的内容进行补全。而 TabNine 更多的是偏向推理,它能够根据开发者前面输入的内容快速推理接下来要输入的代码,甚至参数、字符串、符号它都能够准确的推理并补全。
Bookmarks
我们在开发过程中会经常进行跳转或者翻页,当经过一系列的跳转之后想回到最初的位置却发现无从下手了。在使用 Pycharm 时,可以通过快捷键给代码添加上标签,当我们想回到某一个位置时能够使用快捷键或者搜索的方式快速定位到准确的位置,这也是 Pycharm 吸引我的地方之一,它也养成了我喜欢打标签的习惯。
刚从 Pycharm 迁移到 vs code 在标签这一块会很不习惯,发现总是忘记之前所在代码片段。最后发现,vs code 也可以通过配置插件实现强大的标签功能,这款插件就是 Bookmarks。我们能够使用 Ctrl+Alt+K、Ctrl+Alt+J、Ctrl+Alt+L 快捷键添加标签,并且可以快速调整到指定标签位置。
GitLens
多人开始过程中,版本管理工具是必不可少的,其中使用较多的就是 Git。它在日常开发中占据着非常重要的地位,因此版本管理在大多数开发工具中都是必备的功能之一。我之前一直使用 Pycharm,我认为它在版本管理方面已经做的很好了,但是,经过一段时间试用 GitLens 之后才发现,Pycharm 在 Git 版本管理方面对比于 GitLens 真的是相差甚远。
它能够清晰的显示当前文件 的修改时间、修改历史,能够可视化分支、作者、commit 等信息,提供便捷而强大的对比功能。
TODO Highlight
我们在开发过程中,有时会为了测试或某种原因,某段代码需要之后进行修改和完善。如果就不做一些标记,时间久了、需要修改的多了,就很难区分出哪些是需要修改的、哪些是不需要修改的。因此养成做标记的好习惯对提升开发效率具有很大的帮助。
在开发过程中常用的待办标记有 TODO
和 FIXME
,在 Pycharm 中当我们使用这两个标记时它能够自动对其进行高亮显示,这样对于我们找到标记处非常方便。vs code 可以通过安装 TODO Highlight 插件来实现,这样能够突出显示我们还有哪些内容有待完善,能够避免我们检查代码过程中遇到的麻烦。
Code Runner
这是一款支持 C、C++、Java、Python 等主流编程语言快速运行的插件,它能够便捷的运行当前活动页代码文件、能够运行选定代码段、运行自定义命令,对于调试代码具有很大的帮助。