emacs를 비활성화하는 방법 문서 완성


11

emacs로 bash 스크립트 파일을 편집하고 입력하려고 할 <<<때 두 번째 <emacs에서 다음 예제와 같이 here 문서의 템플리트를 삽입하십시오.

<<EOF

EOF

리터럴을 입력하기 때문에 원하는 출력이 아닙니다 <<<.

지금은을 입력 < < <한 다음 공백을 삭제하는 데 의존 하지만 직접 입력하는 것을 선호합니다.


2
그다지 신경 쓰지 않지만, 공감대에 대한 의견을 남기는 것이 좋을 것입니다.
enzotib

답변:


12

실제로 Tom의 커스텀 my-disable-here-document함수가 키를 리 바인드 할 필요가 없습니다 . 이 기능은 다음을 사용하여 활성화 및 비활성화 할 수 있습니다 sh-electric-here-document-mode.

(add-hook 'sh-mode-hook
          (lambda ()
            (sh-electric-here-document-mode -1)))

(을 통해 활성 버퍼로 전환 할 수도 있습니다 M-x sh-electric-here-document-mode.)


또한 : sh-mode-hook나를 위해 일 sh-set-shell-hook하지 않았지만 그랬습니다.
Felipe Lema

6

바인딩 <self-insert-command떠들썩한 파티 모드에서 다음 만 문자를 삽입합니다.

기본적으로 sh-maybe-here-documentbash 모드 에 있을 때 바인딩 되며 해당 함수는 자동 삽입을 수행합니다.

키를 리바운드하는 방법은 다음과 같습니다.

(add-hook 'sh-set-shell-hook 'my-disable-here-document)

(defun my-disable-here-document ()
  (local-set-key "<" 'self-insert-command))

init 파일에 정확히 삽입 할 내용에 대한 추가 정보를 제공해 주시겠습니까? 죄송하지만 초보자 emacs 사용자입니다.
enzotib

내 대답에 간단한 예를 추가했습니다. 그것은 bash뿐만 아니라 모든 종류의 쉘에서 자동 삽입을 비활성화합니다. 그러나 아마도 그것은 당신이 원하는 것입니다.
Tom

이 솔루션은 기본적으로 <바인딩되어 있기 때문에 더 이상 작동하지 않습니다 (emacs 24.3에서 테스트) self-insert-command.
T. Verron 2019

2

here-doc 동작 을 사용하지 않으려는 유일한 이유 는 here-string <<< 을 삽입 할 수 없기 C-<때문에 포함하는 함수에 바인딩 (insert "<<<")하면 작동하며 여전히 자동 here-doc 템플리트를 허용합니다.

(defun my-here-string() 
  "Insert <<< (eg. for a bash here-string)" 
  (interactive)
  (insert "<<<"))
(global-set-key (kbd  "C-<") 'my-here-string)

1
흥미로운 해결책에 감사드립니다.하지만 여전히 bash 스크립트 파일에 대한 완성이 잘못되었다고 생각하기 때문에 @Tom의 대답을 선호합니다.
enzotib


1

유형 < C-q < <


해결 방법보다 짧으며 다른 상황에서도 유용하지만 내가 찾던 것과 정확히 일치하지는 않습니다. 어쨌든 고마워
enzotib 2014 년

1

http://web.mit.edu/dosathena/sandbox/emacs-19.28/lisp/sh-script.el을 살펴본 후이 솔루션을 생각해 냈습니다.

;; disable the automatic EOF generation in Shell Mode
(defvar sh-use-prefix nil
  "If non-nil when loading, `$' and `<' will be  C-c $  and  C-c < .")
(defvar sh-mode-map
  (let ((map (make-sparse-keymap)))
    (define-key map (if sh-use-prefix "\C-c<" "<")
      (local-set-key "<" 'self-insert-command))
   map)
  "Keymap used in Shell-Script mode.")
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.