쉘 스크립트 모드에서 '<<<'를 입력하면 왜 '<< EOF \ n <'이 생성됩니까?


13

emacs에서 쉘 스크립트를 편집하고 3 개의 쉐브론을 입력하여 원시 문자열을 stdin으로 리디렉션 할 때마다 emacs는 문자 'EOF'와 그 사이에 줄 바꾸기를 삽입합니다.

cat <<< 'some string'

된다

cat <<EOF
< 'some string'

돌아가서 여분의 문자를 삭제하여 원하는 상태로 버퍼를 가져올 수 있지만 이것은 매우 독창적 인 동작이며 일반적 으로이 패턴을 입력하는 유일한 시간 인 쉘 스크립트 모드에서만 발생하는 것 같습니다. 이 동작을 비활성화하는 방법이 있습니까?

답변:


13

에 의해 발생합니다 sh-electric-here-document-mode. 활성화되면 <<here 문서 스켈레톤을 삽입합니다.

기본적으로 활성화되어 있습니다. 다음과 같은 후크로 비활성화 할 수 있습니다.

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

4
물론 다른 옵션은로 삽입 <<<하는 것 C-3 <입니다.
glucas December

1
끄는 방법을 보여 주셔서 감사합니다. 이 sh-electric-here-document-mode는 다소 쓸모없는 기능인 IMO입니다.
Dan Molding

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

17

glucas는 정확하지만 그의 대답을 보충하기 위해 여기에 문서 삽입을 조금 더 똑똑하게 만드는 데 사용했던이 코드가 있습니다.

이 조언은 sh-electric-here-document-modeenabled 와 함께 사용하여 두 개의 갈매기 형을 입력하면 여기에 자동 문서가 만들어 지지만 입력 한 다음 문자가 다른 갈매기 형이면 되돌리고 <<<로 남겨집니다.

(defadvice sh--maybe-here-document (around be-smart-about-it activate)
  "Do normal here doc auto insert, but if you type another chevron, revert and leave just <<<."
  (if (and (= (current-column) 1)
           (looking-back "^<")
           (looking-at "\nEOF")
           (save-excursion
             (forward-line -1)
             (end-of-line 1)
             (looking-back "<<EOF")))
      (progn (delete-region (search-backward "EOF") (search-forward "EOF" nil t 2))
             (insert "<"))
    ad-do-it))

물론 이것은 실제로 쉐브론으로 here doc을 시작하려면 그것을 직접 삽입해야한다는 것을 의미합니다 C-q<. 그래서 그것은 당신이 무엇을 더 많이 하느냐에 달려 있습니다. 여기서 문서보다 문자열을 더 많이한다면, 가지고있는 것이 좋을 수도 있습니다. 불편하다

여기에 이미지 설명을 입력하십시오


아, 멋지다!
glucas December
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.