문제

자동 들여쓰기가 켜져 있을 때 vim이 공백을 탭으로 바꾸는 것을 어떻게 방지합니까?

예:줄 시작 부분에 탭 2개와 공백 7개가 있는 경우 tabstop=3, Enter 키를 누르면 다음 줄의 시작 부분에 4개의 탭과 1개의 공백이 있지만 원하지 않습니다...

도움이 되었습니까?

해결책

탭을 전혀 사용하지 않는 것이 좋습니다.

:set expandtab

파일의 모든 탭을 3개의 공백으로 바꾸려면(다음과 매우 비슷해 보입니다.) tabstop=3):

:%s/^I/   /

(어디 ^I 성격)

VIM 온라인 도움말에서:

'tabstop' 'ts'      number  (default 8)
        local to buffer
Number of spaces that a <Tab> in the file counts for.  Also see
|:retab| command, and 'softtabstop' option.

Note: Setting 'tabstop' to any other value than 8 can make your file
appear wrong in many places (e.g., when printing it).

There are four main ways to use tabs in Vim:
1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
   (or 3 or whatever you prefer) and use 'noexpandtab'.  Then Vim
   will use a mix of tabs and spaces, but typing <Tab> and <BS> will
   behave like a tab appears every 4 (or 3) characters.
2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use
   'expandtab'.  This way you will always insert spaces.  The
   formatting will never be messed up when 'tabstop' is changed.
3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
   |modeline| to set these values when editing the file again.  Only
   works when using Vim to edit the file.
4. Always set 'tabstop' and 'shiftwidth' to the same value, and
   'noexpandtab'.  This should then work (for initial indents only)
   for any tabstop setting that people use.  It might be nice to have
   tabs after the first non-blank inserted as spaces if you do this
   though.  Otherwise aligned comments will be wrong when 'tabstop' is
   changed.

다른 팁

내가 원하는 것은 이전 줄과 정확히 동일한 들여쓰기 문자를 갖는 자동 들여쓰기 줄입니다.

:help copyindent

'복사본' '시' 부울 (기본값 : 꺼짐);로컬에서 버퍼로;{Vi에서는 아님}

새 라인을 자동으로 인디언 할 때 기존 라인의 구조를 복사하십시오.일반적으로 새로운 인기는 일련의 탭과 필요에 따라 공백으로 재구성됩니다 ( '확장 탭' 활성화되며,이 경우 공백 만 사용됩니다).이 옵션을 활성화하면 새 라인 사본이 기존 라인에 들여 쓰기에 사용 된 문자가 무엇이든 만들어집니다.새 계약이 기존 라인보다 크면 나머지 공간은 정상적인 방식으로 채워집니다.

메모: '복사본' 다음과 같은 경우 재설정됩니다. '호환' 설정됩니다.
또한 참조하십시오 '보존자'.

:help preserveindent

'보존자' '파이' 부울 (기본값 : 꺼짐);로컬에서 버퍼로;{Vi에서는 아님}

현재 라인의 계약을 변경할 때 가능한 한 많은 인기 구조를 보존하십시오.일반적으로 들여 쓰기는 일련의 탭으로 대체 된 다음 필요에 따라 공백으로 대체됩니다 ( '확장 탭' 활성화되며,이 경우 공백 만 사용됩니다).이 옵션을 활성화한다는 것은 계약을 통해 기존 문자가 가능한 한 많은 캐릭터를 보존하고 필요에 따라 추가 탭이나 공백 만 추가합니다.

메모:">>"를 여러 번 사용할 때 생성 된 인간은 탭과 공백이 혼합되어 있습니다.당신은 이것을 좋아하지 않을 수도 있습니다.
메모: '보존자' 다음과 같은 경우 재설정됩니다. '호환' 설정됩니다.
또한 참조하십시오 '복사본'.
공백을 정리하려면 :retab을 사용하세요.

모두 변환할 수 있습니다. TAB 에게 SPACE

:set et
:ret!

또는 모두 변환 SPACE 에게 TAB

:set et!
:ret!

여기 내 일부가 있습니다 .vimrc:

set autoindent
set expandtab
set softtabstop=4
set shiftwidth=4

나는 소스 코드에 탭이 있는 것을 절대 원하지 않기 때문에 이것은 나에게 잘 작동합니다.귀하의 질문에 따르면 다음 줄에 2개의 탭과 7개의 공백을 유지하고 싶은 것 같습니다. vim에서 해당 스타일을 수용하도록 가르칠 수 있는 방법이 있는지 잘 모르겠습니다.

어쩌면 이것의 바닥이 당신에게 도움이 될 수 있습니까?

표준 vi는 탭 키를 문자 그대로 해석하지만, vim과 같이 더 똑똑한 인기 있는 vi 파생 대안이 있습니다.vim이 tab을 insert-a-tab 명령 대신 ``indent'' 명령으로 해석하도록 하려면 다음을 수행하십시오:

set softtabstop=2

'ts' 설정에 따라 모든 탭을 공백으로 바꾸려면 :retab을 사용하면 됩니다.그 반대도 가능합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top