Starship搭配fish shell时,如何恢复iTerm2的Prompt标记功能?
Starship搭配fish shell时,如何恢复iTerm2的Prompt标记功能?
我之前用fish shell搭Starship的时候,也踩过这个坑——本来iTerm2的shell集成里,按⌘-shift-↑就能快速跳转到上一个prompt标记,结果装了Starship之后这功能直接哑火了,好在折腾了一阵找到了解决办法,跟你唠唠:
首先得搞明白问题根源:iTerm2的这个跳转标记功能,是靠在每个prompt的开头和结尾插入特定的ANSI控制码来识别的,但Starship作为自定义prompt工具,默认会接管整个prompt的输出,压根没把这些控制码包含进去,所以iTerm2就认不出每个prompt的标记点了。你说imgcat这类功能正常,说明iTerm2的shell集成本身是好的,就是prompt的标记码没被正确插进去而已。
下面给你两种可行的解决办法,选个顺手的来就行:
方法一:修改Starship配置文件
- 打开你的Starship配置文件,一般路径是
~/.config/starship.toml(如果没这个文件,直接新建一个就行) - 在文件里添上这段配置:
这里我用了iTerm2 shell集成已经定义好的环境变量,避免硬写乱七八糟的控制码,兼容性更好。保存完配置后,新开一个iTerm2窗口试试,按⌘-shift-↑应该就能正常跳转了。[custom.iterm2_prefix] command = "echo -n \"$__iterm2_prompt_prefix\"" when = true format = "$output" [custom.iterm2_suffix] command = "echo -n \"$__iterm2_prompt_suffix\"" when = true format = "$output"
方法二:修改fish的prompt函数
要是不想动Starship的配置,也可以直接改fish的fish_prompt函数,把iTerm2的标记包在Starship的prompt外面:
- 打开fish的配置文件
~/.config/fish/config.fish - 添加或者修改
fish_prompt函数:function fish_prompt echo -n "$__iterm2_prompt_prefix" starship prompt --status $status echo -n "$__iterm2_prompt_suffix" end - 保存后新开窗口测试,跳转功能应该就恢复了。
其实这俩方法本质都是一个意思:把iTerm2需要的控制码插到每个prompt的前后,让iTerm2能重新识别到标记点。我自己用的是第一种方法,感觉更贴合Starship的配置逻辑,你可以都试试~
备注:内容来源于stack exchange,提问作者Evan




