1
우선, 나는 Emacs와 ELisp (그리고 일반적으로 Lisp에 관한 것)의 완전한 초보자라는 것을 인정하고, 나는 비틀 거렸다 내 .emacs 파일을 쓰려고 할 때 꽤 오랫동안 저주를 받았다. 여기 Emacs : Emacs23에서는 잘못된 타입의 인수 오류가 있지만, Emacs24에서는 그렇지 않다.
문제를 재현하기 위해 필요한 코드의 최소 예 (즉 이맥스 다음 만 함유 갖는) 가(defun define-esc-key (keybind)
(define-key key-translation-map (kbd keybind) 'my-esc))
(define-esc-key "M-j")
이 Emacs23 다음과 같은 오류가 발생한다 :
Lisp error: (wrong-type-argument integer-or-marker-p keybind)
read-kbd-macro(keybind)
#[(keys) "\301!\207" [keys read-kbd-macro] 2 2186954](keybind)
(kbd keybind)
(define-key key-translation-map (kbd keybind) (quote my-esc))
define-esc-key("M-j")
Emacs24에서 예상대로 작동합니다. define-esc-key
함수 본문에있는 keybind
의 인스턴스를 "M-j"
으로 바꾸면 이멕스 23에서도 작동합니다.
(그런데, 나쁜 제목 미안하지만, 난 그냥 더 자세한 설명 아무것도 생각하지 못했습니다.)이 NEWS
파일에서
Esc 키는 일반적으로 키보드 단축키 시퀀스의 일련의 다른 키를 앞에 접두사 단축키로 사용됩니다
다른 방법으로는 값을 삽입
eval
및 역 인용 부호를 사용할 수 있습니다. 이스케이프 접두사 키를 사용하지 않으려 고합니다. 즉, 자신의 함수 'my-esc'를 시작하는 것뿐입니다. 이스케이프 키를'indent-new-comment-line'으로 바꾸길 원합니까? 그렇지 않다면 어떤 특정 기능을 눌렀을 때 이스케이프 키를 실행 하시겠습니까? – lawlist이스케이프 키의 유용성을 키보드 단축키 접두어로 사용하지 않으려는 경우 이스케이프 키가 한 가지만 수행하므로 다음과 같이 할 수 있습니다.'(global-set-key (kbd "") '들여 쓰기 - 새로운 코멘트 라인)'. 그러나 더 나은 접근법은 'elisp'을 조금 배우고이 스레드에서 'Stefan'이 작성한 약간 더 복잡한 코드를 이용하는 몇 가지 조건을 만드는 것입니다 : http://stackoverflow.com/questions/20026083/ 사용법 - 이스케이프 - 조건부 - 변경자 - 키 또는 이스케이프 키를 접두어 키처럼 정상적으로 유지하십시오. –
lawlist
@lawlist : 이스케이프 키에 대해 언급하는 이유가 확실하지 않지만 'Mj'("메타 j"?)의 이상한 리 바인딩에 대해 이야기하고 있다면, 나는 오랫동안 확신을 가지고있는 Vim 사용자이기 때문입니다. 스크립팅 기능과 "Evil"Vi 에뮬레이션 모드를 위해 Emacs로 전환 할 수 있습니다. 나는 Alt + j/k/l/m/o/I/O/...를 사용하여 vim을 실행하는 터미널에서 삽입 모드에서 (정상 모드로 전환하기 위해 하드를 사용하는 대신 이스케이프 키로 전환) 이것을 악마와 복제하십시오. – mwnx