4. Linux 开发环境准备(二):配置 Shell 环境与 VS Code

上一节我们把 Ubuntu 虚拟机跑起来了,也装好了基础工具链。但说实话,光秃秃的终端和默认的 Bash,用起来总感觉差点意思。这一节我们来干两件事:把 Shell 环境武装到牙齿,再把 VS Code 配上远程开发插件。这两步搞定了,你后面写代码、编译、调试会顺手很多。

本节核心目标: 打造一个高效、顺手、可长期使用的 Linux 开发环境。

4.1 升级 Shell 体验:Oh My Zsh 还是 Bash?

我个人习惯用 Zsh + Oh My Zsh。为什么?因为它的自动补全、主题、插件生态,确实比默认的 Bash 强太多。你想想看,每次敲命令都要按 Tab 好几次,或者记不住长长的路径,是不是很烦?Oh My Zsh 能帮你省掉这些琐碎操作。

当然,如果你对 Bash 已经非常熟悉,或者团队统一要求用 Bash,那也完全没问题。我这里把两种方案都讲清楚,你自己选。

4.1.1 方案一:安装 Oh My Zsh(推荐)

先确认系统有没有装 Zsh:

zsh --version

如果没装,用 apt 安装:

sudo apt update
sudo apt install zsh -y

然后安装 Oh My Zsh。官方推荐用 curl 或 wget 一键安装:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

安装过程中会问你是否要把默认 Shell 切换成 Zsh,选 Y。重启终端后,你会看到一个新的提示符样式,这就对了。

小技巧: 如果你在虚拟机里遇到网络问题,可以先在宿主机下载好 install.sh,然后通过共享文件夹或 scp 传到虚拟机里执行。

4.1.2 配置 Oh My Zsh 主题与插件

Oh My Zsh 的配置文件在 ~/.zshrc。我个人常用的配置如下:

# 设置主题,我习惯用 agnoster,你也可以试试 robbyrussell
ZSH_THEME="agnoster"

# 启用常用插件
plugins=(
  git
  zsh-autosuggestions
  zsh-syntax-highlighting
  web-search
  sudo
  command-not-found
)

# 如果你安装了 zsh-autosuggestions,记得先克隆插件仓库
# git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
# git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

改完配置后,执行 source ~/.zshrc 让它生效。你会立刻感受到变化:输入命令时会有历史建议(灰色文字),按右箭头就能补全;打错的命令会变红,正确的会变绿。嗯,这些小细节,写代码时真的很舒服。

注意: 如果你在远程服务器上配置 Oh My Zsh,建议先确认服务器有外网访问权限。我曾经在客户内网环境里折腾了半天,最后只能手动下载插件包传上去。

4.1.3 方案二:优化 Bash 配置

如果你坚持用 Bash,也别裸奔。至少把 ~/.bashrc 优化一下:

# 启用颜色输出
export LS_OPTIONS='--color=auto'
eval "$(dircolors -b)"
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias la='ls $LS_OPTIONS -A'

# 设置历史命令大小
export HISTSIZE=10000
export HISTFILESIZE=20000

# 启用自动补全增强
if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi

这样配置后,Bash 的体验会好很多,但跟 Oh My Zsh 比还是有差距。我个人建议你花 10 分钟装一下 Zsh,后面开发会省很多时间。

4.2 安装 VS Code 与远程开发插件

VS Code 是目前最主流的代码编辑器之一,对 HarmonyOS 开发支持很好。我们直接在 Windows/macOS 宿主机上装 VS Code,然后通过 Remote-SSH 插件连接到 Ubuntu 虚拟机里写代码。这样你既能用宿主机流畅的图形界面,又能享受 Linux 的编译环境。

4.2.1 在宿主机安装 VS Code

去 VS Code 官网下载对应系统的安装包,一路默认安装就行。装完后打开,你会看到欢迎页面。先别急着写代码,我们先把插件配好。

4.2.2 安装必备插件

在 VS Code 左侧扩展面板(快捷键 Ctrl+Shift+X)搜索并安装以下插件:

插件名称 用途 是否必须
Remote - SSH 通过 SSH 远程连接到 Linux 虚拟机 必须
C/C++ 代码补全、语法高亮、调试支持 必须
Chinese (Simplified) Language Pack 中文界面(可选,看个人习惯) 可选
GitLens 增强 Git 功能,查看代码历史 推荐
CMake Tools CMake 项目构建支持 推荐
重点: Remote-SSH 和 C/C++ 这两个插件是 HarmonyOS 设备开发的刚需。没有它们,你后面写代码、编译、调试会非常痛苦。

4.2.3 配置 Remote-SSH 连接虚拟机

安装完 Remote-SSH 插件后,按以下步骤配置连接:

  1. 点击 VS Code 左下角的绿色图标(或按 F1 输入 Remote-SSH: Connect to Host)。
  2. 选择 Add New SSH Host,输入连接命令:ssh username@虚拟机IP地址。
  3. 选择 SSH 配置文件保存位置(默认 C:\Users\你的用户名\.ssh\config)。
  4. 连接成功后,VS Code 会打开一个新的远程窗口。在远程窗口里打开你的项目文件夹。

第一次连接会提示你输入密码。如果你配置了 SSH 密钥认证,就可以免密登录,省去每次输密码的麻烦。我个人习惯用密钥认证,尤其是在频繁重启虚拟机或切换网络时,体验好很多。

配置 SSH 密钥认证: 在宿主机终端执行 ssh-keygen -t rsa -b 4096,然后把公钥 ~/.ssh/id_rsa.pub 的内容追加到虚拟机的 ~/.ssh/authorized_keys 文件中。

4.3 验证环境:写个 Hello World 试试

环境配好了,我们来验证一下。在 VS Code 远程窗口中创建一个测试文件 hello.c:

#include <stdio.h>

int main() {
    printf("Hello, HarmonyOS Device Development!\n");
    return 0;
}

按 Ctrl+` 打开终端,编译运行:

gcc hello.c -o hello
./hello

如果看到输出 Hello, HarmonyOS Device Development!,说明你的 Shell 环境、VS Code 远程连接、C 编译工具链全部正常工作。

常见问题: 如果编译时报错 gcc: command not found,说明上一节的基础工具链没装全。回去执行 sudo apt install build-essential 补上。

4.4 本章知识结构图

下面这张图帮你理清这一节的核心脉络:

第4章:Shell环境与VS Code配置 开发环境准备 Shell环境配置 VS Code远程开发 Oh My Zsh Bash优化 Remote-SSH C/C++插件 验证方法 编写 hello.c → gcc 编译 → 运行输出 确认 Shell、VS Code、编译工具链全部正常

4.5 避坑指南

最后分享几个我踩过的坑,你遇到了可以少走弯路:

  • SSH 连接超时: 检查虚拟机网络模式是不是 NAT,如果是,改成桥接模式,或者用端口转发。我曾经在 NAT 模式下折腾了半小时,最后发现是 IP 地址没对上。
  • Oh My Zsh 主题乱码: 有些主题(比如 agnoster)需要 Powerline 字体支持。去 GitHub 下载安装 Powerline Fonts,然后在终端设置里把字体改成 Meslo LG M for Powerline 之类的字体。
  • VS Code 远程窗口卡顿: 如果虚拟机配置较低(比如只给了 2GB 内存),建议关闭 VS Code 的自动保存和实时语法检查,或者给虚拟机多分点内存。
  • 插件安装失败: 检查 VS Code 是不是最新版。旧版本可能不兼容新插件。我遇到过几次,升级 VS Code 后问题就消失了。

好了,这一节的内容就到这里。Shell 环境顺手了,VS Code 也能远程连上虚拟机了,接下来我们就可以正式开始 HarmonyOS 设备开发的代码编写和编译工作了。