it-swarm-ko.tech

vim의 탭과 공백

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

예 : 줄의 시작 부분에 두 개의 탭과 7 개의 공백이 있으면 tabstop=3를 입력하고 Enter 키를 누르면 다음 줄에 처음에 4 개의 탭과 1 개의 공백이 있지만 원하지 않습니다.

71
RQ

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

:set expandtab

파일의 모든 탭을 3 개의 공백으로 바꾸려면 (tabstop=3) :

:%s/^I/   /

(어디 ^I는 TAB 캐릭터)

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.
78
user11211

모든 TAB을 (를) SPACE (으)로 변환 할 수 있습니다

:set et
:ret!

또는 모든 SPACETAB로 변환

:set et!
:ret!
42
kev

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

:help copyindent

'copyindent''ci'boolean (기본값 꺼짐); 버퍼에 로컬; {가 아닌 Vi}

새 줄 자동 들여 쓰기시 기존 줄 들여 쓰기 구조를 복사합니다. 일반적으로 새 들여 쓰기는 일련의 탭으로 구성되고 필요에 따라 공백이 뒤 따릅니다 ( 'expandtab' 이 활성화 된 경우 공백 만 사용되지 않는 경우). 이 옵션을 활성화하면 기존 줄에 들여 쓰기에 사용 된 문자를 새 줄에 복사합니다. 새 들여 쓰기가 기존 줄보다 크면 나머지 공간은 일반적인 방식으로 채워집니다.

참고 : 'compatible' 을 설정하면 'copyindent' 이 재설정됩니다.
- 'preserveindent' 도 참조하십시오.

:help preserveindent

'preserveindent''pi'boolean (기본값 꺼짐); 버퍼에 로컬; {가 아닌 Vi}

현재 줄의 들여 쓰기를 변경할 때 최대한 들여 쓰기 구조를 유지하십시오. 일반적으로 들여 쓰기는 일련의 탭으로 대체되고 필요에 따라 공백이 뒤 따릅니다 ( 'expandtab' 이 활성화 된 경우 공백 만 사용되지 않는 경우). 이 옵션을 사용하면 들여 쓰기가 들여 쓰기에 가능한 한 많은 기존 문자를 유지하고 필요한만큼 탭이나 공백 만 추가합니다.

참고 : ">>"를 여러 번 사용하는 경우 들여 쓰기는 탭과 공백이 혼합 된 것입니다. 당신은 이것을 좋아하지 않을 수 있습니다.
참고 : 'compatible' 을 설정하면 'preserveindent' 이 재설정됩니다.
- 'copyindent' 도 참조하십시오.
: retab을 사용하여 공백을 정리하십시오.

41

여기 내 .vimrc :

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

소스 코드에서 탭을 절대 원하지 않기 때문에 이것은 잘 작동합니다. 귀하의 질문에 따라 다음 줄에 두 개의 탭과 일곱 개의 공백을 유지하고 싶을 것입니다. 그리고 그 스타일을 수용하도록 vim을 가르치는 방법이 확실하지 않습니다.

25
Greg Hewgill

이것이 가장 도움이 될 수 있습니까?

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

set softtabstop=2
1
svrist

'ts'설정에 따라 모든 탭을 공백으로 바꾸려면 : retab을 사용할 수 있습니다. 반대로 할 수도 있습니다.

1
graywh