Vim : 탭을 공백으로 변경하기


2

나는이 질문이 여러 번 부탁 된 것을 알고 있지만 특히 문제를 식별 할 수 없기 때문에 주로 내 문제에 대한 해결책을 찾지 못한다.

다음은 이벤트의 타임 라인입니다.

  • python2.7로 작성된 오래된 파이썬 파일 열기 - 모든 것이 정상입니다.
  • python2.7 대신 python3을 사용하여 .py 파일을 실행하기위한 키 바인딩 변경 - 예상대로 많은 IndentError s이지만 파일은 여전히 ​​구조체 / 레이아웃 / 공백 / 탭 수와 동일합니다.
  • 추가 된 expandtab 내 .vimrc에 - 더 이상 IndentError 더 이상 불일치가 있지만 새로운 IndentError 왜냐하면 내 소스 코드의 구조가 모두 엉망이 되었기 때문입니다.
  • 나는 제거한다. expandtab 내 .vimrc에서 그리고 나는 여전히 죽이기 소스에서 똑같은 것을 얻는다. 심지어 세션을 죽이면, 꽤 iTerm이 github에서 신선한 소스를 가져온다 ... 왜?

그냥 분명히하기 위해 지난 몇 달 동안 내 vimrc에서 변경된 두 가지 사항 만 있으며 두 가지 변경 사항이 오늘 아침에 이루어졌습니다. 첫 번째는 재편성 중이 었습니다. <F9> 2.7 대신에 파이썬 3을위한 셸 명령을 내렸고, 소스 코드의 구조에는 영향을 미치지 않았다. 두 번째 변화는 expandtab 모든 것을 망쳐 놓은 ... 제거 expandtab 나의 vim 경험을 그것을 추가하기 이전의 방식으로 되돌려주지 않는다.

필자의 출처에 대한 구조적인 변경은 준결위적 인 것이므로 실제로 어떤 일이 일어나는지 설명하겠습니다.

예전처럼 :

class GUI():
    def __init__(self):
        suite of code

이제 다음과 같이 보입니다.

class GUI():
    def __init__(self):
    suite of code

모든 중첩 된 코드처럼 보이기 때문에 전반적으로 이렇게됩니다. 즉, 탭을 4 칸으로 처음 확장하면 잘 작동하지만, 첫 번째 탭 내에서 탭을 더 중첩 시키면 그 것처럼 보입니다. 대신 탭을 삭제합니다.

다른 이상한 일들이 일어나고 있지만 실제로 패턴을 볼 수는 없습니다.

무슨 일이야?


첫 번째 들여 쓰기가 네 개의 공백 인 것처럼 보였고 두 번째 들여 쓰기는 탭이었고 코드는 tabstop Vim은 다음과 같은 가정하에 표시하거나 확장합니다. tabstop=4. 나쁜 vim 설정으로 파일을 편집하기 전의 원본 소스가 있습니까?
Random832

여기에 소스가 있습니다. github.com/Aweeeezy/Simulator/blob/master/GUI.py 코드가 다음과 같이 작성된 것은 아닙니다. tabstop=8 나는 .vimrc (와 tabstop=4 ) 전에 파이썬을 알고 있기까지.
aweeeezy

코드가 확실히 있습니다. tabstop=8, 나는 8- 구역 들여 쓰기에서 하나의 탭을 선택할 수 있습니다. 혼합 된 들여 쓰기 모드의 파이썬은 탭을 8 개의 공백으로 취급합니다. vim 구성이 이전에 어떻게 보이는지 모르겠습니다.
Random832

흥미 롭습니다 ... 언젠가 그 사이에 tabstop이 추가되었을 것입니다. 어쨌든 문제를 격리 해 주셔서 감사합니다. 소스 코드를 소급하여 작성한 것처럼 소급 적용에 대한 조언 tabstop=4 대신에? 편집 : 아니면 그냥 변경해야합니까? tabstop 8 시까 지?
aweeeezy

%s/\t/(eight spaces)/g. 파이썬 코드에는 탭이 없어야합니다.
Random832

답변:


4

이 들기는 다른 모든 들여 쓰기 수준이 떨어지면 일반적으로 들여 쓰기 당 4 개의 공백이있는 코드를 보는 증상이지만 다른 모든 줄에는 8 개의 공백 탭이 있습니다 (예 : 4s, 1t, 1t4s, 2t), tabstop 4로 설정합니다.

파이썬 코드의 경우 코드의 모든 탭을 8 개의 공백으로 바꾸어야합니다. 통역사가이를 처리하는 방식 이었기 때문입니다. 일반적으로 다음과 같은 상황을 처리 할 수 ​​있습니다. :retab 명령 환경 tabstop 소스 코드가 원래 작성된 값으로 설정합니다.

:set ts=8
:retab 4

만약 expandtab retab가 탭을 공백으로 바꿉니다.


완전한! 수정하기 전에 시도했습니다. :set tabstop=8 뒤이어 :retab! 그리고 그것은 마술을했습니다. 이제 파이썬의 이전 버전에서 내 패키지를 새로운 패키지로 병합하려고하는 다음 문제에 대해 : / 나는 오랜 시간 전에 "항상 가상 env로 설치하라"라는 조언에 유의해야했다. 나는 아직도 그것이 어떻게 작동하는지 정말로 이해하지 못한다.
aweeeezy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.