从 gvim 到 vscode

最近几个月,我将自己的代码编辑工具从gvim切换到了vscode,发现各种便利后也将公司的linux服务器的编辑工具切换到了vscode。过程中遇到了不少的坑,这里记录一下,方便也有此需求的同学。

第一步,需要IT协助安装,因为一般情况下,工程师没有管理员权限。有的公司使用 lsf 提交任务,会安装在 lsf 服务器上,要求必须在 lsf 下提交,也就是打开 vscode 的命令之前必须要加 bsub -Is 之类的,这种方式可能需要在打开 vscode 的时候将我们自己的目录传递进去,使用类似下面的命令打开

bsub -Is XDG_RUNTIME_DIR=$HOME code --user-data-dir $HOME

为什么要传递自己的目录进去呢,因为我们会安装自己的 vscode 扩展,这些只能保存在我们有写入权限的目录下。这样安装之后,在 vscode 关闭再打开时,安装过的扩展和上次打开的代码都会原封不动的被恢复出来,甚至没有保存的文件也会恢复。有的公司会安装在特定的服务器上,不使用 lsf , 给普通用户 code 的执行权限,这种就更简单,直接找到vscode的可执行文件,运行即可。这一步基本上会由IT搞定,作为普通用户,大概率不需要深究。接下来的问题只能由我们自己来搞定。

第一个坑:alt 键冲突

大多数gvim/vim的用户非常喜欢它的列操作,一次可以在多个行的同一列插入或者删除,vscode 实现了更为强大的多行操作和块选择,比如通过alt 加鼠标左键可以选中多行的不同位置。但是这个 alt 和鼠标左键的组合被一些 linux 发行版的系统占用了,IC界最主流的某些 centos 7 上,这个组合键被系统用做移动当前窗口了,要使用 vscode 的话需要将系统的这个组合键改成其他的,比如 shift 加鼠标左键,这个属于普通用户可以更改的设置,使用系统ui工具即可轻松搞定。

第二个坑:旧版本扩展安装

注:这一步可以不用关注,安装最新的 vscode 即可,具体参考本文最后的更新1。
vscode 的强大,在于它开源且可扩展,任何人都可以根据自己的需求开发出不同的扩展应用,这些扩展被打包成一个 vsix 文件发布,可以使用 vscode 的离线安装方式安装到无法联网的服务器上,一般发布时间相近的 vscode 和扩展不会由兼容性问题,但是相差较远的扩展可能会因为不兼容而无法安装。 vscode 的升级非常频繁,公司的 IT 不可能一直跟着升级,所以一般 linux 里安装的会是一个旧版本的vscode,如果我们想要装一些扩展,只能去vscode的扩展市场下载,但是扩展市场也只有最近的四五个版本的下载地址,对服务器上的 vscode 来说可能都太新了。那怎么办呢,这里以 python 扩展为例,假如服务器上的 vscode 是 2022-05-07 发布的版本,首先在vscode的扩展市场点击 python 扩展的下载链接,得到如下的下载地址

https://marketplace.visualstudio.com/_apis/public/gallery/publishers/ms-python/vsextensions/python/2022.19.13061131/vspackage

这个 url 里包含了现在的版本号 2022.19.13061131 只需要把这个版本号改成与我们的 vscode 版本兼容的扩展版本号就可以了,那问题来了,我们怎么知道兼容的版本号是多少呢?vscode 的插件也都是开源的,我们可以找到它的 github 仓库,从 release 记录就能看到每个版本的版本号及发布时间,找到跟我们的vscode 版本版本时间接近的版本,我找到的是版本号为2022.6.3的, 替换掉之前的版本号,得到如下的 url :

https://marketplace.visualstudio.com/_apis/public/gallery/publishers/ms-python/vsextensions/python/2022.6.3/vspackage

将这个拼出来的url输入地址栏下载即可。用这个办法可以找到所有你想要的插件的所有版本。

第三个坑: Python 扩展

vscode 有一个叫 python 的扩展,正常理解那只需要安装这个就可以支持 python 了,但是如果只安装这一个扩展,在浏览代码,跳转到定义,跳转到引用的时候非常慢,每次都会出现一个python进程占用接近 100% 的cpu。实际上这个扩展如果是联网安装的话,它会自己安装一些其他扩展,其中有一个非常关键的就是 Pylance, 这是Python 的语言服务扩展,由它提供代码跳转的解析服务,手动安装的话这个扩展也一定要安装,安装之后跳转飞快,方法同python扩展。

可能会遇到的其他问题

从windows远程访问linux服务器,有vnc, nomachine, etx等等,因为etx有着优越的显示性能,目前在IC界非常流行,etx 的默认profile 不会将键盘左边的alt 传递到远端的 linux 服务器,只会将键盘右边的 alt 传递进去,用起来不太方便,需要修改 etx 的 priofile 将左右两边的按键都传递进去。IT在部署好etx之后会给一个登陆网页,网页上会有一个profile点击之后可以打开一个远端 linux 的窗口,这个默认的 profile 普通用户是无法更改设置的,但是可以复制一份profile,修改复制后的 profile ,让左右两边的 按键都传递进去,点击复制后的登陆即可。我目前手上没有 etx 环境,可能遇到这个问题的用户不多,如果你正好需要这个,但是找不到具体的界面和按键,可以留言。


更新:
最近又发现了一些新的技巧:

1. 没有管理员权限(sudo权限)也可以安装(使用)vscode

vscode 有一个 portable 模式,类似于 windows 上的绿色软件,下载之后可以直接运行,不需要管理员安装。首先需要在vscode下载官网 Download Visual Studio Code - Mac, Linux, Windows下载最新的 .tar.gz后缀的安装包,并解压提取文件:

tar -zxvf code-stable-x64-1675893708.tar.gz

提取出来的文件夹名称一般是 VSCode-linux-x64,将整个文件夹拷贝到自己的home路径,cd 到 VSCode-linux-x64,新建一个data目录,用来存放自己安装的扩展,及配置信息等。然后运行 VSCode-linux-x64 目录下的 code(bin目录下也有一个 code,不是那个)

./code --no-sandbox &

2. 显示前进后退按钮

linux 下的 vscode 默认不会显示前进后退按钮,这在浏览代码的时候非常不方便,有的人甚至开发了这样的扩展,实际上现在vscode已经有这个功能,只是linux版本默认没有打开,可能过一段时间官方也会默认打开,现在通过设置打开即可:

  1. 打开Settings,左边有一些分组,找到 window 分组,在里面找 Title Bar Style,将native模式该为custom模式,vscode会重启一下。
  2. 还是在 window 分组,找到command center,在这一行下面的复选框里打勾。
3 个赞

感谢。我是受益者

如何使用vscode进行代码的定义跳转,自动格式对齐,语法纠错?

这些都是由对应的语言扩展实现的,比如systemverilog,需要安装这个扩展。
按住ctrl 鼠标左键点击函数名就可以跳转到定义,剩下两个功能我也没用过,不知道这个扩展有没有实现。

我已经安装了,但是还是不能跳转

想跳转的是systemverilog文件吗,是从函数调用的地方点,不是定义的地方,这个没搞错吧,另外安装之后右下角应该会出来一个systemverilog扩展正在处理文件的通知,那个处理完了才可以。

都没有问题的,可以提供一下你安装插件的截图吗?安装完插件需要做其他的操作吗?

看这个插件描述是要手动安装ctags并配置?
image

啊,你安装的是另外一个,这个东西需要自己配,还挺麻烦的,我没弄成功。我说的是下面这个,很简单装上就能用
image

解决了,多谢大伟哥。有时间可以在研究一下纠错功能