商城首页欢迎来到中国正版软件门户

您的位置:首页 >VSCode怎么在内置终端中配置Fish Shell并解决中文乱码

VSCode怎么在内置终端中配置Fish Shell并解决中文乱码

  发布于2026-04-30 阅读(0)

扫一扫,手机访问

VSCode终端设Fish Shell为默认需先安装fish并配置settings.json,添加terminal.integrated.defaultProfile与profiles对应条目,再关闭重开终端;中文乱码需在config.fish中设置LANG和LC_ALL,并在VSCode中配置中文字体链。

VSCode怎么在内置终端中配置Fish Shell并解决中文乱码

VSCode 终端怎么设 Fish Shell 为默认

想把VSCode的默认终端换成Fish Shell?第一步,得先确保Fish已经在你的系统里安家了。打开任意终端,运行fish --version命令,如果能看到版本号输出,那就恭喜你,可以直接进行下一步。如果系统提示命令未找到,那就得先去fishshell.com官网下载安装包,把Fish请进门。

这里有个关键提醒:Windows用户需要注意,原生的CMD或PowerShell无法直接替换为Fish。通常的路径是借助WSL(Windows Subsystem for Linux)或者在Git Bash这样的环境中自行搭建Fish。

环境准备好之后,真正的配置在VSCode里进行。打开VSCode设置(快捷键Ctrl + ,),搜索terminal.integrated.defaultProfile.linux(Linux系统)或terminal.integrated.defaultProfile.osx(macOS系统)。点击搜索结果旁的“在settings.json中编辑”链接,把下面这段配置加进去:

"terminal.integrated.defaultProfile.linux": "fish",
"terminal.integrated.profiles.linux": {
  "fish": {
    "path": "fish"
  }
}

macOS用户的操作类似,只需把上面配置中的linux替换成osx即可。配置保存后,必须关闭所有已经打开的终端面板,然后按Ctrl + Shift + `新建一个终端。这是因为旧的终端会话不会自动加载新的配置文件,只有新开的终端才会乖乖认领Fish作为默认Shell。

Fish 启动时 locale 没生效导致中文乱码

配置好了,但一打开终端,中文全成了乱码?这恐怕是新手切换至Fish时最常遇到的“当头一棒”。问题根源在于,Fish Shell的设计很独立,它不会自动读取你熟悉的~/.bashrc~/.zshrc文件。所以,即使你在之前的Shell里把LANG设置成了zh_CN.UTF-8,Fish启动后,你运行locale命令,很可能看到的还是LANG=C。这个“C” locale,就是导致中文显示异常的主要元凶。

解决办法很直接:我们需要在Fish自己的地盘上设置环境变量。打开(或创建)Fish的配置文件:~/.config/fish/config.fish

  • 首先,确保配置目录存在:mkdir -p ~/.config/fish
  • 然后,编辑这个文件,添加核心的两行配置:
    set -gx LANG zh_CN.UTF-8
    set -gx LC_ALL zh_CN.UTF-8
    这里用set -gx命令,是为了将变量设置为全局(-g)并导出(-x)到子进程。加上LC_ALL是为了覆盖所有locale类别,有些老工具只认它。

修改完成后,务必重新启动一个Fish终端。再次运行locale命令,确认输出中的LANGLC_ALL都已经变成了zh_CN.UTF-8(如果你偏好英文环境,也可以设为en_US.UTF-8)。

VSCode 集成终端里 Fish 输出中文仍是方块或问号

环境变量明明设对了,locale命令也显示正常,为什么VSCode终端里显示的中文还是一个个小方块或者问号?别急,这很可能不是Fish的错,而是VSCode终端自身的字体渲染问题。终端里显示什么字体,和Shell进程是两套系统。

关键操作在VSCode的设置里。搜索terminal.integrated.fontFamily这个设置项,它的值不能只填一个字体名字。正确的做法是填入一个“字体族”链,用逗号分隔,确保其中包含能显示中文的字体。例如:

"Cascadia Code", "Microsoft YaHei", "Noto Sans CJK SC", "monospace"

这个链式配置的意思是:优先尝试使用“Cascadia Code”字体显示,如果该字体缺少某个中文字形,就向后备字体“Microsoft YaHei”(微软雅黑)或“Noto Sans CJK SC”求助,最后再回退到系统等宽字体。

这里有两点需要特别注意:

  • 必须使用链式写法:只写一个“Cascadia Code”是没用的,因为它本身不包含完整的中文字形库。
  • 注意字体可用性:在Windows上,如果你没有安装“Cascadia Code”,可以换成"Consolas", "SimSun", "monospace"。但要注意,“SimSun”(宋体)不是等宽字体,可能会导致终端字符对齐错乱,影响观感。

如果修改设置后问题依旧,可以尝试更直接的方法:在VSCode的终端窗口内右键点击,选择“属性”或类似菜单,找到字体设置,手动选择一个你系统里真实存在且支持中文的等宽字体(比如就选“Cascadia Code”)。这一步图形化的操作常常被忽略,但往往是解决问题的临门一脚。

Python / Node.js 在 Fish 终端里 print 中文报 UnicodeEncodeError

最让人头疼的情况来了:终端能显示中文了,但一运行Python或Node.js脚本打印中文,就直接抛出一个UnicodeEncodeError: 'utf-8' codec can't encode character...的错误。这其实是一种“假象”。错误的根本原因,通常是Fish设置的环境变量没有成功传递给Python这样的子进程,或者Python检测sys.stdout.encoding时得到了一个None或错误的值,于是编码就乱了套。

怎么验证?在Fish终端里运行这行命令:python -c "import sys; print(sys.stdout.encoding)"。如果输出的不是utf-8

除了前面强调的要在~/.config/fish/config.fish中用set -gx正确设置变量,还需要检查Fish的“通用变量”机制。可以运行fish -c "set -U fish_user_paths"测试,如果报错提示“not a universal variable”,可能意味着你的Fish版本较旧,某些机制不太一样。

一个稳妥的检查流程是:

  1. 确保~/.config/fish/config.fish文件存在且可读。
  2. 打开文件,确认每一行set -gx赋值语句都是完整的,没有被注释掉,后面都跟着明确的值,避免空行或格式错误干扰解析。
  3. 新开一个终端,执行env | grep LANG,必须能清晰看到LANG=zh_CN.UTF-8这样的输出。这证明变量已经成功置于环境之中。

Fish的变量作用域规则比Bash更严格,set -gx看似是全局导出,但在某些复杂的场景下,比如VSCode通过特定路径启动Shell,或者存在嵌套的子Shell时,变量仍有可能“走丢”。如果以上步骤都确认无误,问题通常就能解决。

当然,在调试Python脚本时,可以临时在脚本开头加上import sys; sys.stdout.reconfigure(encoding='utf-8')来强制指定编码。但这只是个权宜之计,是“创可贴”而非“根治术”,真正的解决方案还是确保Shell环境本身的编码设置正确且稳固。

本文转载于:https://www.php.cn/faq/2341829.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。
  • VSCode查看CSS层叠_HTML文件中直接预览样式来源 正版软件
    VSCode查看CSS层叠_HTML文件中直接预览样式来源
    在VSCode中打开HTML文件后,按F1输入Developer: Toggle Developer Tools并回车,切换到Elements面板悬停元素,右侧Styles栏即显示所有匹配的CSS规则及来源文件和行号。 在VSCode里点开HTML文件,怎么快速看到某段文字用了哪些CSS规则? 方法
    1分钟前 0
  • VSCode配置GraphQL接口 联调必备VSCode模式验证插件 正版软件
    VSCode配置GraphQL接口 联调必备VSCode模式验证插件
    VSCode配置GraphQL接口:联调必备的模式验证插件 这里有个常见的误区:如果装错了插件,或者Schema根本没连上,那么VSCode里的GraphQL功能就只剩下语法高亮了。什么字段补全、定义跳转、实时校验,统统都会失效——不是插件没这功能,而是你的配置压根没对上。 插件选择:必须装Grap
    1分钟前 0
  • git revert和git reset的区别【对比】 正版软件
    git revert和git reset的区别【对比】
    别用 git reset --hard 去回滚别人已经拉过的提交——这是最常踩的坑,也是唯一必须先说清楚的事。 在团队协作中,选错回滚命令的代价可不小。简单来说,git revert 和 git reset 的核心区别,就在于它们对待提交历史的态度截然不同。 git revert 会生成新提交,不改
    2分钟前 0
  • 如何在Composer项目中使用多环境配置 正版软件
    如何在Composer项目中使用多环境配置
    如何在Composer项目中使用多环境配置 先明确一个核心事实:Composer本身并不支持环境判断。这意味着,你无法在composer.json这个静态配置文件里写诸如if env === 'prod'这样的逻辑。多环境之间的差异,必须依靠外部控制与运行时配合来协同实现。如果处理不当,那些经典的“
    2分钟前 0
  • 怎么用VSCode编写LaTeX论文-环境搭建与实时编译指南 正版软件
    怎么用VSCode编写LaTeX论文-环境搭建与实时编译指南
    怎么用VSCode编写LaTeX论文-环境搭建与实时编译指南 很多朋友上手VSCode写LaTeX,容易陷入一个误区:以为编译是编辑器完成的。其实不然,VSCode本身只是个调度员,真正负责把.tex文件变成PDF的,是你系统里安装的xelatex、latexmk这些工具链。环境没配好,插件装再多也
    2分钟前 0