You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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配置文件

  1. 打开你的Starship配置文件,一般路径是~/.config/starship.toml(如果没这个文件,直接新建一个就行)
  2. 在文件里添上这段配置:
    [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"
    
    这里我用了iTerm2 shell集成已经定义好的环境变量,避免硬写乱七八糟的控制码,兼容性更好。保存完配置后,新开一个iTerm2窗口试试,按⌘-shift-↑应该就能正常跳转了。

方法二:修改fish的prompt函数

要是不想动Starship的配置,也可以直接改fish的fish_prompt函数,把iTerm2的标记包在Starship的prompt外面:

  1. 打开fish的配置文件~/.config/fish/config.fish
  2. 添加或者修改fish_prompt函数:
    function fish_prompt
        echo -n "$__iterm2_prompt_prefix"
        starship prompt --status $status
        echo -n "$__iterm2_prompt_suffix"
    end
    
  3. 保存后新开窗口测试,跳转功能应该就恢复了。

其实这俩方法本质都是一个意思:把iTerm2需要的控制码插到每个prompt的前后,让iTerm2能重新识别到标记点。我自己用的是第一种方法,感觉更贴合Starship的配置逻辑,你可以都试试~

备注:内容来源于stack exchange,提问作者Evan

火山引擎 最新活动