Я прочитал в другом посте, что можно ввести CtrlJили CtrlMвместо Returnклавиши в терминале, что здорово. Но я хочу иметь возможность изменить это на другую комбинацию, например: Ctrlspacebar. Я пробовал переназначить F1клавишу, но безрезультатно.
Это возможно?
решение1
Зависит от того, что именно вы хотите сделать.
Терминалы имеют два основных режима, оба из которых можно настроить с помощью дополнительных параметров:
- Режим cooking/canonical. В этом режиме терминал поставляется с внутренним редактором строк, где символы
^H
(или^?
),^W
,^U
(или@
),^V
(или\
) могут использоваться для редактирования строки. Ничего не отправляется в приложение, считывающее с терминального устройства, пока символ^J
не будет получен. - сыройрежим. Где каждый символ доступен для чтения приложению, считывающему терминальное устройство, сразу после его ввода, или после задержки, или после того, как было введено определенное количество символов в зависимости отвремяиминпараметры, но в любом случае не с помощью этого внутреннего редактора строк.
В обоих случаях ^M
символ (CR) может быть автоматически преобразован в ^J
(LF) (или проигнорирован для тех терминалов, которые отправляют и CR, и LF при нажатии Enter).
Первый режим — это режим терминала по умолчанию. Второй режим используется приложениями вроде zsh
, bash
или vi
, которые хотят взять под контроль редактирование строк.
В первом режиме нельзя изменить символ, используемый для принятия строки.
Но вы можете сказать своему терминалу, чтобы он отправлял ^J
символ при нажатии той или иной клавиши. Например, с помощью xterm
вы можете использовать translations
ресурс X11, чтобы изменить сопоставление клавиш и сказать ему отправлять все, что вы хотите, при нажатии данной клавиши. Если ваш терминал не поддерживает переназначение клавиатуры, вы все равно можете использовать GNU, screen
чтобы он сделал перевод за вас. Например, если ваш терминал отправляет ^[OP
последовательность символов при нажатии F1, вы можете добавить
bindkey \033OP "\012"
чтобы вы ~/screenrc
сказали ему отправлять LF, когда вы нажимаетеF1
Во втором случае, когда приложения берут под контроль ввод, вы по-прежнему можете использовать тот же подход, что и выше, но вы также можете настроить каждое отдельное приложение так, чтобы оно делало то или это при нажатииF1
Например, с помощью zsh
, символ LF привязан к accept-line
zsh
виджету. Вы можете сделать:
bindkey "^[OA" accept-line
иметь F1привязку к этому же виджету.
Обратите внимание, что Ctrl+Spaceобычно отправляется символ NUL, который можно обозначить как \0
или ^@
.