🦀掌握Rust编程神器,让LED灯闪烁(下)

450 阅读13分钟

讲动人的故事,写懂人的代码


在"🦀掌握Rust编程神器,让LED灯闪烁(上)"中,我们探讨了嵌入式领域的"Hello, world!"程序、如何将LED灯的Rust代码修改为闪烁模式、使用Git和VS Code比对代码变更、让VS Code显示let语句的变量类型推断,以及安装免费AI编程助手Codeium的方法。

本篇将继续讨论如何编译、运行、提交并解读这段AI生成的代码,分析其不足之处及改进方案,同时介绍一些能简化Rust嵌入式开发终端操作的实用工具。

image-cover-h.webp

2.2 编译、运行与提交

✅在详细解读AI生成的代码前,让我们先在b1l目录下运行以下命令来编译并测试代码是否能正常工作:

% cargo run
   Compiling semver-parser v0.7.0
   (其他行略)
   Compiling b1l v0.1.0 (/home/bens/temp/b1l)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 19.28s
     Running `probe-rs run --chip nRF52833_xxAA target/thumbv7em-none-eabihf/debug/b1l`
 WARN probe_rs::util::rtt: No RTT header info was present in the ELF file. Does your firmware run RTT?
      Erasing ✔ [00:00:00] [############################] 20.00 KiB/20.00 KiB @ 35.44 KiB/s (eta 0s )
  Programming ✔ [00:00:01] [############################] 20.00 KiB/20.00 KiB @ 19.39 KiB/s (eta 0s )    Finished in 1.626s

由于在上一章中已经安装了目标平台和probe-rs烧录工具,所以这次可以直接顺利运行cargo run命令(该命令包含了cargo build的功能)。开发板第4行第4列的LED在短暂熄灭后(这是因为probe-rs在烧录程序前需要先擦除开发板上的原有程序),便开始快速闪烁起来,如图2-7所示:

f2-6.gif

图2-7 AI给出的闪烁代码果然让开发板的第4行第4列的LED快速地闪烁起来

✅既然代码可以正常运行,我们就可以运行以下以%开头的几个命令来提交代码,这样将来修改时就能方便地进行对比:

# 按Ctrl+C中止程序,让终端回到命令行提示状态
% git status
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   src/main.rs # main.rs文件包含AI的闪烁代码

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	Cargo.lock # 因为这是应用程序,所以自动生成的Cargo.lock需要提交,以便保持依赖的稳定性

no changes added to commit (use "git add" and/or "git commit -a")
% git add .
% git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   Cargo.lock
	modified:   src/main.rs
# 按照社区约定的Rust标准风格格式化源码,包括代码缩进、空格、换行等,
# 确保项目中的代码风格统一,避免不同开发者之间因格式差异引起的冲突,
% cargo fmt
% git commit -m "feat: blinked the LED using cortex_m::asm::delay"
[main 726e6e2] feat: blinked the LED using cortex_m::asm::delay
 2 files changed, 438 insertions(+), 5 deletions(-)
 create mode 100644 Cargo.lock
% git log --oneline
726e6e2 (HEAD -> main) feat: blinked the LED using cortex_m::asm::delay
b7d4d95 chore: initialized the project

2.3 解读AI给出的闪烁代码

让我们通过代码注释重点解读AI给出的闪烁代码中新增的部分,具体内容如代码清单2-1所示:

代码清单2-1 ch02/b1l/src/main.rs 使用让处理器空转的cortex_m::asm::delay()函数实现延时

#![deny(unsafe_code)]
#![no_main]
#![no_std]

use cortex_m_rt::entry;
use embedded_hal::digital::OutputPin;
use microbit::board::Board;
use panic_halt as _;

// 导入延时函数,用于实现程序中的时间延迟
use cortex_m::asm::delay;

#[entry]
fn main() -> ! {
    let mut board = Board::take().unwrap();
    
    loop {
        board.display_pins.col4.set_low().unwrap();
        board.display_pins.row4.set_high().unwrap();
        
        // delay()是使用处理器内部循环来实现延时的函数,
        // 参数值代表处理器要执行的循环次数,相当于约1/16秒
        delay(1_000_000);
        
        // 将第4行设置为低电平,以便熄灭这个LED
        board.display_pins.row4.set_low().unwrap();
        
        // 再次延时约1/16秒
        delay(1_000_000);
    }
}

🔎延时功能 delay(1_000_000) 是如何工作的?这个功能就像给程序设置一个短暂的休息时间。当程序执行到这里时,处理器会进入空转状态——就像在原地踏步,白白消耗电量。

我们的开发板使用的处理器运算速度很快,每秒可执行6400万次基本运算。当处理器空转100万次时,由于每次空转需要4次基本运算,总共就需要400万次基本运算。根据处理器的运算速度,这段休息时间约为0.0625秒(即1/16秒)。

在LED闪烁程序中,LED的亮和灭状态各需要一次休息,因此一个完整的闪烁周期约为1/8秒(难怪LED闪烁得很快)。如果想调整LED闪烁的速度,只需修改这个数值:暂停1秒用16,000,000,暂停0.5秒用8,000,000,要实现更快的0.1秒闪烁则使用1,600,000。

2.4 改进AI给出的闪烁代码

⚠️不过,代码清单2-1中使用 cortex_m::asm::delay() 的延时方式存在两个主要局限性:首先,让处理器执行空指令循环来"数数"会使处理器持续运行并消耗电能;其次,这种计时方式的精确度较低。要实现更精确的计时,我们应该使用开发板上的专用硬件定时器功能。那么,如何使用这些专用硬件定时器呢?

遇事不决,求助AI。让我们把这个疑问和代码清单2-1交给AI,请它给出改进后的代码,如代码清单2-2所示:

代码清单2-2 ch02/b1l/examples/b1lut0.rs 使用micro:bit v2开发板上的专用硬件定时器TIMER0外设实现延时

#![deny(unsafe_code)]
#![no_main]
#![no_std]

use cortex_m_rt::entry;
use embedded_hal::digital::OutputPin;
// 导入延时功能的DelayNs trait
use embedded_hal::delay::DelayNs;
use microbit::board::Board;
// 导入开发板专用硬件定时器功能
use microbit::hal::timer::Timer;
use panic_halt as _;

#[entry]
fn main() -> ! {
    let mut board = Board::take().unwrap();

    // 初始化硬件定时器TIMER0
    let mut timer = Timer::new(board.TIMER0);

    loop {
        board.display_pins.col4.set_low().unwrap();
        board.display_pins.row4.set_high().unwrap();

        // 延时500毫秒
        timer.delay_ms(500_u32);

        board.display_pins.row4.set_low().unwrap();

        // 再次延时500毫秒
        timer.delay_ms(500_u32);
    }
}

🔎如果你不想手动输入代码清单2-2的内容,可以直接运行本书代码库中已经写好的代码。只需在终端的ch01/b1l文件夹下运行下面的命令:

# b1lut0表示Blink the 1st Led Using Timer0
cargo run --example b1lut0

🔎硬件定时器的工作原理其实很简单:当需要计时时,我们先给定时器设定一个目标值,然后启动它开始计数。有趣的是,在定时器计数期间,处理器可以进入睡眠模式来节省电能,而不必保持工作状态。当定时器达到目标值时,它会自动发出中断信号,将处理器从睡眠中唤醒。

这种设计带来了三大优势:由于处理器可以在计时过程中进入低功耗模式,显著降低了能源消耗;使用专门的硬件计数器,让计时精确度远超软件计时;最关键的是,处理器不会被计时任务占用,可以专注于处理其他工作,特别适合需要同时处理多项任务的场景。

✅修改完代码后,运行以下命令来格式化、编译、运行并提交代码(后续类似步骤将不再重复说明)。

% cargo fmt
% cargo clean
% cargo run
# 按Ctrl+C退出循环程序
% git status
% git diff
# 按q键退出git diff界面
% git add .
% git status
% git commit -m "feat: blinked the LED using microbit::hal::timer::Timer"
% git log --oneline
# 按q键退出git log界面

⚠️在终端里逐个输入这些命令是不是很费时?即便使用键盘上的上下箭头键、在终端中输入history命令(适用于Ubuntu/macOS及Windows 11的PowerShell 7+),或按Ctrl+R来搜索历史命令,操作起来还是不够便捷。有没有更好用的终端命令行神器,能让我们更轻松地输入命令呢?

2.5 在终端轻松输入命令的神器

🔎想让命令行操作更轻松吗?神器可以帮你简化git命令——输入gst代替git status查看状态,用ga .替代git add .添加文件到暂存区。它还能实时显示git仓库状态,并提供智能的命令补全功能。

神器还会基于你的使用历史提供命令建议。当你开始输入一行命令的头几个字符时,它会用淡灰色显示可能的完整命令(即你以前输入过的命令)。只需按下右方向键或Ctrl+E,就能快速采用建议,大幅提升输入效率。

更棒的是,它能用颜色标记命令状态:正确的命令显示为绿色,错误的显示为红色。文件路径也有独特的颜色标记,让你一眼就能判断命令是否正确。

除此之外,它还提供了强大的命令补全功能,支持更多命令和参数的智能补全,让你的命令行操作更加流畅自然。如图2-8和2-9所示:

f2-7.png

图2-8 Ubuntu和macOS上的Oh My Zsh会用红叉标记错误命令gti,并在用户输入git c后自动以灰色字体显示历史命令建议

f2-8.png

图2-9 Windows 11上的Oh My Posh会用红叉标记错误命令gti,并在用户输入git c后自动以灰色字体显示历史命令建议

看起来很心动对吧?这个神器就是Oh My Zsh(适用于Linux和macOS)和Oh My Posh(适用于Windows)及其插件。

2.5.1 提升终端使用体验的Oh My Zsh和Oh My Posh

🔎如果你是Linux或macOS用户,Oh My Zsh将是你的得力助手。这个开源的Zsh配置框架不仅能简化命令行操作,还能显著提升工作效率。通过丰富的插件系统和主题配置,你的终端将变得既实用又美观。

Oh My Zsh最吸引人的地方在于它的实用性。它提供了大量现成的插件,如git和docker插件,为你带来智能命令补全和便捷的别名功能。想要个性化?它有150多种主题供选择,让你的终端界面焕然一新。对新手来说,它的自动化配置和更新机制非常友好。更重要的是,它拥有活跃的社区,不断开发新的功能和插件。

使用Oh My Zsh后,你会发现日常操作变得轻松自如。它的插件生态系统覆盖了从开发到版本控制的各种场景,你可以根据需求灵活调整功能。当然,它也有局限性:安装过多插件可能会降低终端启动速度,而且需要一些时间来熟悉各项配置。

如果你是Windows用户,Oh My Posh是你的理想选择。这款专为Windows平台打造的终端美化工具支持PowerShell、Windows Terminal等多种终端模拟器,主要特色是美化终端外观并提供状态显示功能。

Oh My Posh提供丰富的主题选择,让你随心切换不同风格。它与Windows上的各种终端模拟器和shell完美兼容,还能实时显示Git仓库状态和分支信息。作为轻量级工具,它专注于核心功能,不会增加系统负担。

Oh My Posh的优势显而易见:它能让终端界面更加美观清晰,配置简单直观,且系统资源占用少。然而,它也有局限性:功能主要集中在外观优化上,对命令行操作的改进有限,插件数量也不如Oh My Zsh丰富。不过,对于想要美化终端界面并简化Git操作的Windows用户来说,Oh My Posh仍是理想之选。

🧠 Linux和macOS上的Oh My Zsh和Windows上的Oh My Posh配置框架分别为Git 操作提供了哪些快捷命令?

2.5.2 基础平台zsh或PowerShell 7+

这些神器虽然强大,但在使用前需要先安装它们的基础平台——Linux和macOS用户需要安装zsh,Windows用户则需要安装PowerShell 7+(表示版本7或更高版本)。可以按照表2-3的安装要点安装zsh或PowerShell 7+:

表2-3 zsh或PowerShell 7+安装要点

在Ubuntu 24上安装zsh在macOS上安装zsh在Windows 11上安装PowerShell 7+
# 查看zsh版本(检查是否已安装)
zsh --version
apt list --installed | grep zsh
# 推荐使用apt安装zsh
apt install zsh
# 参考网页
github.com/ohmyzsh/ohm…
# 将zsh设置为默认shell后重新登录
chsh -s $(which zsh)
# 验证安装是否成功
echo $SHELL
# 检查最新可安装版本
apt show zsh | grep Version
# 升级
sudo apt update
sudo apt upgrade zsh
# 查看zsh版本(检查是否已安装)
zsh --version
brew info zsh
# 推荐使用brew安装zsh
brew install zsh
# 参考网页
github.com/ohmyzsh/ohm…
# 验证安装是否成功
echo $SHELL
# 升级
brew update
brew upgrade zsh
# 安装PowerShell 7+以替代系统自带的5.1
# 查看PowerShell版本(检查是否已安装)
winget list Microsoft.PowerShell
# 推荐使用winget安装git
winget install --id Microsoft.Powershell --source winget
# 参考网页
learn.microsoft.com/en-us/power…
# 升级
winget upgrade --id Microsoft.Powershell

🔎Zsh(Z Shell)是一款功能强大的工具。作为Unix shell和命令行解释器,它不仅保留了Bash的所有优点,还增添了许多新特性。无论在macOS还是Linux系统上,它都能提供友好且高度可定制的命令行环境。

Zsh最突出的特点是其智能功能。它提供命令、文件名和路径的自动补全,让编程更加流畅。对于脚本编写者来说,它不仅完全兼容Bash语法,还提供了更多灵活选项。通过Oh My Zsh框架,你可以轻松安装主题和插件,打造既实用又美观的终端。

在日常使用中,Zsh的贴心设计随处可见。它的提示符能显示Git状态和系统状态等实用信息。它的历史记录搜索功能直观高效,让你轻松找到之前使用过的命令。更重要的是,它在macOS和Linux上提供一致的使用体验,并且具有强大的文件匹配能力,能轻松应对复杂的目录结构。

Zsh的优势明显:内置实用功能如共享历史和行内历史补全;通过Oh My Zsh或Prezto支持丰富的插件生态;智能补全和快捷键提升工作效率;活跃的社区支持;高度可定制性;原生Git支持让版本控制更简单。

当然,Zsh也存在一些局限性。新手可能需要时间适应其丰富的功能。安装过多插件会影响启动速度。某些脚本可能需要调整才能与Bash完全兼容。部分功能依赖插件可能带来额外问题。某些Linux发行版需要手动安装和配置。

谁最适合使用Zsh?软件开发者和运维人员可以通过它提升工作效率;喜欢个性化的用户会享受其丰富的主题和插件;跨系统工作的用户会感激其一致性体验;复杂Shell脚本的编写者能从中受益;Git用户会欣赏其原生支持。

Zsh就像一位得力助手。虽然初期需要一定学习时间,但掌握后必定让你的命令行工作事半功倍。无论是效率提升还是使用体验,它都不会让你失望。

🔎让我们来了解PowerShell的两个重要版本:PowerShell 5.1和PowerShell 7+。PowerShell 5.1是Windows 11自带的版本,它就像一个专为Windows量身定制的管家,基于.NET Framework开发。PowerShell 7+则是一位现代化的多面手,它基于.NET Core(现在是.NET 5+)构建,可在Windows、Linux和macOS上运行。

PowerShell 5.1就像一位经验丰富的Windows专家,对系统了如指掌。它拥有丰富的模块库,擅长管理Windows的系统API、服务、注册表和文件系统。不过,它只在Windows平台工作,就像一位"专一"的管家。

PowerShell 7+则像一位见多识广的现代管家。它不仅跨平台工作,还带来了管道链运算符和并行处理等新功能。它的错误处理更智能,性能更出色。虽然它能运行大多数PowerShell 5.1的模块,但在某些场景可能遇到兼容性问题。

这两位管家各有优势:PowerShell 5.1作为Windows家族的老管家,拥有丰富的社区资源且开箱即用。PowerShell 7+则像位精通多国语言的现代管家,适应性强,性能更好,功能持续更新。

当然,每位管家都有局限。PowerShell 5.1局限于Windows平台,功能更新已停滞。PowerShell 7+虽然现代化,但需要额外安装,可能有兼容性问题,新用户需要时间适应新特性。

如何选择?如果你主要在Windows环境工作,特别是需要使用大量传统Windows工具和脚本,选择PowerShell 5.1更合适。如果你需要跨平台工作,或想要更现代化的开发体验(尤其是在DevOps和云计算领域),PowerShell 7+是更好的选择。对于新项目,我们推荐使用PowerShell 7+,因为它代表着PowerShell的未来。

2.5.3 具备分屏功能和美观界面的现代化终端

✅完成zsh或PowerShell 7+的安装后(Windows用户请注意:后续所有终端命令都需要在PowerShell 7+中运行),如果想要更优质的使用体验,尤其是在分屏功能和界面美观度方面,那么可以安装一款现代化的终端。

具体推荐如下(旧终端 → 新终端):

  • Ubuntu:GNOME Terminal → Terminator
  • macOS:Terminal → iTerm2
  • Windows 11:CMD → Windows Termina

这三个旧终端都不支持分屏功能,而新终端都支持。后续所有终端命令都将在这些现代化终端(安装要点见后文)中执行。

以Ubuntu的Terminator为例,在用gdb调试micro:bit v2开发板时,按下Ctrl+Shift+E可将屏幕分为左右两部分:左侧运行cargo embed连接开发板进行调试,右侧用于设置断点、单步执行程序和查看变量值。每个分割出的屏幕还可以继续分屏,灵活满足不同需求。这比打开多个Terminal窗口再手动调整位置要方便得多,如图2-10所示:

f2-9.png

图2-10 在Ubuntu的Terminator中使用分屏来用gdb调试micro:bit v2开发板

🔎Ubuntu提供两款重要的终端:默认的GNOME Terminal和功能强大的Terminator。GNOME Terminal作为Ubuntu的原生终端模拟器,就像一位可靠的老朋友,轻巧易用,能满足日常命令行操作需求。Terminator则是一位全能选手,专为处理复杂任务的高级用户和开发者设计。

GNOME Terminal以简洁实用著称。它就像一把精简版的瑞士军刀,提供所有必需功能而不显臃肿。它启动迅速、资源占用少,支持基本的外观定制,如字体和颜色的更改。对Linux新手而言,它学习曲线平缓,容易上手。

Terminator则堪比瑞士军刀的豪华版。它最显著的特点是窗口分割功能,让你能在同一界面中管理多个终端。它还提供丰富的快捷键配置和插件扩展,甚至能同时向多个终端发送相同命令。这些强大功能让复杂的开发和运维工作变得轻松自如。

这两款工具各有所长。GNOME Terminal优势在于简单直观、系统集成度高、资源占用少。Terminator虽然功能强大,但需要更多系统资源,也需要时间来熟悉。

如何选择?如果你是Linux新手,或只需执行基本的命令行操作,GNOME Terminal完全够用。但对于需要同时处理多任务的开发者或运维人员,尤其是在大屏幕上工作时,Terminator能显著提升工作效率。在进行代码调试、服务器管理或团队协作时,它的多窗口分割和广播输入功能会让你感叹:这才是理想的终端!

🔎macOS提供两款主要的终端:系统自带的Terminal和功能丰富的iTerm2。Terminal像一位技艺高超的单项选手,提供可靠的基础命令行功能;而iTerm2则是一位多才多艺的全能选手,为开发者和高级用户带来众多强大特性。

Terminal作为macOS的原生终端,以轻量化设计见长,与系统完美融合。它支持基本的字体和配色调整,并提供简单的快捷操作。凭借简单直观和开箱即用的特点,它成为许多用户的首选工具。

iTerm2则提供更丰富的功能体验。它让你能在同一窗口中查看多个终端会话,轻松切换任务。除了支持高级标签管理和丰富的主题定制,它还提供实用的录屏回放功能,便于代码演示。其广播输入功能也大大提升了批量操作效率。

说到优势,Terminal以轻量和稳定著称,像位值得信赖的老友,无需复杂配置就能胜任日常工作。iTerm2则通过强大的分屏功能、丰富的自定义选项和完善的开发工具支持,显著提升工作效率。对开发者而言,其状态提示和命令日志功能更是调试过程中的得力助手。

每个工具都有其局限。Terminal在处理复杂任务时略显不足,外观定制也较为受限。iTerm2虽然功能强大,但新用户需要时间熟悉,且会占用更多系统资源。

如何选择?如果你是命令行新手,或只需执行基本操作,Terminal完全够用。若你是开发者,需要处理复杂任务或偏好高度自定义的工作环境,iTerm2是更好的选择。它不仅能提高工作效率,还能更好地支持团队协作。

iTerm2通常是日常开发工作的理想选择,但这并不意味着Terminal就无用武之地。在简单场景下,Terminal的轻量特性仍有其独特优势。具体选择哪款工具,最终要根据个人需求和使用习惯来决定。

🔎Windows提供两款重要的终端:传统的CMD和现代化的Windows Terminal。

CMD是Windows的老将。作为系统的原装配件,它提供基础的命令行功能,尤其擅长处理DOS风格的命令。它的优势是轻巧简单、开箱即用,且与旧系统兼容性极佳。但与现代工具相比,它的界面较为朴素,功能也相对单一。

Windows Terminal则是一位全能战士。它不仅包含了CMD的全部功能,还带来了焕然一新的现代体验。你可以在同一窗口中打开多个标签页,每个标签页都能运行不同的命令行工具——CMD、PowerShell或WSL。它的界面精美,支持GPU加速渲染,还能设置透明度和背景图片。

Windows Terminal的实力不止于表面。它提供丰富的自定义选项,包括快捷键配置、启动设置,甚至可通过JSON文件进行深度定制。对开发者而言,它的分屏功能和多会话支持堪称神器。

这两款工具各有所长。CMD凭借轻量级特性,在处理简单任务或在配置较低的设备上仍然适用,特别是在运行旧版批处理脚本或需要与遗留系统兼容时。

Windows Terminal则更适合现代开发环境。无论是编写代码、调试程序还是管理服务器,它都能胜任自如。其强大的多任务处理能力和个性化配置选项,使它成为开发者和高级用户的理想之选。在跨平台开发或使用WSL时,Windows Terminal的优势尤为明显。

Windows Terminal代表着命令行工具的未来方向,而CMD在特定场景中仍具有不可替代的价值。具体选择哪个工具,最终要根据个人需求和使用场景来决定。

🔎如果对于分屏感兴趣,可以参考表2-4了解三个现代化终端有关分屏的快捷键:

表2-4 三个现代化终端有关分屏的快捷键

分屏快捷键在Ubuntu上使用Terminator在macOS上使用iTerm2在Windows上使用Windows Terminal
向右分屏Ctrl+Shift+ECmd+DAlt+Shift++
向下分屏Ctrl+Shift+OShift+Cmd+DAlt+Shift+-
切换分屏Ctrl+Shift+N 或 Ctrl+TabCmd+Opt+上下左右Alt+上下左右
关闭当前分屏Ctrl+Shift+WCmd+WCtrl+Shift+W

三个现代化的终端安装要点请参考表2-5:

表2-5 更现代化的终端安装要点

在Ubuntu 24上安装Terminator在macOS上安装iTerm2在Windows 11上安装Windows Terminal
# 按窗口键并搜索terminator,查看是否已经安装
# 安装Terminator
sudo apt update
sudo apt install terminator
# 按窗口键并搜索iterm2,查看是否已经安装
# 安装iTerm2
brew install --cask iterm2
# 查看Windows Terminal的版本:屏幕底部“搜索”→搜“终端”或”terminal”→点击“终端”或”terminal”→终端顶部+号右边下箭头→“关于”
# 推荐在网页版微软商店里下载后安装Windows Terminal
# 参考网页
learn.microsoft.com/en-us/windo…
# 验证安装是否成功:屏幕底部“搜索”→搜“终端”或”terminal”→点击“终端”或”terminal”

2.5.4 安装Oh My Zsh或Oh My Posh

上面这些都准备好后,就可以按照下面的安装要点安装Oh My Zsh或Oh My Posh神器:

在Ubuntu 24上安装Oh My Zsh

# 查看oh my zsh版本(检查是否已安装
omz version
# 安装oh my zsh参考网页
<https://github.com/ohmyzsh/ohmyzsh/wiki>
# 在~/.zshrc文件里添加3个插件:历史命令建议、实时语法高亮、额外命令补全
plugins=( ... zsh-autosuggestions zsh-syntax-highlighting zsh-completions)
# 安装历史命令建议插件
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
# 安装额外命令补全插件
git clone <https://github.com/zsh-users/zsh-completions> ${ZSH_CUSTOM:=~/.oh-my-zsh/custom}/plugins/zsh-completions
# 验证安装是否成功:关闭并重新打开terminal,git clone一个代码库,并进入,是否能看到main分支
# 升级
omz update
# 安装字体,以便让命令行提示正确显示特殊符号:
# 安装 DejaVu Sans Mono for Powerline字体
sudo apt-get install fonts-powerline
或安装 Nerd Fonts字体
wget <https://github.com/ryanoasis/nerd-fonts/releases/download/v3.1.1/JetBrainsMono.zip\\nunzip> JetBrainsMono.zip -d ~/.local/share/fonts/\nfc-cache -fv
# 选择字体和theme以便正确显示命令行提示
鼠标右击Terminator内部任意处 → PreferencesProfiles → default → GeneralFontJetBrainsMonoNL Nerd Font Propo Italic 12ColorsBuilt-in schemes → Solarized light

在macOS上安装Oh My Zsh

同上,最后的字体与配色无需配置。

在Windows 11上安装Oh My Posh

# 查看oh my posh版本(检查是否已安装)
oh-my-posh --version
# 推荐使用winget安装oh my posh
winget install JanDeDobbeleer.OhMyPosh -s winget
# 参考网页
<https://github.com/ohmyzsh/ohmyzsh/wiki>
# 升级
winget upgrade JanDeDobbeleer.OhMyPosh
# 用notepad $PROFILE命令编辑PowerShell配置文件,在文件后添加如下配置:
Import-Module posh-git
Import-Module PSReadLine
Set-PSReadLineOption -PredictionSource History
Set-PSReadLineOption -PredictionViewStyle ListView
oh-my-posh init pwsh \| Invoke-Expression
# 安装FiraCode Nerd Font字体,以便让命令行提示正确显示特殊符号:
# 创建临时目录
New-Item -ItemType Directory -Path "$env:TEMP\NerdFonts" -Force
# 下载 FiraCode Nerd Font
curl -LO <https://github.com/ryanoasis/nerd-fonts/releases/download/v3.1.1/FiraCode.zip>
# 把已下载的 zip 文件移动到临时目录
Move-Item .\FiraCode.zip "$env:TEMP\NerdFonts\FiraCode.zip”
# 解压字体文件
Expand-Archive -Path "$env:TEMP\NerdFonts\FiraCode.zip" -DestinationPath "$env:TEMP\NerdFonts\FiraCode" -Force
# 安装字体
$fonts = (New-Object -ComObject Shell.Application).Namespace(0x14)
Get-ChildItem "$env:TEMP\NerdFonts\FiraCode\*.ttf" \| ForEach-Object { $fonts.CopyHere($_.FullName) }
# 清理临时文件
Remove-Item "$env:TEMP\NerdFonts" -Recurse -Force
# 选择字体和配色方案以便正确显示命令行提示
Windows Terminal → 设置 → 配置文件 → PowerShell → 其他设置 → 外观 → 字体 → FiraCode Nerd Font → 配色方案 → Solarized Light

在安装和配置这些编程神器的过程中,你可能会遇到一些问题。遇到问题时,建议将操作步骤和环境信息详细告诉AI助手,这样能更准确地获得解决方案。

掌握并熟练运用本章介绍的这些有着超好用户体验的编程神器后,你的编程之旅一定会充满乐趣。

  • End -

如果喜欢这篇文章,别忘了给文章点个“赞” ,好鼓励小吾继续写哦~😃