summaryrefslogtreecommitdiffstats
path: root/docs/zh-CN/faq/README.md
blob: 5702a6712348febc983f6ab598e70d041ccc28ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# 常见问题

## 主页示例图中的效果用的是什么配置?

- **终端模拟器**:[iTerm2](https://iterm2.com/)
  - **主题**:Minimal
  - **颜色方案**:[Snazzy](https://github.com/sindresorhus/iterm2-snazzy)
  - **字体**:[Fira Code Nerd Font](https://www.nerdfonts.com/font-downloads)
- **Shell**:[Fish Shell](https://fishshell.com/)
  - **fish 配置**:[matchai's Dotfiles](https://github.com/matchai/dotfiles/blob/b6c6a701d0af8d145a8370288c00bb9f0648b5c2/.config/fish/config.fish)
  - **提示符工具**:[Starship](https://starship.rs/)

## 如何实现示例图中自动补全的功能?

命令自动补全功能是由您选择的 Shell 提供。 演示中的自动补全由 [Fish Shell](https://fishshell.com/) 完成,它默认开启自动补全。 若您使用 Z Shell (zsh),推荐您查看 [zsh-autosuggestions](https://github.com/zsh-users/zsh-autosuggestions)。

## 顶层配置 `format` 与 `<module>.disabled` 的功能是相同的吗?

是的,他们都可以用来禁用提示符中的组件。 如果你只是想禁用组件,推荐使用 `<module>.disabled`,原因如下:

- 在顶层配置 `format` 里忽略组件与禁用组件相比较,后者更加明确
- 当 Starship 升级后,新组件将能够自动被加入提示符中

## 文档中写 Starship 适用于任何 Shell。 为什么我常用的 Shell 不支持?

Starship 的构建方式决定了它应当能够增加对几乎所有 shell 的支持。 Starship 的二进制文件是无状态、不知道当前 shell 的,所以只要你的 shell 支持自定义提示符和 shell 扩展,就能使用 Starship。

这是一个在 bash 上使用 Starship 的简单例子:

```sh
# 获取最后执行命令的返回值
STATUS=$?

# 获取运行后台程序的数量
NUM_JOBS=$(jobs -p | wc -l)

# 设置提示符为 `starship prompt` 的输出
PS1="$(starship prompt --status=$STATUS --jobs=$NUM_JOBS)"
```

内置于 Starship 的 [Bash 适配](https://github.com/starship/starship/blob/master/src/init/starship.bash) 稍微复杂一些,实现了像 [命令用时统计组件](https://starship.rs/config/#command-duration) 这样的功能,还确保 Starship 能与之前设置的 Bash 配置相兼容。

使用以下命令了解 `starship prompt` 所能接受的所有参数:

```sh
starship prompt --help
```

Starship 会处理所提供的全部上下文参数并在提示符中显示,但没有参数是“必需”的。

## 我如何在 Linux 发行版上使用旧版本 glibc 运行 Starship?

若您在使用预构建的程序时,遇到类似“_version 'GLIBC_2.18' not found (required by starship)_”的错误(例如在 CentOS 6 或 7 里运行)您可以使用 `musl` 的编译版本,而非 `glibc` 版本。

```sh
curl -sS https://starship.rs/install.sh | sh -s -- --platform unknown-linux-musl
```

## 为什么我会遇到 `Executing command "..." timed out.` 警告?

Starship 会执行数个不同的命令来获取应该显示的信息,例如某个程序的版本号、现在 Git 的工作树状态。 为保证 Starship 不会在执行某条命令时卡住,Starship 会终止执行时间过长的命令并且输出以上警告。这是正常现象。 若希望增加时长限制,它可以在 [`command_timeout` 设置](../config/#prompt) 处自定义。 您也可以按照下文的调试步骤查看并优化运行慢的命令。 最后,您也可以设置环境变量 `STARSHIP_LOG``error` 来隐藏这些警告。

## 我不理解某些符号,它们是什么意思?

若您不清楚某些符号,可以使用 `starship explain` 查看正在显示的组件。

## Starship 运行不正常,我该如何调试?

您可以使用环境变量 `STARSHIP_LOG` 来开启调试日志。 这些日志可能过于详细,所以更常使用 `module` 来调试特定的组件。例如要调试 `rust` 组件,您可以使用下列命令来获取它的日志和输出。

```sh
env STARSHIP_LOG=trace starship module rust
```

If starship is being slow you can try using the `timings` command to see if there is a particular module or command that is to blame.

```sh
env STARSHIP_LOG=trace starship timings
```

它会输出日志,并且记录有输出的组件、运行时长超过 1 毫秒的组件。

最后,如果发现了 bug,请使用 `bug-report` 命令创建 GitHub 议题。

```sh
starship bug-report
```

## 为什么我在提示符中看不到某个字符?

最常见的原因是系统配置有问题。 有个别Linux发行版不自带对字体的支持。 请确保:

- 您的字符集应设置为 UTF-8,例如 `de_DE.UTF-8``ja_JP.UTF-8`。 若 `LC_ALL` 不是 UTF-8, [你需要手动设置它](https://www.tecmint.com/set-system-locales-in-linux/)。
- 安装了 emoji 字体。 大部分系统都会自带 emoji 字体,但有些系统(例如 Arch Linux)则没有。 字体一般可以用系统的包管理器安装,常见的字体有 [Noto emoji](https://www.google.com/get/noto/help/emoji/) 等。
- 您正在使用 [Nerd Font](https://www.nerdfonts.com/)。

在终端内运行以下命令来测试:

```sh
echo -e "\xf0\x9f\x90\x8d"
echo -e "\xee\x82\xa0"
```

第一行应该显示出一个[蛇的 emoji](https://emojipedia.org/snake/),第二行应该显示出 [powerline 的分支符号(e0a0)。](https://github.com/ryanoasis/powerline-extra-symbols#glyphs).

若任一符号显示错误,则您的系统配置不正确。 有些时候正确配置字体并不简单。 Discord 里的用户或许能提供帮助。 若两个字符显示正确,但您仍然不能在 Starship 中看到那个字符,请 [提交错误报告](https://github.com/starship/starship/issues/new/choose)!

## 如何卸载 Starship?

Starship 的卸载过程与安装过程一样简单。

1. 将 shell 的配置文件(比如 `~/.bashrc`)中初始化 Starship 的部分全部删除。
1. 删除 Starship 的二进制文件。

如果 Starship 是用包管理器安装的,请到包管理器的文档中查找卸载的步骤。

如果 Starship 是用安装脚本安装的,可以用以下命令删除二进制文件:

```sh
# 找到并且删除 Starship 二进制文件
sh -c 'rm "$(command -v 'starship')"'
```

## 我如何在没有 `sudo` 的情况下安装 Starship?

Shell 安装脚本(`https://starship.rs/install`) 只尝试使用 `sudo`当安装目录不可被当前用户写入 The default installation directory is the value of the `$BIN_DIR` environment variable or `/usr/local/bin` if `$BIN_DIR` is not set. 如果你使用一个用户可写的安装目录替代, 你应该可以不使用 `sudo` 安装 Starship 例如, `curl -sS https://starship.rs/install.sh | sh -s -- -b ~/.local/bin` 使用 `-b` 选项设置安装目录到 `~/.local/bin`

对于非交互 Starship 安装, 请添加 `-y` 以跳过确认 查看安装脚本源码以获取所有支持的选项

当使用包管理器时, 查询包管理器关于有无`sudo`安装的文档