모든 자동 들여 쓰기를 완전히 비활성화


18

Emacs에서 모든 자동 들여 쓰기를 완전히 비활성화하려면 어떻게합니까? 적어도 기본 모드에서는 비활성화해야하지만 현재 세션에서 전 세계적으로 비활성화되어 있으면 좋습니다.

중복을 선언하기 전에이 질문의 나머지 부분을 읽으십시오. 내가 찾은 다른 모든 답변은 들여 쓰기를 훨씬 더 많이 사용하지 않도록 설정 한 것입니다. 전체 세션에 대해 모든 자동 들여 쓰기를 완전히 비활성화하고 싶습니다.

설정 electric-layout-modenil작동하지 않습니다.

세부

때로는 Windows ASCII 텍스트 편집기로 큰 Git 커밋 메시지를 작성하고 싶습니다. 이 메시지에는 종종 글 머리 기호 목록, 코드 블록 또는 소스 문서의 정확한 형식이 중요한 다른 것들이 있습니다. 내 코드베이스는 Linux에 있으며 텍스트 전용 SSH 클라이언트를 사용하여 상자에 연결합니다. Git이 커밋 메시지를 편집하기 위해 Emacs에 들어가면 소스 커밋 메시지를 Windows 클립 보드에 복사 한 다음 Windows 붙여 넣기 명령을 사용하여 붙여 넣을 수 있기를 원합니다. Emacs의 관점에서 Windows 텍스트 파일에서 찾은 내용을 입력하고 있습니다. 불행하게도, Emacs는 들여 쓰기 된 줄을 볼 때 자체 들여 쓰기를 추가하므로 버퍼의 왼쪽 가장자리를 따라이 삼각형의 공백이 생깁니다.

GNU Emacs 24.3.1을 사용하고 있습니다.

해결 방법

현재 해결 방법은 Windows 텍스트 파일을 Linux 호스트에서 마운트 한 파일 시스템으로 전송하고 파일을 Emacs에로드 한 다음 kill 및 yank를 사용하여 내용을 전송하는 것입니다. 이것은 약간 어색합니다.

다음은 텍스트 블록의 예입니다.

a

  - b
    c
    d

다음은 MSWin 페이스트를 통해 Emacs-under-ssh에 붙여 넣을 때 나타나는 방법입니다.

a

  - b
      c
          d

C-h l붙여 넣기 를 한 후을 누르면 다음과 같습니다. 개행은가 C-j아닌을 사용하여 입력됩니다 RET.

a C-j C-j SPC SPC - SPC b C-j SPC SPC SPC SPC c C-j
SPC SPC SPC SPC d C-j C-h l

들여 쓰기 관련 변수 중 일부는 버퍼 - 로컬로 진대, 뭔가있을 필요가 주요 모드 후크 후 실행 - 예를 들어, 아마도 [?] hack-local-variables-hook- 본질적으로 취소 다른 무엇의 일부로서 설정 메이저 모드 자신의 표준 초기화. fundamental-mode조금 함수 내부에 simple.el즉, - (kill-all-local-variables) (run-mode-hooks). M-x find-function RET fundamental-mode RET-필요에 따라 자신을 수정 / 생성 할 수 있습니다. 그러나 이름을 변경하면 일부 기능에서 사용되지 않으므로 동일한 이름을 유지하십시오.
법률 목록


emacs는 vim과 동등합니까 :set paste? 기본적으로 "붙여 넣은 텍스트를 어떤 식 으로든 만지지 마십시오"라고 말합니다. 자동 들여 쓰기도 포함됩니다.
Omair Majid

답변:


21

이맥스 ≤24.3

RET을 눌러도 기본적으로 들여 쓰기되지 않습니다 (일부 프로그래밍 모드 (예 :“전기”설정)를 확인해야하는 특정 프로그래밍 모드 제외).

Unix 터미널은 일반적으로 클립 보드 내용에 줄 바꿈 문자 (줄 바꿈 문자로 표시)가 포함 된 경우 캐리지 리턴 문자를 붙여 넣습니다. 이맥스에서, 등 캐리지 리턴 보이는 RET키 (사실 RET 입니다 같은 줄 바꿈 모양 (이다) 동안, 캐리지 리턴 문자) C-j.

그러나 귀하의 경우 줄 바꿈을 붙여 C-j넣으면 Emacs에서 명령에 바인딩됩니다 newline-and-indent. 이름에서 알 수 있듯이이 명령은 들여 쓰기됩니다. PuTTY에 변경할 수있는 설정이 있는지 모르겠습니다. 당신은 이맥스 끝에 문제를 해결하려면, 당신이 마음을하지 않을 생각 쉬운 해결 방법이있다 : 바인딩 C-jnewline(동일 RET).

(global-set-key "\C-j" 'newline)

이맥스 ≥24.4

Emacs 24.4에서는 전기 들여 쓰기 모드 가 기본적으로 켜져 있습니다. 글로벌 마이너 모드이므로 전화를 통해 어디서나 끌 수 있으며 (electric-indent-mode 0)와 대화식으로 전환 할 수 있습니다 M-x electric-indent-mode RET.

당신은, 또는 눌러 호출 명령의 문서를보고 매뉴얼에서이 정보를 찾을 수 있습니다 Return(보도를 C-h k RET).

을 사용하여 특정 버퍼에서 켤 수 있습니다 electric-indent-local-mode. 일부 프로그래밍 모드 (특히 타사 모드)에는 전기 들여 쓰기 모드의 설정을 따르지 않는 자체 자동 들여 쓰기 기능이있을 수 있습니다.


electric-indent-mode는 기본적으로 비활성화되어 있습니다 (이맥스 24.3.1을 사용하고 있기 때문에 말한 것과 일치합니다). 켜고 끄는 것은 도움이되지 않습니다. electric-indent-local-mode를 통해 나에게 사용할 수 없습니다 M-x. 에 대한 도움말은 RET세 가지 설정을 언급 : use-hard-newlines, auto-fill-function,와 fill-column. 토글 또는를 통해 그 수정 M-x use-hard-lines, M-x auto-fill-modeM-x set-fill-column RET 0 RET지원을하지 않습니다.
Mr Fooz

@MrFooz 아 죄송합니다, 귀하의 질문에 Emacs 버전에 관심을 기울이지 않았습니다. 그러나 왜 자동 들여 쓰기가되는지 궁금합니다. 흠. 자동 들여 쓰기가 emacs -q있습니까? 줄 바꿈이 포함 된 짧은 텍스트 (예 : foo줄 바꿈 bar)를 Emacs에 붙여넣고를 누르십시오 C-h l. … f o o RET b a r또는 … f o o C-j b a r또는 … f o o RET C-j bar또는 뭔가? SSH 클라이언트는 어떤 터미널에서 실행합니까?
Gilles 'SO- 악한 중지'

원본 게시물에 예제 텍스트 흐림 효과를 추가했습니다. 추가하면 -q도움이되지 않습니다 (예 :) emacs -q -nw --no-desktop. 내가 볼 C-j대신 RET. SSH 클라이언트로 PuTTY 0.63을 사용하고 있습니다. 및 로 TERM설정된 것과 동일한 동작이 나타납니다 . screenxterm
Mr Fooz

@MrFooz Ok, PuTTY가 CR이 아닌 LF를 전송하므로 Emacs에 LF를 들여 쓰지 말라고 지시해야합니다. 전 세계적으로 끄기가 쉽습니다. 내 답변을 편집했습니다.
Gilles 'SO- 악 그만

고마워, global-set-key해킹으로 문제가 해결되었습니다. EDITORGit 커밋 메시지를 편집 할 때 시작시 자동으로 별칭을 호출하도록 별칭 을 설정하는 방법을 알아 보겠습니다 . 내가 좋아하는 Windows 텍스트 편집기가 Windows 대신 UNIX 스타일 줄 끝을 사용하도록 구성했기 때문에 캐리지 리턴 대신 줄 바꿈이 붙여지고 있습니다.
Mr Fooz

1

대괄호 붙여 넣기 모드를 시도 할 수도 있습니다. 이스케이프 시퀀스를 사용하여 사용자가 무언가를 붙여 넣었다는 신호를 보낸 다음 붙여 넣기가 끝나면 다시 터미널 에뮬레이터 (이 경우 PuTTY, 버전 0.63 이상)의 기능입니다. bracketed-paste설치할 수 있는 Emacs 패키지가 있으며, Emacs는 이스케이프 시퀀스를 인식하고 붙여 넣기 기간 동안보다 안전한 키맵으로 전환 할 수 있습니다. 이렇게하면 들여 쓰기가 엉망이되는 것을 막을뿐만 아니라, 불량 페이스트가 emacs 세션에서을 사용하여 명령을 실행할 수 없습니다 M-x.

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