Как предотвратить закрытие iterm2 при наборе Ctrl-D (EOF)

Я использую рыбью скорлупу. Когда я набираю Ctrl-D, он отправляет EOF на мой терминал, а затем терминал закрывается.

Я хочу сделать так, чтобы ctrl-D не закрывал мой iterm2.

Я видел, что люди настроили IGNOREEOF в оболочке bash следующим образом: https://unix.stackexchange.com/questions/27588/how-can-i-keep-controld-from-disconnecting-my-session

Однако я не думаю, что эта переменная существует у рыб. Кто-нибудь знает, как я могу заставить iterm2 (с оболочкой рыбы по умолчанию) не закрываться при нажатии ctrl-D?


person Darin    schedule 11.12.2015    source источник
comment
Это лечится на уровне оболочки, поэтому не имеет ничего общего с iTerm2.   -  person 4ae1e1    schedule 11.12.2015
comment
(В качестве альтернативы вы можете сопоставить ^D для отправки чего-то еще в iTerm2, включая «Игнорировать», но я не думаю, что это хорошая идея. Чтобы ограничить эффект рыбой, создайте специальный профиль с именем рыба или что-то в этом роде, а затем используйте автоматическое переключение профилей iTerm2. .)   -  person 4ae1e1    schedule 11.12.2015
comment
Вы правы, сэр. Это может быть один из вариантов. Я просто не могу не задаться вопросом, есть ли какой-нибудь эксперт по рыбе, который также использует iterm2, что они используют, чтобы предотвратить это :)   -  person Darin    schedule 11.12.2015
comment
Неправда, что это не имеет никакого отношения к терминалу. Некоторые терминалы можно настроить так, чтобы вкладка/окно не закрывались при выходе из программы.   -  person Gringo Suave    schedule 19.10.2018


Ответы (3)


Это привязка клавиш по умолчанию для control-D:

bind \cd delete-or-exit

вы можете найти это, просто запустив bind.

(delete-or-exit — это просто функция, которую вы можете прочитать с помощью functions delete-or-exit.)

Так что это выход, потому что это поведение по умолчанию. Вы можете заставить Control-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, чтобы сохранить его.
person ridiculous_fish    schedule 11.12.2015
comment
Вы также можете запустить bind \cd, чтобы получить привязку именно для этого. - person faho; 11.12.2015
comment
Хорошо, я создал функцию, похожую на «удалить или выйти», и привязал ее к \cd, теперь C-d не выйдет, а выполнит другую команду, которую я всегда использую. - person CodyChan; 17.11.2016

Прочитав этот вопрос и ответ, я обновил свою функцию удаления или выхода, чтобы запросить подтверждение, а не полностью деактивировать ее:

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 выше). Возможно, у кого-то есть решение этого.

person Gringo Suave    schedule 19.10.2018

Вместо того, чтобы назначать другое действие Ctrl+d, вы также можете отменить его привязку через bind --erase --preset \cd. Со всеми шагами:

  • Запустите funced fish_user_key_bindings, чтобы начать редактирование
  • Поместите bind --erase --preset \cd в функцию
  • Нажмите «Возврат», чтобы создать функцию
  • Запустите funcsave fish_user_key_bindings, чтобы сохранить его.
person Zoltan Kochan    schedule 16.01.2020