Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何在键入Ctrl-D(EOF)时防止iterm2关闭_Shell_Unix_Fish_Iterm2 - Fatal编程技术网

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

Shell 如何在键入Ctrl-D(EOF)时防止iterm2关闭,shell,unix,fish,iterm2,Shell,Unix,Fish,Iterm2,我用的是鱼壳。当我键入Ctrl-D时,它会向我的终端发送一个EOF,然后终端关闭 我想让ctrl-D不会关闭我的iterm2 我看到人们在bash shell中设置IgnoreOf如下: 然而,我不认为这个变量存在于鱼类中。有人知道我如何强制iterm2(使用默认的鱼壳)在ctrl-D上不关闭吗?这是control-D的默认键绑定: bind \cd delete-or-exit 您可以通过运行bind找到这一点 (删除或退出只是一个函数,您可以使用函数删除或退出读取该函数) 所以它退出是因为

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

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

我看到人们在bash shell中设置IgnoreOf如下:


然而,我不认为这个变量存在于鱼类中。有人知道我如何强制iterm2(使用默认的鱼壳)在ctrl-D上不关闭吗?

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

bind \cd delete-or-exit
您可以通过运行
bind
找到这一点

删除或退出
只是一个函数,您可以使用
函数删除或退出
读取该函数)

所以它退出是因为默认行为是这样的。你可以让control-D做些别的事情。例如,可能应该删除光标下的字符:

bind \cd delete-char
如果要将其永久化,请将其添加到
fish\u user\u key\u绑定中
函数:

  • 运行
    funced fish\u user\u key\u绑定,开始编辑
  • 在函数中放置
    bind\cd delete char
  • 点击return创建函数
  • 运行
    funcsave fish\u user\u key\u绑定来保存它

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

    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 case)。也许有人有办法解决这个问题。

    您也可以通过
    bind--erase--preset\cd
    解除绑定,而不是为
    Ctrl+d
    指定不同的操作。通过所有步骤:

    • 运行
      funced fish\u user\u key\u绑定,开始编辑
    • bind--erase--preset\cd
      放入函数中
    • 点击return创建函数
    • 运行
      funcsave fish\u user\u key\u绑定来保存它

    这是在shell级别上处理的,因此它与iTerm2无关。(或者,您可以映射
    ^D
    以发送iTerm2中的其他内容,包括“忽略”,但我认为这不是一个好主意。要限制对fish的影响,请使用名为“fish”的专用配置文件或其他内容,然后使用iTerm2的自动配置文件切换。)你说得对,先生。这可能是一种选择。我不禁想知道,是否有任何鱼类专家也使用iterm2,他们用什么来防止这种情况发生:)这不是真的,它与终端无关。一些终端可以设置为在程序退出时不关闭选项卡/窗口。您也可以运行
    bind\cd
    来获取绑定。很好,我创建了一个类似于delete或exit的函数,并将其绑定到\cd,现在,C-d不会退出,而是执行另一个我经常使用的命令。