使用 fish 的内置编辑器编辑脚本时如何插入新行?

How to insert new lines when editing some script with fish's built-in editor?

在 fish 中输入多行脚本时 shell,例如我输入了这些脚本

$ for file in *.txt
    echo $file
  end

我的插入符号在 end 之后。现在我想在它之前插入一行,让它像:

$ for file in *.txt
    echo $file
    echo "hello"   // I want to insert this line
  end

但我发现如果我将我的插入符号向上移动到 echo $file 之后,然后按 enter(或 cmd/option/ctrl+enter),它只是 运行 整个脚本而不插入一条新线。我必须将它们复制到另一个编辑器并在编辑后复制回来。

有什么办法吗?


更新:

我刚刚上传了一个屏幕录像https://asciinema.org/a/i7pOWhpdXUu0RLVOAMjVJTXbn。在录音中,我将插入符号移到 echo 之后并按下 option + enter,但它执行了脚本而不是插入新行

在默认绑定中,Alt-Enter 将始终插入一个新行:

> bind|fgrep \n
bind \e\n commandline\ -i\ \n
bind \e\r commandline\ -i\ \n
...

根据您的系统配置,Enter/Return 键可能会发送换行符 (\n) 或 carriage-return 字符 (\r),这就是为什么有两个条目。

fish绑定转义+换行无条件插入换行。在 Mac 上,您通常会按选项 + return。但是 Mac 终端仿真器默认不发送 escape-newline。使用 iTerm2,您可以在 Preferences->Profiles->Keys:

下请求该选项充当转义符

现在绑定将处于活动状态,option-return 将无条件插入换行符。

(如果您愿意,您可以为这种情况添加键映射。)

您可以使用与 fish 一起安装的 fish_key_reader 来确认终端从模拟器接收到的内容。