Fish 滚动;太长了”;命令不';我不能正常工作

Fish 滚动;太长了”;命令不';我不能正常工作,fish,Fish,假设我想调用一个有很多选项的工具,比如: $ somescript --option1 --option2 --option3 --option4 --option5 whatever even more stuff 但是终端的宽度不允许在一条“单行线”上有那个东西 这本身不是一个问题,但是对于fish来说,滚动是一个问题 当我输入超宽命令时,在某个点上,将出现换行: $somescript--option1--option2--option3--option4--option5 还有更多的东

假设我想调用一个有很多选项的工具,比如:

$ somescript --option1 --option2 --option3 --option4 --option5 whatever even more stuff
但是终端的宽度不允许在一条“单行线”上有那个东西

这本身不是一个问题,但是对于fish来说,滚动是一个问题

当我输入超宽命令时,在某个点上,将出现换行:

$somescript--option1--option2--option3--option4--option5

还有更多的东西吗

到目前为止一切都很好。在输入如此冗长的命令时,我可以在任意点前后滚动。一切正常。所以,假设我输入了命令,犯了一个错误,现在想删除——选项4

正常情况:使用“向上箭头”在历史记录中访问该命令,然后使用“向左箭头”在命令中滚动。现在奇怪的事情发生了

当光标位于第二行内时,一切正常。但是当光标移动到第一行时。。。再进行3到5次“向左箭头”笔划后,光标向上移动另一行。然后它位于命令的第一行上方。还有几个字符的垂直跳跃

换句话说:只要命令的长度超过终端的宽度,我就无法可靠地滚动到第一行。光标显示在某个地方,很难猜测它在任何时刻的实际位置。这使得几乎不可能编辑第一行中的任何内容

这是在MacOs上,使用通过brew安装的iterm 3.2.9和fish 3.0.2版。

在github上记录了缺陷。结果相当令人沮丧

问题是:Mac终端都以错误的方式处理某些unicode字符。“正常情况下”这不是问题,但是当您使用其中一个fish提示来显示git状态时(比如
AcidHub
这是我最喜欢的)。。。鱼无法计算/确定确切的线宽,你就这样做了

因此,基本上,在MacOs上使用fish时,选项空间仅限于:

  • 使用默认值(使用特殊提示时,如
    AcidHub
    将导致滚动问题)
  • 相应地调整fish提示符(在我的例子中,我用更简单的东西替换了所有特殊的unicode字符)。它看起来不太好,但滚动只是再次工作
这个问题有一个完全不同的、出乎意料的解决方案:我在Mac上使用了iterm2,而iterm2刚刚添加了一个“状态栏”部分。这可以很容易地配置,当然,它已经有一个状态栏组件,可以告诉您git状态

因此,我的解决方案是:我将fish提示符改为只提供PWD,AcidHub提示符必须提供的所有其他内容现在都是“iterm2状态栏”组件

在github上记录了缺陷。结果相当令人沮丧

问题是:Mac终端都以错误的方式处理某些unicode字符。“正常情况下”这不是问题,但是当您使用其中一个fish提示来显示git状态时(比如
AcidHub
这是我最喜欢的)。。。鱼无法计算/确定确切的线宽,你就这样做了

因此,基本上,在MacOs上使用fish时,选项空间仅限于:

  • 使用默认值(使用特殊提示时,如
    AcidHub
    将导致滚动问题)
  • 相应地调整fish提示符(在我的例子中,我用更简单的东西替换了所有特殊的unicode字符)。它看起来不太好,但滚动只是再次工作
这个问题有一个完全不同的、出乎意料的解决方案:我在Mac上使用了iterm2,而iterm2刚刚添加了一个“状态栏”部分。这可以很容易地配置,当然,它已经有一个状态栏组件,可以告诉您git状态


因此,我的解决方案是:我将fish提示符改为只提供PWD,AcidHub提示符必须提供的所有其他内容现在都是“iterm2状态栏”组件

这种行为通常意味着鱼和你的终端对某些字符的宽度有不同的想法。如果您的命令只包含ASCII字符,那么这不是问题所在,但是如果您有任何非ASCII字符(例如,表情符号),那么这是第一件要调查的事情。此外,对于复杂的编辑,您还可以告诉fish通过[meta-e]或[meta-v]或您绑定了
edit\u command\u buffer
功能的任何键将您放入真正的编辑器中。您应该在@KurtisRader打开一个bug报告,我最终编写了一个缺陷,结果相当令人沮丧(请参阅我的自我回答)。这不是一个fish bug,而是一个通用的macosunicode/terminal问题。这种行为通常意味着fish和您的终端对某些字符的宽度有不同的想法。如果您的命令只包含ASCII字符,那么这不是问题所在,但是如果您有任何非ASCII字符(例如,表情符号),那么这是第一件要调查的事情。此外,对于复杂的编辑,您还可以告诉fish通过[meta-e]或[meta-v]或您绑定了
edit\u command\u buffer
功能的任何键将您放入真正的编辑器中。您应该在@KurtisRader打开一个bug报告,我最终编写了一个缺陷,结果相当令人沮丧(请参阅我的自我回答)。这不是一个鱼虫,而是一个通用的MacOs unicode/终端。提示符可以显示git状态,但不能使用这些字符。fish的许多示例提示使用其他字符显示git状态。它们位于tools/web\u config/sample\u提示中,您的系统上也有这些提示,很可能位于/usr/local/share/fish(或fish repo中的share/下)。一个简单的搜索显示acidhub、classic_vcs、Informational_vcs、lonetwin、nim、robbyrussell、sorin、terlar都有某种形式的vcs支持。或者编写您自己的-fish提供
fish_vcs_提示符
帮助函数,该函数根据需要调用
fish_git_提示符
fish_hg_提示符
\u fish_svn_提示符