문장을 한 줄에 한 줄로 나누지 만 여전히 시각적으로 감싸서 유지하려면 어떻게해야합니까?


14

이것은 한 줄에 한 문장 (함수뿐만 아니라 동기도 있음)으로 파일편집하는 것과 비슷 하지만 모든 문장에서 시각적으로 나누지 않고 전체 단락을 만들고 싶습니다.

활성화 할 때 동일한 단락 ( \n\n또는 paragraph-separate또는 ...로 구분되지 않음)에서 행을 시각적으로 결합 한 다음 visual-line-mode실제로 삽입하지 않고 행을 감싸는 동작 (아마도 파생 ) 을 활성화 하는 부 모드를 원합니다 \n.

그러한 모드가 존재합니까? 그렇지 않은 경우 단락의 표시 속성을 변경하여 결과를 얻는 프로세스는 어떻게 진행합니까? (결국 이러한 모드의 핵심이며 스 니펫에서 개발할 수 있습니다.)


[...]는 시각적으로 [...]에 참여합니다. 기본 \n(있는 경우)을 유지 하거나 줄당 1 단락을 제공하기 위해 개행을 실제로 제거하겠습니까?
Jonathan Leech-Pepin

1
아마도 당신은을 사용할 수있는 buffer-display-table새로운 라인을 만들기 위해 \n공백이나 뭔가 같은 뭔가 다른 것으로 나타납니다 - 링크에서 다음 예를 참조하십시오 stackoverflow.com/a/24842771/2112489 이 가진 장점은 것 그 텍스트 문서가 수정 되지 않았습니다 . 새 줄은 웃는 얼굴, 공백, 필로우 기호 등 무엇이든 될 수 있습니다. 시각적 효과는 줄 바꿈이 발생한다는 것입니다.
lawlist

@ JonathanLeech-Pepin 나는 줄 바꿈을 유지하고 싶습니다. 사실, 나는 문장 끝에 줄 바꿈을 강요하고 싶지만 이것은 별도의 후크를 통해 수행 할 수 있습니다.
Sean Allred

1
@lawlist 시각적 효과는 줄 바꿈이 어디에나 사라질 것이라는 것입니다. 모든 단락이 하나로 축소되지 않습니까?
Malabarba

1
이 요청에 동조했지만 OP에 설명 된 마이너 모드가 올바른 솔루션이 아니라고 생각합니다. 근본적인 문제는 diff가 코드 용으로 설계된 텍스트에서 제대로 작동하지 않는다는 것입니다. Emacs에서이 문제를 해결하는 것은 여러 가지 이유로 가능하지만 깨끗한 해결책은 아닙니다. 텍스트와 잘 작동하도록 diff를 향상시키는 것이 훨씬 좋습니다.
tmalsburg

답변:


3

Tom이 말했듯이, 줄 바꿈에 표시 속성을 설정하면 일종의 작업이 될 것입니다.

문제는 줄 바꿈을 알아내는 것입니다.

시작하는 예는 다음과 같습니다.

(let ((eol-regexp "[[:graph:]] ?\\(\n\\)[^\t\n ]"))
  (font-lock-add-keywords nil
   `((,eol-regexp 1 '(face default display " ")))))

(visual-line-mode 1)

줄 바꿈 앞에 그래픽 문자가 있고 다음 줄이 들여 쓰기 또는 비어 있지 않은 경우 줄 바꿈을 "제거"합니다. 자신에게 맞는 것을 찾기 위해 실험을해야합니다.

더 많은 설명 :

  1. font-lock-add-keywords글꼴 잠금에 규칙 목록을 추가합니다 (글꼴 잠금을 사용하도록 설정해야합니다. 첫 번째 인수는 모드 일 수 있습니다 (예 text-mode:).이 경우에는 nil이므로 현재 버퍼에 대해서만 규칙을 추가해야합니다.
  2. 우리의 "규칙"은 (,eol-regexp 1 '(face default display " "))입니다. 첫 번째 요소는 앞서 만든 정규식입니다. 두 번째는 우리가 관심있는 하위 표현입니다. 세 번째는 우리가 적용하고자하는 "얼굴"입니다.
  3. 줄 바꿈에 얼굴을 사용하는 것은 우리에게 쓸모가 없지만 텍스트 속성을 추가 할 수도 있습니다. 따라서 기본면을 사용하고 디스플레이 속성을 추가하는 것보다 하위 문자열 1 (즉, 개행)을 공백으로 바꿉니다.
  4. 발로 몸을 쏘면 버퍼를 삭제하거나로 키워드를 제거하십시오 font-lock-remove-keywords.
  5. 당신은 또한 추가 할 수 있습니다 displayfont-lock-extra-managed-props(나는이 시도하지 않은).
  6. 까다로운 부분은 정규 표현식을 올바르게 얻는 것입니다. "\ (\ n \) [^ \ n]"은 바로 뒤에 다른 줄 바꿈이없는 줄 바꿈과 일치합니다. ". \ {30, \} \ (\ n \)"는 30 자 이상의 줄 바꿈 문자 만 일치합니다.


0

문제를 올바르게 이해하면 버퍼의 모든 줄 바꿈을 그대로 유지하려는 것입니다. 그러나 일부를 공백으로 표시하고 싶습니다. 그런 다음 단어 줄 바꿈을 원합니다.

단어 줄 바꿈을 위해 사용할 수 있다고 생각합니다 visual-line-mode.

줄 바꿈을 처리하기 위해 다르게 표시하려는 줄 바꿈에 값 (단일 공백으로 구성된 문자열)을 display가진 속성을 넣을 수 있다고 생각합니다 " ".

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