내가 본 바로는 set -o emacs
및 둘 다 bindkey -e
터미널 줄 편집기의 동작을 수정하여 에뮬레이트하는 데 사용되는 emacs
반면 set -o vi
및 는 키 바인딩을 bindkey -v
에뮬레이트하는 데 사용됩니다 vi
. 둘 set -o
다 동일한 작업을 수행하는 것 같기 때문에 bindkey
둘 사이의 차이점이 무엇인지, 차이점이 있는지 궁금합니다.
set -o
대부분의 쉘에서 작동하는 것처럼 보이지만 특정 명령 bindkey
입니다 zle
. 이것이 유일한 차이점입니까? 또한 동일한 키를 바인딩합니까, set -o
아니면 bindkey
다른 작업에 바인딩하는 키가 있습니까 ?
답변1
bindkey -v/-e
는 tcsh
구문( bindkey
1990년 5.19PL2에서 tcsh에 내장 기능이 추가됨)이고, set -o vi/emacs
ksh 구문(ksh85에 이미 존재했으며, 아마도 ksh가 적어도 1983년까지 emacs/vi 모드를 가졌기 때문에 더 일찍)입니다.
에서는 zle의 첫 번째 버전과 함께 제공되는 1991 zsh
년 bindkey
2.0에 추가되었습니다(이전 버전은 1.0 readline
에서 차용 bash
).
zsh
, 첫 번째 1.0 버전에서는 ( /Bourne setopt
과 같이 명령줄에 전달된 옵션에 추가로) 옵션을 설정해야 했고 대신 특수 변수를 사용했습니다. 2.0에서는 1996년 2.0에서 새로운 내장 기능을 사용하여 특수 변수를 옵션 세트로 변환하기 위해 옵션 ( 인터프리터와 내장 기능 모두에)이 추가되었습니다 . 이는 거기에 있는 옵션 세트와는 별도의 옵션 세트입니다 . 1990년경에 지원이 추가되었습니다.csh
(t)csh
bash
-o
set
ksh
bash
shopt
set -o
set -o
및 "옵션" vi
은 emacs
그렇지 않았습니다.2003년까지 zsh에 추가됨버전 4.1.1에서는. 옵션을 설정하면 모드 emacs
가 비활성화되므로 "옵션" 패러다임은 그다지 적합하지 않습니다 vi
.
시작 시 zsh 보고서 zsh -o emacs
가 zsh -o vi
현재 제대로 작동하지 않는다는 것을 알 수 있을 것입니다 (azsh: invalid module name `zsh/zle'
벌레).
또한 대부분의 쉘은 및 환경 변수 zsh
의 값을 기반으로 기본 편집 모드를 선택하여 행 편집 모드를 사용자의 편집기 기본 설정에 일치시킵니다.$EDITOR
$VISUAL