탄성 탭 스톱의 단점은 무엇입니까? [닫은]


83

여기를보십시오 : 탭과 공백에 대한 전형적인 거룩한 전쟁 .

이제 여기를보십시오 : 탄성 탭 스톱 . 모든 문제가 해결되었으며 매우 유용한 새로운 동작이 추가되었습니다.

탄성 탭 스톱

탭과 공백에 대한 논의에서 탄력적 인 탭 스톱이 언급 되었습니까? 왜 안돼? 탄력있는 탭 스톱 아이디어에 너무 심각한 단점이 있습니까?

편집 : 나는 "왜 그들이 언급되지 않은지"에 너무 많은 강조를 한 것에 대해 사과드립니다. 그것은 제가 의도 한 것이 아닙니다. 질문은 아마도 주제가 아닐 수도 있습니다. 내가 정말로 의미하는 것은 명백히 유익한 아이디어의 더 넓은 채택을 방해하는 이것의 가장 큰 단점은 무엇입니까? (모든 것이 이미 그것을 지원하는 이상적인 세상에서)

( 탄력적 인 tabstopsVisual Studio 구현 에 대한 Microsoft Connect 요청과 Eclipse요청 도 이미 있습니다. 또한 탄력적 인 tabstops를 구현하는 다른 편집자 에 대한 질문이 있습니다. )



11
"프로그래밍 대 스페이스"토론에서는 결코 언급되지 않습니다. 워킹 프로그래머가 이런 것들을 사용할 방법이 거의 없기 때문입니다. 어쩌면 Eclipse, VS, gvim 및 emacs 구현이 있으면 변경 될 수 있습니다.
Paul Tomblin

2
나는 그 아이디어가 정말 마음에 들지만, 한 달 동안 함께 살 때만 함정이 무엇인지 실제로 알 수 있습니다. 지금까지 모든처럼, 당신이 ... 기대하지 않을 것이다 가지 않는 경우가있을 보장
크리스 버트 - 브라운

3
@ ChrisBurt-Brown 항상 위험합니다. 예. IntelliSense에는 원하지 않는 텍스트를 대체하는 것과 같은 함정도 있습니다. 그러나 전반적으로 C #의 IntelliSense는 큰 뚱뚱한 승리입니다.
Roman Starkov

4
저는 메모장에서 이것을 원합니다 ++ ... 지금 원합니다
Ben Brocka

답변:


32

거룩한 전쟁은 주관적이다

Nick의 탄력적 인 탭 스톱은 많은 사람들이 실행 가능한 솔루션에 동의하는 데 도움 이되는 놀라운 개념 입니다.하지만이 성전을 완전히 끝낼 것이라고 의심합니다. 결국 문제 이며 많은 프로그래머가 타협 비용에도 불구하고이 문제에 대한 입장에서 이것이 첫 번째 이유입니다.

예를 들어, "공간"측면의 많은 사람들 은 적절한 렌더링을 위해 소프트웨어추가 로직필요하기 때문에 여전히 싫어합니다 (예 : SCM 웹뷰에서 변경 세트보기).

구현 문제

그러나 가장 눈에 띄는 이유는 바로 그것입니다 항목에 대한 기술 장벽 : 그것은이다 근본적으로 다른 개념 의 IDE 및 텍스트 편집기에서 년의 수 (그렇지 않으면 수십 년)에 대해 구현 된 것과. 상당히 다른 fasion으로 라인을 처리하기 위해 이들 중 일부를 다시 작성해야하므로 라인 처리 코드에서 깊고 긴밀한 결합을 겪을 가능성이 높은 구형 및 대형 시스템에서는 어려움을 겪습니다. 그러나 처음부터 시작할 때 ( 닉의 데모 또는 Go타자기 패키지를 생각하면) 훨씬 쉽게 수행 할 수 있습니다 .

개인적인 일화의 경우, 나는 이맥스 지원이 있는지 물어보기 위해 저자에게 잠시 다가가는 것을 기억합니다.이 특별한 경우에 그는 사소하지 않은 이유로 이것을 언급했습니다. 또한이 기능을 구현하고 대중에게 제공 할 수 있도록 커뮤니티의 도움을 요청했습니다.

우리는 충분히 배려합니까?

세 번째 이유는 일부 개발자가 문제에 매달리지 않았으며 노력을 지원하기 위해 여분의 마일을 가지려고 실제로 신경 쓰지 않기 때문입니다. 대부분의 경우 spaces-vs-tabs 충돌은 비즈니스 차단 기능이 아니므로 문제의 원인은 많지 않습니다.

당신이 그것을 원한다면, 당신은 그것을 위해 싸워야합니다. 오픈 소스 소프트웨어에서 가능한 것입니다. 그리고 만약 당신이 이것들을 충분히 바꾸면, 폐쇄 된 소스는 그것의 아주 작은 부분이라면 사용자의 일부를 잃을 위험에 따라야합니다.

그래서 원한다면 Nick에게 손을 줘.


(주제 이외) 다른 "이것이 훌륭하지만 아주 작은"종류의 기능이 Visual Studio와 같은 제품으로 어떻게 만들어 지는지 종종 궁금합니다. 팀의 누군가가 단순히 개인적인 이유로 그것을 구현할 시간을 찾은 것 같습니다. 생각 한 번에 여러 줄에 입력 예를 들어 비주얼 스튜디오에서; 그것은 수만 명의 사람들이 그것을 요구하는 것과 같지 않지만 오히려 그것을 좋아합니다.
Roman Starkov

3
@romkyns : 많은 것들에 관해서는 조용한 내부자 또는 게이트에서 비명을 지르는 천 개의 목소리가 필요합니다.
haylem

35

여러 번 나는 단어의 배치를 제어하는 ​​숨겨진 자동 규칙없이 문서가 원하는 방식으로 보이도록 워드 프로세서와 싸워야했습니다. 편집자가 왜 그 단어들을 거기에 두어야하는지 알아 내기 위해 1 초를 쓰고 싶지 않습니다.


11
나도 마찬가지입니다. 나는 그런 감정에 완전히 공감합니다. 그러한 규칙은 정말 저를 좌절시킵니다. 그러나 이것은 두 가지면에서 다릅니다. 하나 : 현재 탭 스톱과 마찬가지로 원하지 않는 경우 탭 스톱을 사용할 필요가 없습니다. 동료의 텍스트를 사용하는 경우 동료의 텍스트를 그대로 둘 수 있습니다. 두 번째 : 탄력적 인 탭 스톱에는 숨겨진 규칙이 없지만 명백히 명백한 규칙이 있습니다. 이 동작은 완전히 자연 스럽습니다. 텍스트 내에서 임의의 일반적으로 관련이없는 위치에서 발생하는 기존 탭 스탑보다 훨씬 자연 스럽습니다. 이것이 더 이상 들여 쓰기 이외의 탭 탭을 사용하지 않는 이유입니다.
Timwi

10
@ Timwi : 문제는 단점을 나열하는 것이 었습니다. 나는했다.
mhoran_psprep

14
GIF에서 분명하지는 않지만 "TAB"을 누를 때마다 나오는 것은 수직으로 올바르게 정렬된다는 것입니다. 워드 프로세서와는 다릅니다. 내가 게시 한 링크에서 실제 대화식 데모를 시도하면 자연 스러울 것입니다.
Roman Starkov

3
@mhoran_psprep : 충분히 감사합니다. 귀하의 의견에 감사드립니다. 나는 우리가 질문에 대한 다른 해석을보고 있다고 생각합니다. 기능을 사용하여 자신의 단점을 나열하고 있지만 기능을 소개하는 단점이 있다고 생각했습니다 (즉, 사용 가능 하고 필수 아님).
Timwi

27

내가 처음 들었을 때입니다. 그것들이 좋은 아이디어인지 확실하지 않지만 이미 코드를 자동으로 포맷하는 도구 (들여 쓰기)가 있기 때문에 거의 사용되지 않는 것 같습니다.

vim에서 영리한 탄력있는 탭 스톱을 열고 편집하면 어떻게됩니까? 탭이 자동으로 정리됩니까? 아니면 엉망입니까?

내가 본 것처럼 주요 단점은 차이점, 버전 제어를 깨뜨리고 지원하지 않는 편집기와 호환되지 않을 수 있습니다. 그것들을 지원하기 위해 많은 코드 수정이있을 수 있으며 "코드를 포맷하는 또 다른 탭"기능보다 더 중요한 것들이 있습니다. 결국 indent메모리가 제공되면 위의 모든 작업을 수행 할 수 있습니다.


9
거꾸로 생각하는 태도. 사람들이 좋아하는 오래되고 오래된 도구는 아직 대처할 수 없기 때문에 진전을 보자 ! (당신에게 정말 중요한 것처럼, 그래서 아이러니 물론, 인 등 정력 이러한 도구 (), 오픈 소스입니다, 당신은 (그리고 아마도 수 있어야 ) 그것에 탄성 탭 위치 지원을 추가)
Timwi

14
@ Timwi : 당신은 내가하고있는 요점을 완전히 놓치고 있습니다. 탄성 탭 스톱을 인식하지 못하는 코드 파일을 구문 분석하면 어떻게됩니까? 당신은 엉망으로 끝나는가? 버전 관리 및 차이점은 무엇입니까? 모든 도구가 $ feature를 지원하기를 바라는 것은 그러한 도구가 오픈 소스 인 경우에도 비현실적입니다.
Sardathrion 2019

14
@Timwi : 모든 사람들이 탄력있는 탭 스톱을 생각하는 것만 큼 훌륭하다고 생각합니다. 사실이 아닐 수도 있습니다.
Sardathrion

7
@Sardathrion이 맞습니다. 윈도우 시스템이없는 * nix 서버에 원격으로 접속해야하고 Vim / Emacs / Pico / Whatever로 일부 코드를 검사해야 할 경우 어떻게됩니까? 읽을 수있는 메커니즘이 있으면 괜찮을 것입니다 ... 그렇지 않으면 악몽이 될 것입니다. 탄성 탭의 이점이 어쨌든 유익하지 않다는 것을 알 수 없습니다. 내가 사용하는 IDE에서 코드가 어떻게 작동하는지보기 위해 이미 자동 서식을 지정할 수 있습니다.
Rig

7
버전 제어 포인트는 좋은 것입니다. 사람들은 수정하는 코드와 임의로 코드의 주석 배치 / 형식을 자동으로 변경하기 시작하는 편집자를 고맙게 생각하지 않습니다 (OP 애니메이션의 마젠타 섹션 참조) gif). 참조 구현을 사용하는 것이 도움이 될 수 있지만 지금까지 내가 본 것은 놀라운 일이 아닙니다. emacs는 이미 몇 가지 추가 키 입력 (이것은 좋은 것임) 으로이 작업을 많이 수행합니다.
mcmcc

13

솔직히 말해서, 당신이 처음 흥분을 극복 한 후에는 그것들이 유용하다고 생각하지 않습니다. 예를 들어, 나는 줄 끝에 주석을 좋아하지 않습니다 – 나는 항상 주석을 별도의 줄에 넣습니다. 이를 통해 탄성 탭의 주요 사용이 중단됩니다.

그 후에도 함수 인수와 매개 변수 및 긴 할당 목록을 정렬하는 데 계속 사용할 수 있습니다.

그러나 전자의 경우 모든 인수를 하나의 추가 수준으로 들여 쓰는 경향이 있으며 그것은 나에게 완전히 잘 작동합니다.

void foo(
    int x,
    int y,
    string z
)

그리고 보이지 않는 어떤 것을 변경해야합니다.

그리고 과제를 정렬하는 데는 그렇게하지 않습니다. 과제물 주위에 하나의 공백을 두었습니다. 또한 많은 과제를 함께 묶지 않기 때문에 가독성 문제가 거의 없습니다.

요약하면, 탄성 탭은 절대적이 제로 나에 대한 유용성을. 이것은 물론 매우 개인적인 취향 일 수 있지만 잘 작동한다는 것을 알았으며 탄력있는 탭에 대한 지원 부족은 다른 사람들이 비슷하게 생각하기 때문이라고 생각합니다.

경우 편집자가이를 구현하는 것이, 나는 여전히 그들을 사용하지 않을 것입니다.


감사합니다. 어쨌든 줄의 시작 이외의 것을 정렬하지 않기 때문에 원하는 경우 가변 너비 글꼴을 행복하게 사용할 수있는 것처럼 보입니다. Visual Studio는 실제로 이것을 꽤 잘 지원하며 가독성 향상이 좋습니다.
Roman Starkov

1
@romkyns 우리는 그것에 대해와 과정에서 논의를했다 나는 몇 시간 동안 프로그래밍을위한 비례 글꼴을 사용하여 시도합니다. 결론은 들여 쓰기를 무시할 때도 고정 폭 글꼴이 더 잘 작동한다는 것입니다. 그 외에도 나는 현재 Vim과 콘솔에서만 독점적으로 일하고 있으며, 어느 것도 비례 글꼴을 지원하지 않을 것입니다.
Konrad Rudolph

1
@romkyns 즉, 이러한 문제는 해결할 수 있습니다 (또는 프로그래밍을 위해 설계된 비례 글꼴로 해결할 수도 있습니다). 그러나 나는 여전히 필요성을 보지 못한다.
Konrad Rudolph

13

한 가지 단점은 한 줄 그룹에서 정렬 한 다음 다음 줄에서 들여 쓰기를 원할 경우 작동하지 않는다는 것입니다. 인접한 줄의 탭 정지를 그룹화하기 때문입니다.

def foo( bar,
         xyzzy ):
         wibble() # Too much indentation

내가 원하는 것 :

def foo( bar,
         xyzzy ):
    wibble()

중괄호 언어의 경우 일반적으로 여는 중괄호를 자체 줄에 애니메이션으로 표시하여 해결할 수 있기 때문에 문제가 덜 될 수 있지만 공백에 민감한 언어의 경우 빠르게 고통을 겪습니다. 그리고 당신은 공백을 사용하는 것으로 돌아 가야합니다.


동의했다. Nick의 구현은 파이썬과 같은 언어에서는 전혀 작동하지 않습니다.
Roman Starkov

3
왜 이것이 작동하지 않습니까? 이것은 근본적인 제한이 아니며 알고리즘은 언어를 인식해야합니다. 그러나 Vim은 오늘날에도 어느 정도까지 마찬가지입니다. 예를 들어 Vim은 언어에 따라 다른 들여 쓰기 규칙을 정의합니다. 이것은 파이썬 들여 쓰기를 쉽게 수용 할 수 있습니다.
Konrad Rudolph

1
@KonradRudolph 아니오, 그들은 할 수 없었습니다. 탄력있는 탭 정지 그리기는 텍스트 그룹을 자동으로 들여 쓰기 / 들어 쓰기를하지 않는 기능입니다. 한 가지 예는 "if"문의 끝입니다. 명세서를 종료하기 때문에 들여 쓰기를 시도하고 들여 쓰기를 시도하지만 "스마트 한"탄력있는 탭 스톱은 위의 한두 줄도 들여 쓰기를하지 않기로 결정합니다. 등등 ... 그리고 텍스트를 명시 적으로 그룹화해야한다면, 요점은 무엇입니까? 들여 쓰기를 직접 수정하는 것보다 더 많은 작업이 필요합니다 ...
Izkata

1
@Izkata 수동으로 들여 쓰기를하지 않으면 단순히 현재 그룹을 끝내야합니다. 탄성 탭이 수동으로 멈추면서 들여 쓰기를 제어 한 이유는 무엇입니까? 당신은 그렇게하지 않을 것입니다. 그래서 알고리즘은 그것을 할 때 위의 블록을 들여 쓰기하지 말고 블록을 끝내야한다는 것을 알고 있습니다.
Konrad Rudolph

1
오, 좋은 지적입니다. 흠 ... 아마도 당신은 논쟁을 두 번 들여 쓸 수 있습니까? 그렇다면 wibble()들여 쓰기가 하나뿐이므로 함수 인수와 정렬되지 않습니까?
Ajedi32

12

왜 수직 탭 문자 (VT, ASCII 11)를 탄성 탭 스톱 사용을 나타내도록 만들지 않습니까? 주류 프로그래밍 언어 에서는 아무 목적없지만 모든 AFAIK에서 유효한 공백으로 구문 분석됩니다.

이는 탄력적 탭 스톱 사용이 더 이상 외부화 된 규칙이 아니라는 것을 의미합니다 (예 : "이 파일은 탄성 탭 스톱으로 포맷되었습니다. 설정하십시오"). 사례별로 선택합니다.

기존 텍스트 편집기는 일반적으로 세로 탭 대신 글리프 또는 단일 공백을 표시합니다. 이것은 이상적이지는 않지만 적은 비용으로 IMO를 지불합니다.


10

그것들은 대부분의 텍스트 편집기 IDE에서 구현되지 않았기 때문에 언급되지 않았습니다. 그것들은 프로젝트에서 거의 사용되지 않는 참신함입니다.

펀치 카드 시절부터 프로그래밍을 배치하는 데 공간이 사용되었습니다. 탭이 나왔고 누군가가 자신들이 좋은 생각이라고 생각했습니다 (그들은 잘못되었습니다 : p).

대부분의 최신 편집자가 탭을 공백으로 자동 변환 할 수있는 시대에는 상당히 의미가 없습니다.

탭 대 공백처럼 사소한 것을 처리하기 위해 또 다른 도구를 설치해야한다는 것은 확실히 나에게 호소력이 없으며, 대부분의 동료에게는 그렇게 생각하지 않습니다.


나는 그들이 모욕으로 내려 가면서 의견을 정리했습니다.
ChrisF

1
탄성 탭 스톱에 대한 아이디어를 좋아하는 주된 이유는 탭과 공백의 문제를 해결하기위한 것이 아니라 원래 질문의 GIF에 표시된 동작 때문입니다. 자동 통증없는 정렬. 또한 VCS 차이점의 경우 해당 예에서 공백 변경이 필요하지 않다는 추가 이점이 있습니다.
Ajedi32

"아직 다른 도구를 설치하고있다 ..."는 충분하지 않다. 이미 사용중인 도구가 충분하지 않은 것처럼 말이다.
Milind R

@MilindR 당신이 그것을 충분히 논쟁으로 생각하든 아니든, 그것이 (3 년 전) 내가 이것에 관심이없는 이유입니다. 유용한 도구를 많이 사용한다고해서 실제로 환경에 추가하지 않는 다른 도구를 추가 할 필요는 없습니다.
TZHX

이와 같은 태도는 MS와 같은 회사가 사용자를 새로운 UX로 강제로 결정하는 이유입니다 ... 플로피-> CD 전환에 동일한 태도가 적용되면 어떤 일이 일어날 지 생각합니다.
Milind R

4

IDE가 지원한다면 (Microsoft!) 많은 도움이 될 것이라고 생각합니다. 사람들이 꽃 상자를 옆으로 때리고 읽을 수있게되면 발견 할 수 있습니다. 소스 코드에 갑자기 더 많은 주석이 추가 될 수 있습니다 (좋은 일이 될 수 있습니다).

우리는 또한 '도구 설명'을 '경우에 좋을까요?'목록에 추가 할 수 있다고 생각하므로 큰 주석 블록을 숨기고 필요할 때 쉽게 볼 수 있습니다. 어쩌면 우리는 문서의 일부를 구성하는 주석 블록을 가질 수도 있습니다 (모형이 아닌 코드에 포함 된 적절한 사용자가 읽을 수있는 문서 조각이 아닙니다)

단점 : 실제로 1 개만 수정했을 때 많은 줄이 변경된 것처럼 보이면 소스 diff가 나빠 보일 수 있습니다 (편집기가 탭을 공백으로 변환하여 파일을 저장 한 경우). 또는 탄성 탭이 단일 문자 (또는 2 개의 탭 정지)로 구현 된 경우 편집기 외부에서 소스를 보는 것이 좋지 않을 수 있습니다.

나는 줄 끝의 '탭 탭'이 주석 블록을 탄력 화하고 그에 따라 후속 행에 대한 모든 주석을 정렬합니다 (이중 탭 간격이 있음).


3

내가 보는 방법은 다음과 같습니다. 대부분의 인기있는 도구가 이미 탄성 탭 스톱을 지원하면 많은 사람들이 도구를 사용합니다. vi의 탐색 / 편집 모드, 구문 강조 표시 및 나중에 Intellisense에서도 마찬가지입니다. 각각의 경우에, 확립 된 지혜는 그것이 유용하지 않거나 필요하지 않다는 것이었지만, 구현되어 시작되었습니다.

물론 탄성 탭 스톱은 상대적으로 영향이 적습니다. 대부분의 사람들은 현 상태에 충분히 만족하므로 신경 쓰지 않습니다. 유사한 추론이 일부 사람들이 자신이 가진 것에 만족하고 더 진보 된 것으로 전환 할 이유가없는 많은 상황에 적용됩니다. 다시 말해, 탄성 탭 스톱의 가장 큰 문제는 거의 모든 다른 좋은 아이디어와 동일합니다. 견인력을 얻어야합니다.

그러나 이것이 기능을 점진적으로 채택 할 수 없다는 것을 의미하지는 않습니다. 팀 전체에 새로운 컴파일러와 새로운 IDE가 필요하지만 모든 단일 프로그래밍 언어가 점진적으로 채택되었습니다. 모든 단일 하드웨어 아키텍처와 다른 많은 예에서도 마찬가지입니다. 기존 도구와의 통합이 부족한 경우도 마찬가지입니다. 예를 들어 "통합 -diff 형식"도 마찬가지입니다. 그럼에도 불구하고 자동화 된 도구로 이해하기 어려운 읽기 어려운 이전 형식을 점진적으로 대체했습니다. (예 : 패치). 이러한 도구는 시간이 지남에 따라 업그레이드되었습니다.

나는 다른 사람들이 언급 한 interop 문제에 감사하지만, 그럼에도 불구하고 우리의 망설임없이 이것을 채택 할 팀이 분명히있을 것이다. diffing, merging 등과 같은 외부 도구는 처음에는이를 지원하지 않지만 공급 업체가 해당 기능을 포함하도록 권장합니다. 이것이 항상 진보 한 방법입니다. 일시적인 과도기에는 약간의 고통이 필요하지만 결국에는 그만한 가치가 있습니다.


C vs C ++ 인수는 약간 잘못된 것으로 보입니다. 이것이 "일부 사람들"의 경우에 해당되는 것이 사실 일 수도 있지만 (올바로 말했듯이) 상황에 따라 C를 고수하거나 C ++를 선호하는 분명한 이유가 있습니다. 기본 설정에서 C ++ 런타임의 크기 중 하나입니다.
haylem

나는 haylem과 함께있다. 당신의 요점은 C- 대 -C ++ 비교 없이는 더 건전 할 것이다. 그들은 상당히 다른 언어입니다. 내 생각에 C는 시스템 프로그래밍 및 많은 제어가 필요한 다른 저수준 작업 (예 : VM)을위한 것입니다. C ++은 추상화가 복잡성 (네임 스페이스, STL 컨테이너 및 알고리즘, 템플릿)을 관리하는 데 유용하지만 성능은 여전히 ​​문제입니다 (게임이 가장 눈에 띄는 예).
Jon Purdy

@haylem : 피드백 주셔서 감사합니다. C / C ++에 대한 참조를 제거했습니다.
Timwi

@ JonPurdy : 피드백 주셔서 감사합니다. C / C ++에 대한 참조를 제거했습니다.
Timwi

2

내가 가진 가장 큰 문제는 문서 전체의 간격이 일정하지 않다는 것입니다. 나는 프로그래머로서 나는 '표준'들여 쓰기에서 루프 또는 if 문을보고 다른 들여 쓰기에서 주목하는 것을 짜증나게 할 것입니다. 나는 개인적으로 나는 내가보고있는 코드 블록뿐만 아니라 문서 전체에 걸쳐 모든 중괄호가 정렬되어있는 것을 좋아한다는 것을 알고있다.

전반적으로 나는 그것이 좋은 생각이라고 생각하지만 개인적으로 나는 그것을 좋아하지 않을 것입니다.


1

방금 친숙한 프로그래밍 언어 (주로 HTML / XML 및 C와 같은 언어)와 함께 잘 작동하는 jEdit의 탄력적 탭 스톱 구현을 시도했습니다. 그러나 Python 코드를 사용하면 렌더링 방법이 표시됩니다 (탭 대신 공백이 정렬되는 방식을 보여주는 공간).

def foo(x):
             '''<1 tab before the docstring.
No tab       <tab
No tab       <tab
             <tab  <another tab
             <tab  <another tab
             <tab'''
             if 1 or 2:    #<Tab before this comment
                           yield True

간격에 의존하는 Python과 같은 언어의 경우 탄력적 인 탭 중지에서 제공하는 기능을 비활성화하지 않으면이 기능이 중단됩니다. Vim 및 Emacs와 같은 편집기는 옵션의 이름과 비활성화 방법을 알고 있으면 대부분의 기능을 비활성화 할 수 있지만 위와 같은 코드에서는이 기능을 비활성화해야합니다.

즉, x86 ASM, C, C ++, Go, XML, HTML 및 공백에 크게 의존하지 않는 다른 사람들에게 좋습니다.

import (
    "fmt"    // We love formatting functions.
    "io"     // Because I/O is useful.
    "os"     // Can't open a file without os.Open!
)

type Foo struct {
    Field1              int          // This is properly aligned
    ReallyLongField2    string       // with this.
    privateField        io.Reader    // Elastic tabstops are great for Go.
}

Scheme과 같은 Lisp 방언에는 탄력적 인 탭 스톱을 "못생긴"코드로 만드는 자체 규칙이 있습니다. tabstop 설정을 2 열 규칙에 맞게 변경하고 비정상적인 위치에 함수와 인수 사이에 tabstops를 삽입하면 다음과 같습니다.

(let loop ((n 1))
  (if  (> n 10)
        '()
        (cons  n
               (loop (+ n 1)))))

더 읽기 쉬운 대 :

(let loop ((n 1))
  (if (> n 10)
      '()
      (cons n
            (loop (+ n 1)))))

물론 이것은 파이썬 예제만큼 나쁘지는 않지만 코드의 가독성을 확실히 감소시킵니다. C # 또는 C ++와 같은 코드로 코딩 할 때 기능을 매우 좋아하지만 공백이나 기능이 시각적으로 도움이되는 Python 또는 Scheme과 같은 언어로 코딩 할 때는 기능을 싫어합니다. 탄력적 인 탭 스톱은 별도의 들여 쓰기 유틸리티 없이도 도움이되도록 특별히 만들어졌지만 모든 프로그래밍 언어에 적용되는 것은 아닙니다.


0

Emacs는 닫히지 않은 괄호가있는 상태에서 이미 들여 쓰기를 처리하고 wilmafred 와 자동으로 정렬 합니다. Eclipse가 왜 그렇게하지 않는지 모르겠습니다. 좋아, 나는 아이디어가 있지만 그것은 무료입니다.

많은 어려움없이 Emacs가 주석을 정렬하도록 할 수는 있지만 AFAIK는 아무도 그것을 원하지 않았습니다.


2
나는 마지막 문장을 트롤링으로 만 해석 할 수 있습니다. 분명히 적어도 한 명의 다른 남자가 논란의 여지가있는 페이지, Java 구현 및 GIF가 좋은 이유를 보여주기에 충분할 정도로 심하게 원했기 때문입니다. 답을 읽으면 Nick도 혼자가 아닙니다. 아, 잠깐 이쪽을 봐 너무.
Roman Starkov

그건 그렇고, Emacs wilma는 함수 이름의 길이를 변경하는 것과 같이 편집 할 때 다시 들여 쓰기 합니까? 그렇다면 탄성 탭 스톱과 거의 비슷합니다.
Roman Starkov

@romkyns : 나는 조업 할 의미하지 않았다, 나는 단지 것을 의미 내가 EMACS에서 들여 쓰기 주석의 스타일을 본 적이 없었다. 일반적으로 EMACS는 입력 할 때 여러 줄을 다시 들여 쓰지 않지만 변경할 수도 있습니다.
kevin cline
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.