OpenBSD ksh의 화살표 키, 명령줄 편집, Vi 모드

OpenBSD ksh의 화살표 키, 명령줄 편집, Vi 모드

나는 기본을 사용한다kshOpenBSD 6.2에서(기반 pdksh) Vi 명령줄 편집 모드를 활성화합니다.

나는 Dvořák 키보드를 사용하고 있기 때문에 화살표 키가 h, 및 l에 대한 보완으로 제대로 작동하도록 노력하고 있습니다. 내가 아는 한 그들은 전혀 작동하지 않습니다. "입력" 모드인지 "명령" 모드인지는 중요하지 않습니다.jk

현재 키 바인딩은 다음과 같습니다:

^[[A = up-history
^[[B = down-history
^[[C = forward-char
^[[D = backward-char

를 사용할 경우 화살표 키로 생성되는 문자의 순서이기도 합니다 Ctrl+VArrow key.

화살표 키는 Emacs 명령줄 편집 모드에서 잘 작동하지만 오랜 Vi 사용자로서 화살표 키를 사용할 때 약간의 불편함을 느낍니다.

내 느낌은 화살표 키로 전송된 Escape가 내가 누른 것처럼 해석된다는 것입니다 . 예를 들어 수동으로 입력 하면 Esc동일한 동작을 얻습니다. 예를 들어 명령 모드로 전환한 다음 마지막에 삽입 모드로 전환합니다. 선).Esc[AUp-arrow

질문: OpenBSD의 Vi 모드에서 화살표 키가 직관적으로 작동하도록 할 수 있는 사람이 있습니까 ksh?

답변1

빨리 참여해요/usr/src/bin/ksh내 OpenBSD 시스템에서 실제 소스 코드를 확인했기 때문입니다. 얼핏 보면 c_ksh.cVi 모드가 어느 시점(1989/1990년경) 부터 개조된 것처럼 emacs.c보입니다 . 사용된 정확한 단어는 다음과 같습니다.vi.cpdkshnsh

/*      $OpenBSD: vi.c,v 1.55 2018/01/16 22:52:32 jca Exp $     */

/*
 *      vi command editing
 *      written by John Rochester (initially for nsh)
 *      bludgeoned to fit pdksh by Larry Bouzane, Jeff Sparkes & Eric Gisin
 *
 */

-able 함수는 bind내장 함수에 의해 호출되는 함수와 마찬가지로 모두 에 위치하지만 emacs.c, 일부는 호출되지 않는 다른 이름으로 자체 구현이 있는 것 같습니다.x_bind()bindvi.cx_bind()

그러므로 나는 bind이 특정 셸에서 내장 함수가 Vi 모드에서 작동하지 않는다고 결론을 내릴 수 있다고 생각합니다.

업데이트(2018-02-04): 이를 openbsd-misc목록 에 보고한 후 bind실제로 Vi 명령줄 편집 모드에서 아무 작업도 수행되지 않음을 확인했습니다. ksh이를 언급하기 위해 OpenBSD 매뉴얼을 수정하는 패치가 있을 것입니다 :

bind string=[editing-command] ...

존재하다Emacs 편집 모드, 지정된 편집 명령이 지정된 에 바인딩됩니다 string. 향후 입력으로 string인해 편집 명령이 즉시 호출됩니다. 잘못된 바인딩Vi 편집 모드.

관련 정보