일부 Unix 시스템에서는 Ctrl-A 또는 Ctrl-E를 입력하여 줄의 시작이나 끝으로 이동할 수 있습니다. 일부 Unix 시스템에서는 그럴 수 없으며 ^A 또는 ^E 등만 인쇄합니다. 이 키스토크가 예상대로 작동하는지(명령줄에서 이동) 또는 ^A, ^E 등 문자를 인쇄하는지 여부를 제어하는 것은 무엇입니까?
답변1
이는 모두 특정 쉘 구현에 따라 다릅니다(다른 시스템에서 또는 심지어 단일 시스템 내의 다른 사용자에 대해 다른 기본 쉘을 가질 수도 있습니다(예: bash, ksh, tcsh 등)).
또한 쉘 자체에 따라 다릅니다.
예를 들어 bash는 emacs와 vi의 두 가지 모드를 지원합니다. 각 모드에는 자체 단축키(emacs 또는 vi와 같은)가 있습니다. 이를 변경하려면 실행해야 합니다 set -o emacs
(일반적으로 기본값임).set -o vi
특정 쉘 문서에서 자세한 정보를 찾을 수 있습니다.
답변2
tl;dr
set -o emacs
사용하게 될 대부분의 쉘에서 Ctrl-A, Ctrl-E, Ctrl-B 등의 emacs 키 바인딩을 활성화합니다.
쉘에는 행 편집 기능이 없거나 vi
편집 모드에 있을 수 있습니다(기준).
편집 모드 가 아닌 경우 emacs
Ctrl-A 및 Ctrl-E는 특별한 의미가 없습니다. echo
및 stty/termios 설정이 켜져 있으면 특별히 처리되지 않는 모든 제어 키는 , 등의 "캐럿" 표기법 echoctl
으로 표시됩니다 .^A
^X
ksh
또는 등 의 많은 셸은 환경 변수 zsh
값 VISUAL
과 EDITOR
환경 변수(우선 순위에 따라 , , 등의 변형도 처리 vim
) elvis
를 기반으로 기본 편집 모드(vi 또는 emacs)를 결정합니다 xemacs
.
이것은 에서 깨졌는데 (매우 짜증나게!) 다른 파생 쉘 mksh
에서도 여전히 그렇습니다 .pdksh
다른 쉘은 편집 모드와 같 bash
거나 tcsh
기본적으로 편집 모드를 사용 emacs
하지만 라인 편집 라이브러리의 구성 파일에서 재정의될 수도 있습니다.
에 대한readline
라이브러리 bash
및 기타 여러 프로그램에서 사용하는 구성 파일 ~/.inputrc
(또는 환경 변수에 지정된 파일 INPUTRC
)은 다음과 같으며 /etc/inputrc
설정은 다음과 같습니다.
set editing-mode vi
set editing-mode emacs
editline
많은 BSD 프로그램에서 사용되는 / [1] 라이브러리 의 경우 libedit
구성 파일은 일반적으로 다음과 같습니다.~/.editrc
설정은 다음과 같습니다.
bind -v # for vi
bind -e # for emacs
[1] 헷갈리지 마세요.libeditline
Emacs 편집 모드만 제공하는 readline "work-alike"입니다.