Сделайте так, чтобы стрелки и клавиши удаления работали в командной строке KornShell - PullRequest
18 голосов
/ 26 октября 2009

Я новичок в Unix и использую Sun Solaris (я думаю, v10). Моя оболочка установлена ​​как KornShell (ksh).

Мне интересно, как заставить работать клавиши со стрелками и клавиши удаления в командной строке. Я сделал set -o Emacs и Backspace работает, но не клавиши со стрелками и клавиши удаления.

Также можно настроить клавиши со стрелками вверх и вниз для циклического просмотра истории командной строки?

Ответы [ 4 ]

32 голосов
/ 29 марта 2010

Для клавиш со стрелками вы можете поместить это в ваш файл .kshrc в вашем домашнем каталоге:

set -o emacs
alias __A=`echo "\020"`     # up arrow = ^p = back a command
alias __B=`echo "\016"`     # down arrow = ^n = down a command
alias __C=`echo "\006"`     # right arrow = ^f = forward a character
alias __D=`echo "\002"`     # left arrow = ^b = back a character
alias __H=`echo "\001"`     # home = ^a = start of line
alias __Y=`echo "\005"`     # end = ^e = end of line

Обратите внимание, что перед буквами слева от знака равенства стоят два символа подчеркивания. На правой стороне равного, цель состоит в том, чтобы получить правильный управляющий символ, назначенный псевдониму. Этот скрипт делает это, выполняя команду (через back-tics)

echo "\020"

, чтобы получить контрольный символ, назначенный на __B.

9 голосов
/ 30 ноября 2012

Я использовал следующее и работает нормально:

set -o emacs

Примечание: это фактические управляющие символы. В vi введите i ctrl-v, затем ctrl-P (если вы хотите ctrl-p)

alias _A=^P
alias _B=^N
alias _D=^B
alias _C=^F

и добавьте также строки ниже:

alias __A=^P
alias __B=^N
alias __D=^B
alias __C=^F
7 голосов
/ 02 декабря 2009

Не борись с этим. Просто попросите администратора изменить оболочку по умолчанию на bash. bash входит в состав Solaris 10, хорошо совместим с ksh и поддерживает сопоставления клавиш, которые вам нравятся. Вы можете запустить bash, набрав:

$ bash

Вы можете выполнить bash из вашего .profile, если ваш администратор не поможет. Вот что ваш администратор сделал бы, чтобы изменить user1 на bash (как root):

# passwd -e user1
Old shell: /bin/ksh
New shell: /usr/bin/bash        <- You type this, use whence bash to look up the path
passwd: password information changed for user1
0 голосов
/ 04 августа 2011

По умолчанию ksh может быть ksh88 - который не поддерживает псевдоним __ клавиатурных макросов. Кш93 делает. В принципе, если это не работает - вы, вероятно, используете ksh88.

...