第 22.12 节 安装 code-server 和 clangd

警告

本教程仍然需要进一步测试,请慎重参考。

需要补充说明的教程目标描述:

  • 不用安装桌面环境即可获得运行在原生 FreeBSD 环境上的集成开发环境
  • 利用熟悉的 vscode 界面和强大的 clangd 插件支援 FreeBSD 内核、驱动的开发

需要补充的教程内容:

  • 如何在服务器上通过 HTTPS 来提供 code-server 服务

code-server 安装

通过 pkg 安装依赖包

# pkg install git python npm-node16 pkgconf libsecret bash sudo llvm ripgrep

服务器上配置 npm 源

# npm config set registry https://registry.npmmirror.com

注意

这就是原来的淘宝镜像站。见 https://npmmirror.comopen in new window

服务器上通过 npm 安装 code-server

# npm install -g --unsafe-perm [email protected]

服务器上安装 bash 并将当前用户 shell 设置为 bash

$ chsh -s /usr/local/bin/bash
$ exit

客户端上通过 ssh 端口转发方式来请求服务器启动 code-server

$ ssh -L 8000:127.0.0.1:8000 [email protected] \
    VSCODE_APPDATA=.local/share \
    code-server --auth=none --bind-addr=127.0.0.1:8000

客户端上访问

浏览器访问 http://127.0.0.1:8000open in new window 来使用 code-server

连贯的 vscode 文本编辑体验

在服务器上编辑 .bashrc 文件并加入以下内容

$ code-server ~/.bashrc

if [[ $TERM_PROGRAM == vscode ]]; then
  export EDITOR='code-server --wait'
fi

$ exit

在活动的 code-server 会话中运行会调用文本编辑器的命令,将自动打开新的 vscode 编辑器页面。

$ git commit

在服务器上编辑 sudoers 文件

# visudo

在活动的 code-server 会话中使用 sudoedit 在 vscode 编辑器里对系统配置文件进行编辑。

$ sudoedit /etc/rc.conf

clangd 插件侧载

部分插件可能无法通过 Extensions 自动下载安装,因此需要前往 https://open-vsx.orgopen in new window 自行侧载。

在服务器上侧载 clangd 插件

$ fetch https://open-vsx.org/api/llvm-vs-code-extensions/vscode-clangd/0.1.24/file/llvm-vs-code-extensions.vscode-clangd-0.1.24.vsix
$ code-server --install-extension llvm-vs-code-extensions.vscode-clangd-0.1.24.vsix

刷新客户端浏览器页面,可以看到 clangd 插件已被侧载。

延伸阅读

推荐的 settings.json 配置

关闭 Workspace Trust

{
  "security.workspace.trust.enabled": false
}

编辑器自动处理空行

{
  "files.insertFinalNewline": true,
  "files.trimFinalNewlines": true,
  "files.trimTrailingWhitespace": true
}

保存文件时自动格式化代码

{
  "editor.formatOnSave": true
}

当前工作区存在 git 仓库时,自动运行 git fetch

{
  "git.autofetch": true
}

关闭基于内容的编辑器语言检测

{
  "workbench.editor.languageDetection": false
}

关闭插件推荐

{
  "extensions.ignoreRecommendations": true
}

关闭遥测

{
  "telemetry.telemetryLevel": "off"
}

已知问题汇总

在 Search 当中键入关键字会获得形如以下的错误

spawn /usr/local/lib/node_modules/code-server/lib/vscode/node_modules/@vscode/ripgrep/bin/rg ENOENT

那是因为 ripgrep 二进制文件在编译期下载失败了(上游根本就没有为 FreeBSD 平台准备预先编译的 ripgrep 可执行文件)。

这里我们采用制作软链接的方式用 pkg 安装的 ripgrep 来提供 code-server 的全局搜索功能:

# mkdir -p /usr/local/lib/node_modules/code-server/lib/vscode/node_modules/\@vscode/ripgrep/bin
# ln -s /usr/local/bin/rg /usr/local/lib/node_modules/code-server/lib/vscode/node_modules/\@vscode/ripgrep/bin

在 code-server 当中打开一个目录,会发现控制台输出形如以下的错误

[IPC Library: File Watcher] Loading "@parcel/watcher" failed
[IPC Library: File Watcher] Error: /usr/local/lib/node_modules/code-server/lib/vscode/node_modules/@parcel/watcher/build/Release/watcher.node: Undefined symbol "_ZTV17BruteForceBackend"

这是一个上游的已知问题open in new window。作为用户只需要知道「这对日常使用不会造成体验上的影响」就可以了。