ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Spaceship Prompt `host` 主机名分段:SSH 场景下的显示控制与自定义配置指南

Spaceship Prompt `host` 主机名分段:SSH 场景下的显示控制与自定义配置指南 Spaceship Prompthost主机名分段SSH 场景下的显示控制与自定义配置指南【免费下载链接】spaceship-prompt✨ Minimalistic, powerful and extremely customizable Zsh prompt项目地址: https://gitcode.com/gh_mirrors/sp/spaceship-prompthost是 Spaceship Prompt 内置分段之一用于在 Zsh 提示符中显示当前机器的主机名。默认情况下该分段仅在通过 SSH 连接远程主机时才会渲染从而帮助你在多台服务器之间切换时快速辨认当前所在机器本指南将完整讲解它的显示时机、完整/缩写主机名切换、全部可配置选项并深入其 源码实现 与 测试用例让你既能开箱即用也能按需深度定制。分段行为概述host分段的核心职责非常单一读取当前机器的主机名并以一个可配置颜色的分段形式输出到提示符中。它有一个非常实用的默认行为——只有检测到 SSH 连接时才显示即环境变量$SSH_CONNECTION非空。这意味着在本地终端中提示符保持简洁不占用空间在远程服务器上主机名自动出现方便你区分现在在哪台机器结合 prompt order 中的默认顺序user→dir→host主机名会出现在当前目录之后、Git 分段之前符合直觉的阅读顺序。在 prompt 配置文档 中可以看到host是内置分段列表中的一员你可以通过spaceship remove host或spaceship add host命令随时从提示符中移除或加回。配置方法配置文件放在哪里所有选项均为环境变量遵循SPACESHIP_SECTION_OPTION的命名规范。你需要将它们写入 Spaceship 的配置文件Spaceship 启动时会自动 source根据 配置入门文档 有两种方式# 方式一~/.spaceshiprc.zsh touch ~/.spaceshiprc.zsh # 方式二放在 ~/.config 或 ~/.config/spaceship 下 mkdir -p ~/.config touch ~/.config/spaceship.zsh配置文件本质是一个.zsh文件因此完全可以使用 zsh 语法循环、条件、自定义函数进行更复杂的逻辑控制。后续所有示例均假定写入上述配置文件或~/.zshrc。始终显示主机名默认情况下host分段只在 SSH 会话中渲染。如果你希望无论本地还是远程都显示主机名将SPACESHIP_HOST_SHOW设置为always即可# 始终显示主机名 SPACESHIP_HOST_SHOWalways从 源码实现 可以看到完整的判定逻辑spaceship_host() { [[ $SPACESHIP_HOST_SHOW false ]] return if [[ $SPACESHIP_HOST_SHOW always ]] || [[ -n $SSH_CONNECTION ]]; then # ...渲染主机名分段 fi }这里存在一个优先级顺序值得注意若SPACESHIP_HOST_SHOW false函数直接返回任何情况下都不渲染即使处于 SSH 会话中若SPACESHIP_HOST_SHOW always无条件渲染否则仅当$SSH_CONNECTION非空即 SSH 连接中时渲染。其中第 2、3 条是或关系只要满足其一即渲染。该行为在 tests/host.test.zsh 中有完整覆盖——SHOWtrue, SSHfalse时输出为空SHOWtrue, SSHtrue时输出at hostnameSHOWalways时无论 SSH 与否都输出SHOWfalse时任何情况都为空。显示完整主机名默认情况下主机名以缩写形式%m显示即去掉域名后缀的短主机名例如web01。如果你希望看到完整信息%M例如web01.example.com将SPACESHIP_HOST_SHOW_FULL设置为true# 显示完整主机名 SPACESHIP_HOST_SHOW_FULLtrue在源码中%m与%M是 Zsh 的 prompt 转义序列最终由 Zsh 在渲染时替换为实际主机名if [[ $SPACESHIP_HOST_SHOW_FULL true ]]; then host%M # 完整主机名含域名 else host%m # 短主机名 fi测试用例 tests/host.test.zsh 同时验证了四种组合SSH 与否 × 完整与否确认%m/%M会原样进入渲染结果并最终由 Zsh 展开。SSH 场景下的颜色区分这是host分段非常实用的一个特性它提供了两套颜色方案让你仅凭颜色就能一眼判断当前是否处于 SSH 会话。从源码中可以看到颜色选择逻辑if [[ -n $SSH_CONNECTION ]]; then host_color$SPACESHIP_HOST_COLOR_SSH else host_color$SPACESHIP_HOST_COLOR fi默认情况下非 SSHSPACESHIP_HOST_SHOWalways时才会出现使用SPACESHIP_HOST_COLOR默认blue蓝色SSH 会话使用SPACESHIP_HOST_COLOR_SSH默认green绿色。例如你可以把 SSH 状态设为醒目的颜色# SSH 会话时用红色警示 SPACESHIP_HOST_COLOR_SSHred测试 tests/host.test.zsh 验证了两种颜色会分别注入渲染结果SSH 连接时使用$SPACESHIP_HOST_COLOR_SSH本地时使用$SPACESHIP_HOST_COLOR。选项总览以下是host分段全部可配置选项与 官方文档 及 源码默认值 完全一致变量默认值说明SPACESHIP_HOST_SHOWtrue是否显示分段true、false或alwaysSPACESHIP_HOST_SHOW_FULLfalse是否显示完整主机名%M而非%mSPACESHIP_HOST_PREFIXat·分段前缀SPACESHIP_HOST_SUFFIX$SPACESHIP_PROMPT_DEFAULT_SUFFIX分段后缀默认继承全局默认后缀SPACESHIP_HOST_COLORblue分段颜色非 SSH 场景SPACESHIP_HOST_COLOR_SSHgreen分段颜色SSH 连接场景关于前缀与后缀SPACESHIP_HOST_PREFIX默认为at·这里的·是文档中用于表示空格的约定符号实际为一个空格渲染效果类似at web01SPACESHIP_HOST_SUFFIX默认引用全局变量$SPACESHIP_PROMPT_DEFAULT_SUFFIX其默认值为一个空格见 prompt 级选项 中的说明。若你修改了全局默认后缀host分段会跟随变化当然也可以单独覆盖。前缀/后缀的渲染行为还受 prompt 级开关影响SPACESHIP_PROMPT_PREFIXES_SHOW与SPACESHIP_PROMPT_SUFFIXES_SHOW控制是否显示前缀与后缀SPACESHIP_PROMPT_FIRST_PREFIX_SHOW控制首个分段的前缀是否显示。渲染逻辑集中在 lib/section.zsh 的spaceship::section::render函数中。深入源码分段是如何渲染出来的host分段本身不直接输出字符串而是调用spaceship::section构造分段数据交给统一的渲染管线处理spaceship::section \ --color $host_color \ --prefix $SPACESHIP_HOST_PREFIX \ --suffix $SPACESHIP_HOST_SUFFIX \ $hostspaceship::section位于 lib/section.zsh它将color、prefix、suffix、content打包为元组随后spaceship::section::renderlib/section.zsh负责拼接最终渲染结果前缀仅在SPACESHIP_PROMPT_PREFIXES_SHOW true且非首个未显示前缀的场景下输出并以粗体渲染内容部分以%{B$color%}设置粗体加颜色输出$symbol$content后缀在SPACESHIP_PROMPT_SUFFIXES_SHOW true时输出。从测试中可以看到 host 分段的实际渲染输出结构tests/host.test.zsh# 非 SSH 短主机名 %{%B%}at %{%b%}%{%B%F{blue}%}%m%{%b%f%}%{%B%} %{%b%} # SSH 连接、完整主机名 %{%B%}at %{%b%}%{%B%F{green}%}%M%{%b%f%}%{%B%} %{%b%}即粗体前缀at 指定颜色的主机名 粗体后缀空格。这些转义序列最终由 Zsh 在绘制提示符时展开为可见文本。常见场景组合场景一本地与远程区分显示保持默认配置即可本地不显示、SSH 自动显示绿色主机名无需任何额外设置。场景二始终显示且区分颜色SPACESHIP_HOST_SHOWalways # 本地也显示 SPACESHIP_HOST_COLORblue # 本地为蓝色 SPACESHIP_HOST_COLOR_SSHgreen # SSH 为绿色场景三完整域名 自定义前缀SPACESHIP_HOST_SHOWalways SPACESHIP_HOST_SHOW_FULLtrue # 显示完整主机名含域名 SPACESHIP_HOST_PREFIXon· # 自定义前缀on host.example.com小结host分段虽然实现简洁sections/host.zsh 全文件仅 46 行却通过SPACESHIP_HOST_SHOW的三态控制、SPACESHIP_HOST_SHOW_FULL的缩写切换、以及SPACESHIP_HOST_COLOR/SPACESHIP_HOST_COLOR_SSH的双色方案覆盖了本地简洁、SSH 醒目、可自定义的完整需求闭环。配合 lib/section.zsh 统一的渲染管线它与其他分段保持一致的样式体系你可以像配置任何其他分段一样放心地调整它无需担心破坏提示符的整体结构。如需进一步了解分段 API 或自定义分段可参考 sections API 文档 与 创建自定义分段指南完整的分段选项规范见 prompt 配置文档。【免费下载链接】spaceship-prompt✨ Minimalistic, powerful and extremely customizable Zsh prompt项目地址: https://gitcode.com/gh_mirrors/sp/spaceship-prompt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表