Vim의 코드 폴딩을 어떻게 복제 할 수 있습니까?


28

Emacs에서 코드 접기

때로는 텍스트 블록을 접고 싶습니다. Vim에서는 퍼지없이 쉽게 접을 수 있습니다. "마커"또는 특수 정규 표현식과 같은 특수 문자를 추가하지 않아도 {{{됩니다. 구조를 망설이지 않고 영역을 선택하고 접고 싶습니다.

둘러 볼 때 이미 Emacs의 코드 폴딩에 대한 질문이있는 것 같습니다. 누군가는 "완벽한 해결책이 없다"고 말했다. 예를 들어, Vim에서 간단한 코드 폴딩 클립을 만들었습니다.

Vim 플레인 폴딩

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

+ 매우 간단합니다. 지역을 선택하고 접으십시오.
+ 영속적입니다. 버퍼를 닫거나 Vim을 닫을 때. 그리고 파일을 다시 열면 주름이 여전히 있습니다.
+ 당신은 쉽게 접힌 것을 볼 수 있도록 하이라이트 바를 얻습니다.

Vim에 대한 다른 많은 접는 구성이 있습니다. 나는 이맥스에 만족하지만 이것은 내가 놓친 것 중 하나입니다. 내가 시도한 다른 대안, 예를 들어 HideShow :

숨기기

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

을 사용한 악의 대안입니다 hide-show minor mode. 사용할 수 없다는 것을 알았습니다.

-지역을 선택하여 접을 수 없습니다. 코드 블록에 접 힙니다.

-접을 수있는 하이 글리치 바가 없습니다. 쉽게 놓칠 수 있습니다.

-영구적이지 않습니다. 파일을 다시 열면 접기가 사라집니다.

다른 패키지가있다, 이 접어 :

이것을 접어

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

-대체 대안입니다. 그러나 접기 아래의 텍스트가 접기 옆에 놓이기 때문에 들여 쓰기가 엉망입니다 ... (?).

-시각적으로 영역을 선택하고 접을 수 있습니다. 그러나 그것은 indendation을 파괴하므로 개요가 엉망이됩니다. 별로 편리하지 않습니다.

-접을 때 접을 수있는 가로 막대가 없습니다. 쉽게 놓칠 수 있습니다.

무엇이 문제입니까?

Vim이 어떻게 접는지를 복제하고 싶습니다. 그러나 내가 둘러 보았을 때 Emacs에서는 그렇게하기가 매우 어려워 보입니다. emacs 또는 아키텍처에 이것을 복제하기 어려운 것이 있는지 궁금합니다. 한계는 무엇입니까?


2
나는 그 질문이 너무 광범위하다고 느꼈기 때문에 그 근거로 마감하기로 투표했다. 원본 포스터는 원하는 기능을 제공하는 몇 개의 라이브러리를 선택한 다음 원하는대로 결합 / 수정하는 것이 좋습니다. OP가 특정 기능을 구현 / 수정 하는 데 문제가 있는 경우 해당 문제로 제한되는 특정 질문을 게시하십시오. OP는 아마도 원하는 시각 효과를 얻을 수 있지만 시간이 지남에 따라 지속적으로 작업 할 수 있도록 준비해야합니다.
lawlist

3
원하는 접기 기능을 설명해 주시겠습니까? 일반적으로,이 사이트의 사람들이 Vim 코드 폴딩이 어떻게 작동하는지 알기를 기대할 수 없으며, 어쨌든 구체적으로 원하는 기능을 알려주십시오. 당신이 원하는 것에 대해 제공하는 유일한 정보는 하나의 예제만을 보여주는 애니메이션입니다. 어쨌든 나는 그것이 무엇을 예시하는지 전혀 몰랐습니다. 또한 일반적인 브라우저에서는 루프에서 재생하며 반복이 시작되는 시점을 알 수 없습니다.
Gilles 'SO- 악마 그만'

3
이 질문에서 보류를 제거해야합니다. 현재로서는 합리적입니다. 질문에 대한 답변이없는 것은 질문을 끝내는 좋은 이유가 아닙니다.
Ista

2
ar-hide-region-atpt, 'thing-at-point-utils.el', github.com/andreas-roehler/thing-at-point-utils의 ar-show-region-atpt- 차단을 해제하여 차단 해제하십시오 정답 일 수 있습니다.
Andreas Röhler

1
내가 이해 한대로 질문은 기본적으로 " 누군가 : Vim에서 찾은 정확한 코드 폴딩 기능을 제공 할 Emacs를위한 전체 라이브러리를 작성하십시오. " 이것을보고 싶은 사람들은 현실이됩니다. 그러나 이것이 어떻게 대답에 합리적으로 맞을 수 있는지 알지 못합니다. 문제와 버그 수정으로 제안 된 새 라이브러리를 유지 관리해야합니다. 나도 코드 폴딩을위한 멋진 새 기능으로 전체 라이브러리를 작성하는 사람을 신경 쓰지 않을 것입니다.
lawlist

답변:


16

사용해보십시오 vimish-fold.

풍모

  • 배터리 포함 : 마이너 모드 활성화, 몇 가지 명령을 바인딩하면 모든 것이 작동합니다.

  • 선택한 지역에서 작동합니다.

  • 그것은 영구적입니다 : 파일을 닫을 때 주름이 사라지지 않습니다.

  • 지속적이고 확장 성이 뛰어나며 부작용없이 수백 개의 파일을 처리 할 수 ​​있습니다.

  • 텍스트의 어느 부분이 접혀 있는지는 분명합니다.

  • 들여 쓰기 또는 무언가를 깨뜨리지 않습니다.

  • 펼쳐진 주름 만 다시 접을 수 있습니다 (오, 내).

  • avy패키지 팬 : avy최소한의 키 입력으로 텍스트를 접을 수 있습니다 !

용법

이러한 기능 중 일부 / 모두에 대한 바인딩을 작성하십시오.

  • vimish-fold -선택된 영역의 기본 폴딩;

  • vimish-fold-unfold— 실제로 바인딩 할 필요는 없습니다 C-g. 접힌 텍스트를 나타내는 헤더에 포인트가있을 때만 사용 하십시오.

  • vimish-fold-unfold-all 그럼에도 불구하고 이것이 유용 할 수있다.

  • vimish-fold-refold — 예, 다시 접을 수 있습니다.

  • vimish-fold-avyavy텍스트를 접는 데 사용 하십시오!

vimish-fold-mode지속적인 폴딩을 원하는 모드 를 선택적으로 돌리 거나 어디서나 활성화 할 수 있습니다.

(vimish-fold-global-mode 1)

제안 된 키 바인딩이 있습니까? C ++ 모드에있을 때 어떤 바인딩을 사용합니까? C 모드? 파이썬 모드? 리스프 모드? ELisp 모드? 자바 스크립트 모드?
Reb. Cabin

1
@ Reb.Cabin은 모드 별 패키지가 아니므로 전역 키 바인딩이 최선의 선택입니다. 나는 키 코드를 포함하지 않는 대부분의 사람들은 현재 내가 가진, 약간 이상을 고려할 해당 키 바인딩을 사용하고 있습니다 : menu v fvimish-fold, menu v avimish-fold-avy, menu v uvimish-fold-unfold-all, menu v vvimish-fold-refold. 대부분의 내 키 바인드는 다음과 같습니다. 이것이 내 구성 입니다.
Mark Karpov

이것이 악의적 인 동작 및 텍스트 객체와 통합됩니까?
PythonNut

1
흠 ... PR 작업을 시작하겠습니다.
PythonNut

1
나는 하나의 경우, 완전히 사용할 수없는 vimish-fold를 찾습니다. 어쩌면 이미 vim의 코드 폴딩에 익숙한 사람들에게는 직관적 일 수도 있습니다 ... 모릅니다. 또한, 나는 왜 org-mode에서 접기가 잘 작동하는지 이해하지 못하지만, Emacs는 아직 좋은 코드 접기가 없습니다 ...
kjo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.