键入Ctrl-D(EOF)时如何防止iterm2关闭

时间:2015-12-11 05:41:58

标签: shell unix fish iterm2

我正在使用鱼壳。当我输入Ctrl-D时,它会向我的终端发送一个EOF,然后终端关闭。

我想让ctrl-D不关闭我的iterm2。

我看到人们在bash shell中设置了IGNOREEOF,如下所示:https://unix.stackexchange.com/questions/27588/how-can-i-keep-controld-from-disconnecting-my-session

但是,我并不认为这个变量存在于鱼类中。有没有人知道我怎么能强制iterm2(默认鱼壳)不能关闭ctrl-D?

3 个答案:

答案 0 :(得分:9)

这是control-D的默认键绑定:

bind \cd delete-or-exit

只需运行bind即可找到。

delete-or-exit只是一个函数,您可以使用functions delete-or-exit阅读。)

所以它正在退出,因为这是默认行为。你可以让控制-D做其他事情。例如,也许它应该删除光标下的字符:

bind \cd delete-char

如果您想永久保留此功能,请将其添加到fish_user_key_bindings功能:

  1. 运行funced fish_user_key_bindings开始编辑
  2. bind \cd delete-char放在函数
  3. 点击返回创建功能
  4. 运行funcsave fish_user_key_bindings以保存

答案 1 :(得分:2)

阅读此问题和答案后,我更新了删除或退出功能以要求确认,而不是完全停用它:

cd ~/.config/fish/functions/
cp /usr/share/fish/functions/delete-or-exit.fish .

然后编辑/替换:

function delete-or-exit

    set -l cmd (commandline)

    switch "$cmd"
        case ''
            read --nchars 1 --local -P 'Do you want to exit? [y/N] ' confirm
            switch $confirm
                case Y y
                    exit 0
                case '' N n
                    echo -n (fish_prompt)
            end

        case '*'
            commandline -f delete-char
    end
end

它有一个小问题:完成时会显示两次提示,但如果不打印,似乎比没有提示要好(请参见上面的N例)。也许有人对此有解决方案。

答案 2 :(得分:0)

您也可以通过@AndroidFindBy(accessibility = "Error Message") private MobileElement ERROR_MESSAGE; 取消绑定,而不必为Ctrl+d分配其他操作。完成所有步骤:

  • 运行bind --erase --preset \cd,开始编辑
  • funced fish_user_key_bindings放在函数中
  • 点击返回以创建函数
  • 运行bind --erase --preset \cd保存