쉘 스크립트 모드에서 '<<<'를 입력하면 왜 '<< 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.