Korn Shell: fin, pgup, pgdown et suppression de clé ne fonctionne pas

8

Donc , fondamentalement , mon End, Pageup/ Pagedown, et la Deleteclé ne fonctionnent pas dans ksh93. J'utilise FreeBSD d'ailleurs.

Mes touches fléchées fonctionnent, tout comme ma touche d'accueil.

Ces clés fonctionnent quand je mets ça dans mon .kshrc

set -o emacs

J'ai essayé de faire CELA , en mettant ceci dans mon .kshrc. Pour faire fonctionner la Endclé.

alias __Y=`echo "\005"`     # end = ^e = end of line

J'ai ouvert vim, j'ai appuyé Ctrlvet tapé 005. Et ils se ^Esont présentés. Pourtant, rien n'a fonctionné.

Quelqu'un sait de toute façon que ces clés fonctionnent?

De plus, chaque fois que j'appuie sur ces touches, il imprime a ~. Je sais aussi que je pourrais utiliser Ctrld, ou Ctrla, je ne veux PAS les utiliser.

shix
la source

Réponses:

7

Cette réponse est spécifique à certains émulateurs de terminaux, je ne pense pas qu'elle puisse être généralisée en dehors de Solaris.

Dans ksh, appuyez sur Ctrl+ Vpuis End. Cela insérera un caractère d'échappement littéral suivi du reste de la séquence d'échappement envoyée par la clé. Par exemple, vous pourriez voir ^[[4~(le ^[début est en fait un caractère d'échappement, non ^suivi de [). Faites de même pour les autres touches de curseur que vous souhaitez reconfigurer.

Dans votre .kshrc, définissez un trap KEYBD pour traduire les séquences d'échappement des touches de fonction dans les liaisons pour les commandes que vous souhaitez invoquer. Par exemple (vous devrez peut-être ajuster les séquences d'échappement - notez que l'intérieur de $'…',\ e` signifie un caractère d'échappement):

keybd_trap () {
  case ${.sh.edchar} in
    $'\e[1~') .sh.edchar=$'\001';; # Home = beginning-of-line
    $'\e[4~') .sh.edchar=$'\005';; # End = end-of-line
    $'\e[5~') .sh.edchar=$'\e>';; # PgUp = history-previous
    $'\e[6~') .sh.edchar=$'\e<';; # PgDn = history-next
    $'\e[3~') .sh.edchar=$'\004';; # Delete = delete-char
  esac
}
trap keybd_trap KEYBD
set -o emacs
Gilles 'SO- arrête d'être méchant'
la source
Merci pour l'aide. Mais maintenant, je reçois une erreur qui dit .kshrc: ligne 6: erreur de syntaxe: ')' inattendu
shix
Juste là où se trouve la pièce keybd_trap () {.
shix
1
@shix Désolé, il y avait une faute de frappe (une parenthèse supplémentaire sur chaque ligne de cas), corrigée maintenant.
Gilles 'SO- arrête d'être méchant'
Hou la la! Merci beaucoup. J'ai ce problème depuis un moment maintenant.
shix