Windows 装机软件指南(科研码农向)
Windows 装机软件指南(科研码农向)
本文描述实验室电脑(Windows11)配置过程。
字体
- 更纱黑体(可用于需要同时支持中英文等宽字体的地方,如传统终端):https://github.com/be5invis/Sarasa-Gothic。可走镜像下载,选 SuperTTC。
- JetBrains Mono(用于代码编辑器):https://www.jetbrains.com/lp/mono/
- Nerd Font Mono(用于美化终端):大全:https://www.nerdfonts.com/,在 Font Download 里找想要的字体下载。实质上是在原字体的基础上扩充了符号。推荐:JetBrains Mono Nerd Font,FiraCode Nerd Font。
注意安装终端字体后需要重启 VSCode 才能生效。
基础软件
WinGet
软件安装一把梭。国内默认下载是很慢的,但幸好我们能换源:
参考:https://mirrors.ustc.edu.cn/help/winget-source.html
winget source remove winget
winget source add winget https://mirrors.ustc.edu.cn/winget-source --trust-level trusted
也可以用其他 mirror,例如 nju:https://mirror.nju.edu.cn/winget-source/。
Git
直接 winget:
winget install --id Git.Git
需要生成 ssh-key,然后上传到 GitHub:
ssh-keygen -t rsa -C "xxx@xxx.com"
解决 ssh 连接端口 22 错误的问题:
ssh: connect to host github.com port 22: Connection refused
fatal: Could not read from remote repository.
民间解决方案:在 ~/.ssh/config
增加如下内容:
Host github.com
User git
Hostname ssh.github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
Port 443
VSCode
官网下载,也可以 winget:
winget install --id Microsoft.VisualStudioCode
7zip
Windows11 自带的压缩软件解压奇慢(网上有 benchmark),所以我们用 7zip 或 NanaZip:
winget install --id 7zip.7zip
winget install --id M2Team.NanaZip
PowerToys
神器,提供一堆功能,包括改环境变量。
参考:https://learn.microsoft.com/zh-cn/windows/powertoys/install
winget install --id Microsoft.PowerToys --source winget
(这里加 --source
不然提示找不到)
需要设置以管理员模式启动,不然改不了全局环境变量。
QuickLook
https://github.com/QL-Win/QuickLook
其实 PowerToys 支持该功能,但看图可能比 PowerToys 方便点。
winget install --id voidtools.Everything
PixPin
强大的截图工具,关键是它能把图片固定到屏幕,方便多任务工作。似乎比 Snipaste 好用
WizFile
Everything 是著名传统全盘文件搜索软件,曾红极一时,但是现在不行了,刚开启时搜索响应太慢是硬伤。如果喜欢可以如下安装:
winget install --id voidtools.Everything
可用的免费全盘文件搜索(不考虑文件内容搜索)软件较多,可以考虑 WizTree 一家的 WizFile,性能很好:
winget install --id AntibodySoftware.WizFile
WizTree
磁盘空间分析软件,同样能搜文件(扫盘比 Everything 快)。
winget install --id AntibodySoftware.WizTree
Zotero
https://www.zotero.org/download/
科研用文献管理工具。除软件本体外,还有 Connector 用于导入浏览器中的文献。
winget install --id DigitalScholar.Zotero
Inkscape
科研用矢量图绘制软件。
winget install --id Inkscape.Inkscape
由于更新太慢,截至本文撰写时最新为 1.3.2,但是官网已经有了 1.4 beta,所以要最新体验的话还得官网下载。
WSL
https://learn.microsoft.com/zh-cn/windows/wsl/install
编程语言开发
C++
工具链(Windows)
- llvm:https://github.com/llvm/llvm-project
- llvm-mingw:https://github.com/mstorsjo/llvm-mingw,nightly:https://github.com/mstorsjo/llvm-mingw/releases/tag/nightly
- mingw: https://github.com/niXman/mingw-builds-binaries
- gcc-mcf:https://gcc-mcf.lhmouse.com/
C++包管理器
winget install --id Xmake-io.Xmake --source winget
C++语言服务
- Linter:clangd
- Formatter:clang-format
这个是 llvm 附带的。别的软件(尤其是 IDE)可能自带旧版的,所以装完后注意运行 clang-format --version
确定一下。
NodeJS
NodeJS 包管理器
推荐 bun,虽然目前 issue 很多,但运行快没得说。
bun 自带 bunx,功能类比 npx。
Python
Python 包管理器
Rye、UV、PDM 都遵守 pyproject.toml
规范。
Rye 使用 UV 作为包管理器,包含了 UV 的功能,但在项目管理上功能有差异。Rust 开发,运行速度一流。
Rye 可帮你管理 Python 运行时,无需事先安装。
Rye tools 可以代替 pipx,用于全局软件下载。
Rye 和 UV 支持 workspace,但在 workspace 依赖解析上还有点不足。
Python 语言服务
二者通常需要放到 pyproject.toml
的 dev-dependencies
里。
Rust
需要 GCC 或 MSVC。
踩坑
我这边如果使用 GCC-MCF 会构建失败:
= note: C:/Program Files/mingw/bin/../lib/gcc/x86_64-w64-mingw32/14.2.1/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Program Files/mingw/bin/../lib/gcc/x86_64-w64-mingw32/14.2.1/../../../../lib/crt2.o: in function `__tmainCRTStartup':
D:/lh_mouse/GitHub/MINGW-packages/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/crt/crtexe.c:260:(.text+0x2d4): undefined reference to `__MCF_cxa_atexit'
C:/Program Files/mingw/bin/../lib/gcc/x86_64-w64-mingw32/14.2.1/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Program Files/mingw/bin/../lib/gcc/x86_64-w64-mingw32/14.2.1/../../../../lib/crt2.o: in function `atexit':
D:/lh_mouse/GitHub/MINGW-packages/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/crt/crtexe.c:339:(.text+0x42a): undefined reference to `__MCF_cxa_atexit'
C:/Program Files/mingw/bin/../lib/gcc/x86_64-w64-mingw32/14.2.1/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Program Files/mingw/bin/../lib/gcc/x86_64-w64-mingw32/14.2.1/../../../../lib/libmingw32.a(lib64_libmingw32_a-tls_atexit.o): in function `__mingw_cxa_atexit':
D:/lh_mouse/GitHub/MINGW-packages/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/crt/tls_atexit.c:20:(.text+0x1): undefined reference to `__MCF_cxa_atexit'
C:/Program Files/mingw/bin/../lib/gcc/x86_64-w64-mingw32/14.2.1/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Program Files/mingw/bin/../lib/gcc/x86_64-w64-mingw32/14.2.1/../../../../lib/libmingw32.a(lib64_libmingw32_a-tls_atexit.o): in function `__mingw_cxa_thread_atexit':
D:/lh_mouse/GitHub/MINGW-packages/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/crt/tls_atexit.c:25:(.text+0x11): undefined reference to `__MCF_cxa_thread_atexit'
C:/Program Files/mingw/bin/../lib/gcc/x86_64-w64-mingw32/14.2.1/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Program Files/mingw/bin/../lib/gcc/x86_64-w64-mingw32/14.2.1/../../../../lib/libmingw32.a(lib64_libmingw32_a-exit_wrappers.o): in function `exit':
D:/lh_mouse/GitHub/MINGW-packages/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/crt/exit_wrappers.c:20:(.text+0x5): undefined reference to `__MCF_exit'
C:/Program Files/mingw/bin/../lib/gcc/x86_64-w64-mingw32/14.2.1/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Program Files/mingw/bin/../lib/gcc/x86_64-w64-mingw32/14.2.1/../../../../lib/libmingw32.a(lib64_libmingw32_a-exit_wrappers.o): in function `_exit':
D:/lh_mouse/GitHub/MINGW-packages/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/crt/exit_wrappers.c:33:(.text+0x15): undefined reference to `__MCF__Exit'
C:/Program Files/mingw/bin/../lib/gcc/x86_64-w64-mingw32/14.2.1/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Program Files/mingw/bin/../lib/gcc/x86_64-w64-mingw32/14.2.1/../../../../lib/libmingw32.a(lib64_libmingw32_a-exit_wrappers.o): in function `at_quick_exit':
D:/lh_mouse/GitHub/MINGW-packages/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/crt/exit_wrappers.c:49:(.text+0x2a): undefined reference to `__MCF_cxa_at_quick_exit'
collect2.exe: error: ld returned 1 exit status
= note: some `extern` functions couldn't be found; some native libraries may need to be installed or have their path specified
= note: use the `-l` flag to specify native libraries to link
= note: use the `cargo:rustc-link-lib` directive to specify the native libraries to link with Cargo (see https://doc.rust-lang.org/cargo/reference/build-scripts.html#rustc-link-lib)
提升缺少参数 -lmcfgthread
,参考:https://github.com/lhmouse/mcfgthread/issues/80
换另一个 MinGW,仍然失败,不知为何跟 clang 扯上关系:
= note: clang-19: warning: argument unused during compilation: '-no-pie' [-Wunused-command-line-argument]
lld: error: unable to find library -lgcc_eh
lld: error: unable to find library -lgcc
clang-19: error: linker command failed with exit code 1 (use -v to see invocation)
原因是找到了 llvm 的 gcc。在 config.toml
里修改路径:
[target.x86_64-pc-windows-gnu]
linker = "path/to/bin/gcc.exe"
Rust 实用工具
- cargo-bloat:Find out what takes most of the space in your executable.
- cargo-deny:❌ Cargo plugin for linting your dependencies 🦀
- cargo-depgraph:Creates graphviz dependency graphs for Rust projects that use Cargo
- cargo-expand:Subcommand to show result of macro expansion。
Shell
- fish shell 不过很遗憾这是 Windows 用不了
- Nushell
美化:
- starship 适用于 pwsh 和 nushell,安装后可能需要重启才能找到环境变量中的 starship
- oh-my-fish
- oh-my-posh 适用于 pwsh 和 nushell
Typst
https://typst.app/
https://github.com/typst/typst
- LSP:tinymist
- Formatter:typstyle
- 导航:https://typst-doc-cn.github.io/guide/
- 小蓝书:https://typst-doc-cn.github.io/tutorial/
游戏开发
Godot
- Linter + Formatter:godot-gdscript-toolkit