Bash: я хочу напечатать тильду. Нажатие F10 дает мне «1 ~» вместо просто «~»

526
user3055163

Ранее я мог выводить символ тильды на моем терминале bash, нажав F10. Теперь, когда я нажимаю F10, я получаю два символа: «1 ~». То же самое касается F9 / F11 / F12. Как ни странно, другие функциональные клавиши F1-F8 дают мне тильду, но я хочу, чтобы F10 была моей тильдой.

Любые идеи, как это исправить?

0
вам, вероятно, нужно создать новую раскладку клавиатуры для ваших целей. В Windows это можно сделать с помощью [MSKLC] (https://superuser.com/q/695293/241386). [Итальянская клавиатура: ввод символов тильды (~) и задней черты (`) без изменения раскладки клавиатуры] (https://superuser.com/q/667622/241386) phuclv 5 лет назад 0

3 ответа на вопрос

8
grawity

Ни одна из этих клавиш не является тильдой. Все они генерируют последовательность из нескольких символов, например, ESC [24~для F12ключа или ESC [15~для F5ключа (хотя F1-F4 немного отличаются), или даже ESC [5~для PgUpключа.

Единственная причина, по которой вы получаете тильду, заключается в том, что синтаксический анализатор последовательности клавиш Bash использует общую часть, которую он знает ( ESC [2), и останавливается, как только узнает, что полная последовательность будет неизвестна. Все, что следует (не обязательно тильда!), Интерпретируется отдельно.

Обратите внимание, что это поведение может отличаться в программах на основе терминала: Bash (readline) имеет свой собственный код для интерпретации специальных ключей, Vim имеет свой собственный, Irssi снова имеет свой собственный. Некоторые программы могут полностью распознать ваше нажатие клавиши как F10 (и, следовательно, игнорировать его).


Чтобы создать F10реальный ключ тильды в глобальном масштабе (для всей ОС), найдите инструменты «переназначения ключа» (возможно, AutoHotkey).


Чтобы сделать F10тильду во всех программах, работающих с терминалом, выполните поиск в настройках терминала. (Терминал в данном случае относится к ConEmu.)

Терминал может иметь свою собственную функцию для переопределения отдельных ключей или, возможно, создания «макросов». (The ConEmu документация предполагает определение макроса с print(…)действием) .


Чтобы сделать F10тильду в Bash (но только Bash):

  1. Убедитесь, что ваш эмулятор терминала (ConEmu) не привязал F10 к какой-либо своей функции. (Обычная клавиша F10 обычно ни к чему не привязана, однако Shift + F10 - это стандартная клавиша для открытия меню «щелчка правой кнопкой мыши».)

  2. В bash нажмите CtrlV(буквальная вставка) и затем F10 . Вы увидите последовательность, как ^[[21~.

    (Начальная ^[буква представляет ESC, а остальные - буквальные символы.)

    Если в этот момент, ключ не вставить любую последовательность вообще, это означает, что он был захвачен самим терминалом или другой программой - вернуться к шагу 1.

  3. Откройте (или создайте) ~/.inputrcфайл в текстовом редакторе.

  4. Добавьте эту строку, взяв последовательность из шага # 2 и заменив ^[на \e:

    "\e[21~": "~" 

    Это говорит inputrc вставить ~после получения ESC [21~.

  5. Снова откройте оболочку Bash (или нажмите CtrlX, CtrlRчтобы перезагрузить inputrc).

`~ / .inputrc` для библиотеки` readline (3) `. Программы, отличные от Bash, также могут его использовать, а некоторые и используют. +1 тем не менее. Kamil Maciorowski 5 лет назад 0
2
Art Gertner

Какую раскладку клавиатуры вы используете?

~Прямо над Tabстандартной клавиатурой США есть специальная тильда .

enter image description here

Многие европейские клавиатуры славятся тем, что [не хватает клавиш тильды (~) и backtick (`)] (https://superuser.com/q/667622/241386) phuclv 5 лет назад 2
-1
user3055163

Я исправил это, удалив ~ .inputrc, который в любом случае не имел ничего полезного.

Можете ли вы объяснить * почему * устранение этой проблемы? В частности, рассмотрим следующего человека с этой проблемой ... какую информацию им нужно учитывать, чтобы определить, решит ли это проблему для них? Twisty Impersonator 5 лет назад 2