종종 이맥스에서 지역을 선택하기 위해 Shift+ Up/Down를 사용 합니다. GUI 모드에서는 잘 작동하지만 옵션 emacs
으로 호출 하면 + -nw
만 사용하여 줄을 선택할 수 있습니다 . +는 , 나는 미니 버퍼에서이 오류 메시지가없는 작업을 얻을 않습니다 :ShiftDownShiftUp
<select> is undefined
이 문제를 어떻게 해결할 수 있습니까?
종종 이맥스에서 지역을 선택하기 위해 Shift+ Up/Down를 사용 합니다. GUI 모드에서는 잘 작동하지만 옵션 emacs
으로 호출 하면 + -nw
만 사용하여 줄을 선택할 수 있습니다 . +는 , 나는 미니 버퍼에서이 오류 메시지가없는 작업을 얻을 않습니다 :ShiftDownShiftUp
<select> is undefined
이 문제를 어떻게 해결할 수 있습니까?
답변:
텍스트 터미널은 키가 아닌 문자 (보다 정확하게는 바이트) 만 전송합니다. 키 및 키 코드 (수정자가있는 키)는 문자 시퀀스로 인코딩됩니다. 인쇄 가능한 문자를 삽입하는 키는 그대로 전송됩니다. 기능 키는 이스케이프 시퀀스로 전송됩니다. 대부분의 이스케이프 시퀀스는 Escape 문자 ( ?\e
Emacs 구문)와 두 개 이상의 인쇄 가능한 문자로 구성됩니다. 참조 제어 및 위 / 키를 아래로 사용하기 위해 터미널에서 이맥스에 의해 및 방법 키보드 입력 및 텍스트 출력 작업을 할? 자세한 내용은.
Emacs에는 이스케이프 시퀀스 를 자체 키 개념으로 변환 하는 메커니즘이 있습니다. 변환 표 input-decode-map
는 Emacs가 시작될 때 (또는보다 정확하게는 새로운 프레임이 열릴 때 초기화됩니다 :이 변수는 각 터미널마다 다른 값을가집니다). 때때로 Emacs는 터미널이 보낸 모든 이스케이프 시퀀스를 알지 못합니다.
귀하의 경우, Emacs가 Shift+가 보낸 이스케이프 시퀀스에 대해 잘못된 해석을 한 것으로 보입니다 Up. 해석하지 S-up
말고 해석해야합니다 select
. 먼저 이스케이프 시퀀스가 무엇인지 파악하십시오. 에서 *scratch*
버퍼 눌러 Ctrl+ Q다음 Shift+ Up. 이 명령으로 C-q
인해 이스케이프 문자 인 다음 문자가 문자 그대로 삽입되고 나머지 이스케이프 시퀀스가 이어집니다. 하자 그 말을 Shift+는 Up전송 \e[1;2A
다음에 해당하는 항목을 재정의해야, 우리의 시스템에 input-mode-map
:
(define-key input-decode-map "\e[1;2A" [S-up])
원칙적으로 input-decode-map
터미널마다 설정해야합니다. 실제로 동일한 이스케이프 시퀀스가 다른 키를 인코딩하는 두 개의 터미널을 갖는 경우는 거의 없으므로 전역 설정이 제대로 작동합니다.
define-key
명령은 init 파일로 이동합니다. 그것은 ~/.emacs.d/init.el
또는 다른 몇 개의 위치 일 수 있습니다 . define-key
을 검색하여 사용의 많은 예를 찾을 수 define-key
있지만 바인딩 할 맵을 찾는 것이 또 다른 문제입니다. 여러지도가 관여 : global-map
, input-decode-map
, function-key-map
, keyboard-translate-map
. Spacemacs를 모르기 때문에 질문에 어떻게 대답해야할지 모르겠습니다. 표준 인터페이스를 혼란스럽게 정의하는 Spacemacs와 같은 패키지는 사용하지 않는 것이 좋습니다.
input-decode-map
몇 가지 예제를 찾은 후 작업을 수행했습니다 . input-decode-map
사용자가 버퍼에 텍스트를 입력 할 때 적용 할 수 있습니까 ?
input-decode-map
는 적용되는 키맵 중 하나입니다. 자세한 내용 은 설명서 를 참조하십시오.
emacs에서 영역은 포인트 (커서)와 마크 ( "마킹 된"커서의 이전 위치)에 의해 구분됩니다.
따라서 "지역을 선택"하려면 해당 마크를 배치 한 다음 포인트를 움직여야합니다.
마크를 배치하는 가장 쉬운 방법은을 누르는 것 C-SPC
입니다. 그런 다음 커서를 움직이면 "영역"이 확장되는 것을 볼 수 있습니다.
"지역을 선택 해제"하려면 C-SPC
다시 누를 수 있습니다 .
"shift + movement"는 다른 소프트웨어의 일반적인 키 바인딩이므로 기본적으로이 "select region"동작을 에뮬레이트합니다. 그러나 시프트는 수정 자 키로 emacs에 전송 될 수 없으므로 터미널에서는 작동하지 않습니다.
일반적으로이 C-SPC
방법은 영역을 선택하는 다른 방법보다 훨씬 강력합니다. 이동에 대해 위 / 아래 / 왼쪽 / 오른쪽으로 제한되지 않으며 (예 : 검색을 사용할 수 있음), 필요하지 않습니다. 불편한 키 조합을 오랫동안 유지해야합니다.
Are the (define-key ...)
init.el에 들어가는 명령? 내가 볼 수있는 자세한 예가 있습니까?