AIX: получение предыдущей команды с помощью стрелки вверх

9033
ring bearer

Я знаю о множестве -o vi и k и j комбинациях. Я хочу отобразить их на стрелки вверх и вниз, чтобы я мог использовать AIX (подсказка ksh) так же, как bash. Какие-либо предложения?

1

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

2
ring bearer

Вот один способ, который сработал для меня: Поместите следующее в скрипт .profile

set -o emacs alias __A=$(print -n "\020") alias __B=$(print -n "\016") alias __C=$(print -n "\006") alias __D=$(print -n "\002") 
1
Dennis Williamson

Вы можете быть в состоянии написать trapна KEYBDсигнал, который будет обрабатывать нажатия клавиш со стрелками на и выдавать vi kи jнажатия клавиш на своем месте.

Вы можете узнать, какие символы испускаются вашими клавишами со стрелками, нажав Ctrl-v, а затем клавишу. Вы должны увидеть что-то вроде ^[[A.

Например:

f () { if [[ ${.sh.edchar} == $'\033[A' ]]; then .sh.edchar="k"; fi; } trap f KEYBD 

Протестируйте .sh.edmodeпеременную, чтобы определить, заменяется ли ключ в режиме вставки или в командном режиме (его значение будет 0x1bв режиме вставки и в противном случае будет равно нулю).

Спасибо за предложение, однако оно не работает, как ожидалось. Я добавил их в .profile, и ничего не происходит. ring bearer 14 лет назад 0
@ring bearer: в приглашении ksh в режиме вставки (в режиме `vi`) или в режиме emacs нажмите Ctrl-v, затем стрелку вверх. Это дает вам `^ [[A`? Если вы добавите `echo" HI! "` К функции, будет ли "HI!" получить вывод при каждом нажатии клавиши? Dennis Williamson 14 лет назад 0
Нет, я попробовал именно это (эхо "Привет") и не увидел никакого вывода. ring bearer 14 лет назад 0
@ring bearer: Если вы выполняете функцию (с эхом) из командной строки, вы видите «HI!»? Если нет, то вам нужно получить исходный код `.profile` или выйти и перезапустить оболочку. (Кстати, я предполагаю, что вы это сделали, но я вынужден быть тщательным.) Dennis Williamson 14 лет назад 0
@ Денис, спасибо. Однако я не вижу «Привет» или какой-либо предыдущей команды появляется в приглашении - не уверен, что не так; Стрелка вверх печатает ^ [[A с CTRL + V ring bearer 14 лет назад 0
@ring bearer: извините, я только что понял, что не сказал, что нажатие клавиши, представленное символом `^ [[A`, не должно быть буквальным" caret-lbracket-lbracket-A ", но это должно быть` Esc -lbracket-A`. Вы можете вставить экранирование (то, как вы это сделаете, будет зависеть от того, какой редактор вы используете) или вы можете использовать метод в моем отредактированном ответе. Прости еще раз! Dennis Williamson 14 лет назад 0
@Dennis. trap не работает, скорее, установите -o emacs и несколько псевдонимов сделали ring bearer 14 лет назад 0