2016-05-07 1 views
4

Для тех из вас, кто не знает, по умолчанию в OSX, ctrl + h работает так же, как и backspace.`git add -p` не работает с Ctrl + h

По какой-то причине во время работы git add -p, если я набираю неправильный ключ, ctrl+h не поддерживает обратное, а вместо этого объявления ^H.

Кто-нибудь знает, почему это работает по-другому, чем ожидалось?

Кто-нибудь знает, есть ли способ заставить его работать так, как мне хотелось бы?

+0

Вы используете bash? –

+0

Да, используя bash для запуска программы 'git-add', где я вижу эту проблему. – BananaNeil

ответ

3

У этого есть мало (не совсем ничего), чтобы сделать с Git специально.

Проблема заключается в том, что обратное пространство ключ дополнительно отправляет либо ASCII DEL, либо control-H, тогда как управление-H отправляет управление-H. Некоторые программы, включая большинство редакторов и популярных оболочек, обрабатывают оба ключа как «удалить предыдущий символ».

Другие, как вы видели, нет.

Здесь есть разные варианты. Тот, который я использую, - это изменить ключ backspace для отправки control-H и настроить мои настройки stty, чтобы отметить control-H как клавишу «удалить предыдущий символ». Вы найдете флажок «Удалить посылает Control-H» на вкладке «Дополнительно» в настройках терминала (сменяется для каждого профиля).

Для stty настройки, вам просто нужно добавить строку stty erase ^H к вашим .login или .profile или какому-либо другому файлу, который запускается при создании нового окна оболочки; но будьте осторожны, чтобы установить это только в том случае, если оболочка является интерактивной оболочкой, которую вы можете сказать, проверив начальное приглашение оболочки (или какой-нибудь другой, более специфичный для оболочки метод, который, очевидно, будет зависеть от того, какую оболочку вы используете).

+0

Не могли бы вы рассказать о том, как установить «stty», чтобы пометить control-H как «удалить предыдущий символ»? – BananaNeil

+0

ОК, ну, со всем здравым смыслом :-) Я на самом деле использую 'tcsh', поэтому я просто имею это в' .login': 'stty erase^H kill^X status^T eol2 undef' (обратите внимание, персонажи на самом деле написаны как шляпа/смена-шесть, а затем символ). На самом деле это внутри предложения «if» с некоторыми небольшими вариантами для систем, для которых нет настроек «status» и/или «eol2», но для MacOSX здесь нет никаких проблем. Это параметр 'erase^H', который устанавливает control-H как delete-previous-character. – torek