Shell 如何在键入Ctrl-D(EOF)时防止iterm2关闭
我用的是鱼壳。当我键入Ctrl-D时,它会向我的终端发送一个EOF,然后终端关闭 我想让ctrl-D不会关闭我的iterm2 我看到人们在bash shell中设置IgnoreOf如下: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找到这一点 (删除或退出只是一个函数,您可以使用函数删除或退出读取该函数) 所以它退出是因为
然而,我不认为这个变量存在于鱼类中。有人知道我如何强制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
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绑定来保存它
^D
以发送iTerm2中的其他内容,包括“忽略”,但我认为这不是一个好主意。要限制对fish的影响,请使用名为“fish”的专用配置文件或其他内容,然后使用iTerm2的自动配置文件切换。)你说得对,先生。这可能是一种选择。我不禁想知道,是否有任何鱼类专家也使用iterm2,他们用什么来防止这种情况发生:)这不是真的,它与终端无关。一些终端可以设置为在程序退出时不关闭选项卡/窗口。您也可以运行bind\cd
来获取绑定。很好,我创建了一个类似于delete或exit的函数,并将其绑定到\cd,现在,C-d不会退出,而是执行另一个我经常使用的命令。