Vim에서 탭 키 == 4 공백 및 중괄호 뒤에 자동 들여 쓰기


1265

어떻게 어떻게해야합니까 VI - Vim은 탭 (!, 탭에 나쁜 공간 변환)와 같은 중괄호 블록 후 탭 키 == 4 개 공간, 자동 들여 쓰기 코드하게 사용하지 않습니다 이맥스 수행을?

또한이 설정을 저장하여 다시 입력 할 필요가없는 방법은 무엇입니까?

나는 이것과 관련된 다른 질문을 보았지만 항상 내가 원하는 것에서 약간 벗어난 것처럼 보입니다.


답변:


1882

아래의 두 가지 답변에서 지적했듯이 이제 선호하는 방법은 smartindent를 사용하는 것이 아니라 대신 .vimrc 에서 다음을 사용하는 것입니다 .

filetype plugin indent on
" show existing tab with 4 spaces width
set tabstop=4
" when indenting with '>', use 4 spaces width
set shiftwidth=4
" On pressing tab, insert 4 spaces
set expandtab

당신에서 의 .vimrc : 파일 :

set smartindent
set tabstop=4
set shiftwidth=4
set expandtab

도움말 파일은 익숙해지기까지 약간의 시간이 걸리지 만 읽을수록 Vim은 더 잘 읽습니다.

:help smartindent

또한 이식성을 위해 다음 설정을 소스에 포함시킬 수 있습니다.

:help auto-setting

현재 설정을 보려면

:set all

으로 graywh 의견에서 지적 smartindent은 cindent로 대체되어있는 "작품 더 영리하게",하지만 여전히 주로와 언어 C와 같은 구문 :

:help C-indenting


4
expandtab을 설정 한 경우 공백을 사용해야합니다. "호환 가능"도 있습니까? 확장 탭을 기본값 인 "off"로 재설정하는 등 다양한 부작용이 있습니다.
— Ken

60
죄송하지만 smartindent는 cindent로 대체되었으며 C 스타일 구문에만 적합합니다. 다른 언어로 작업 할 때 vimrc에서 하나를 켜는 것이 문제가 될 수 있습니다. 대신 "filetype indent on"을 사용하십시오.
— graywh

2
음, smartindent은 또한 단지 C 스타일의 구문과 기본적으로 사용되지 않습니다.
— graywh

4
expandtab을 활성화하면 실제로 텍스트에 탭 문자를 입력하는 방법이 있습니까?
— Daniele Segato

3
@DanieleSegato <ctrl v> <tab> 삽입 모드에서 작동해야합니다. stackoverflow.com/questions/4781070/…
— Ken

236

관련, 탭과 공백을 모두 사용하는 파일을 여는 경우

set expandtab ts=4 sw=4 ai

전체 탭에서 모든 탭을 공백으로 바꿀 수 있습니다.

:%retab

10
참고로 탭을 공백으로 바꾸지 않으려면 expandtab 줄을 제거하십시오.
— Eno

6
공백이 탭이 아닙니까? ;-)
— Rob Wells

11
@ Rob-Wells : "공백"을 "공백"으로 변경했습니다. 지금 행복하니? ;-)
— netjeff

첫 번째 줄의 의미를 설명해 주시겠습니까?
— Fund Monica의 소송

2
expandtab은 탭이 공백으로 확장되는지 여부를 결정합니다. ts = tabstop = 파일의 <Tab>이 계산하는 공간 수입니다. sw = shiftwidth = (자동) 들여 쓰기의 각 단계에 사용할 공간 수입니다. ai = autoindent = 새 줄을 시작할 때 현재 줄에서 들여 쓰기를 복사합니다.
— mcmacerson

89

파일 유형별 들여 쓰기를 얻는 가장 좋은 방법은 filetype plugin indent onvimrc에서 사용 하는 것입니다. 그런 다음 같은 것들을 지정할 수 set sw=4 sts=4 et있는 .vim / ftplugin / c.vim, 예를 들어, 모든 파일도 편집중인 및 기타 비 C 형 구문이 제대로 들여 얻을 것이다 위해 사람들은 글로벌 만들 필요없이 (심지어 lisps) .


9
IMHO, 정답으로 표시된 답변보다 낫습니다. 파일 유형 들여 쓰기 및 현자 들여 쓰기
— 0fnt

62

대부분의 파일에 4 개의 공백 탭, Makefile의 실제 8 와이드 탭 문자 및 C / C ++를 포함한 다양한 파일에서 자동 들여 쓰기를하려면 파일에 다음을 입력 ~/.vimrc하십시오.

" Only do this part when compiled with support for autocommands.
if has("autocmd")
    " Use filetype detection and file-based automatic indenting.
    filetype plugin indent on

    " Use actual tab chars in Makefiles.
    autocmd FileType make set tabstop=8 shiftwidth=8 softtabstop=0 noexpandtab
endif

" For everything else, use a tab width of 4 space chars.
set tabstop=4       " The width of a TAB is set to 4.
                    " Still it is a \t. It is just that
                    " Vim will interpret it to be having
                    " a width of 4.
set shiftwidth=4    " Indents will have a width of 4.
set softtabstop=4   " Sets the number of columns for a TAB.
set expandtab       " Expand TABs to spaces.

왜 필요하지 else않습니까? 마치 마지막 줄이 모든 경우에 makefile 특정을 덮어 쓰는 것처럼 보입니다.
— lucidbrot

6
안녕하세요 @lucidbrot, "autocmd FileType make"문은 기본적으로 vim에게 Makefile을 열 때마다 사용할 설정을 알려줍니다. 아래 줄은 기본값을 설정합니다. 즉, "tabstop = 8 ..."설정은 파일을 열 때 나중에 적용되며 초기화시 적용되는 "tabstop = 4 ..."설정을 덮어 씁니다.
— Shervin Emami 2016

56

우분투와 같은 많은 Linux 시스템에는 .vimrc파일이 기본적으로 존재하지 않으므로 먼저 생성하는 것이 좋습니다.

.viminfo홈 디렉토리에 존재 하는 파일을 사용하지 마십시오 . 다른 목적으로 사용됩니다.

1 단계 : 홈 디렉토리로 이동

cd ~

2 단계 : 파일 작성

vim .vimrc

3 단계 : 위에서 언급 한 구성 추가

filetype plugin indent on
set tabstop=4
set shiftwidth=4
set expandtab

3 단계 : Shift+ 를 눌러 파일을 저장합니다 ZZ.


11
사용 Shift + ZZ하지 않으면 .swp 파일이 생성됩니다. 사용하십시오 wq.
— shas

6
@shas : "ZZ"는 ": x" 와 같습니다. ": wq"와 동일하지만 파일이 변경된 경우에만 저장한다는 점만 제외하고 ... ( Ctrl-Z다른 이야기입니다 ...)
— Gert van den 버그

1
@shas 그것은 사실이 아닙니다. 편집 sesion에 대한 스왑 파일을 원하지 않으면을 실행해야합니다 vim -n <file>. 스왑 파일은 저장시 생성되는 것이 아닙니다. 스왑 파일이 갑자기 종료 된 편집 세션을 복구하는 데 유용하기 때문에 그 목적을 거의 잃을 것입니다.
— Kaz

32

권장되는 방법은 파일 유형 기반 들여 쓰기를 사용하고 충분하지 않은 경우에만 smartindent 및 cindent를 사용하는 것입니다.

.vimrc에 다음을 추가하십시오

set expandtab
set shiftwidth=2
set softtabstop=2
filetype plugin indent on

다른 답변으로 도움이되기를 바랍니다.


12

~ / .vimrc를 편집하십시오

$ vim ~/.vimrc

다음 줄을 추가하십시오 :

set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab


6

자동 들여 쓰기는 현재 구문 모드를 기반으로합니다. 난 당신이 Foo.java를 편집하는 경우, 다음을 입력 알고 {타격 Enter들여 쓰기를 다음 줄을.

탭은 두 가지 설정이 있습니다. Vim 내에 콜론을 입력 한 다음 "set tabstop = 4"를 입력하면 탭이 4 개의 공백으로 표시됩니다. 콜론을 다시 누르고 "set expandtab"을 입력하면 탭에 공백이 삽입됩니다.

이러한 설정은 홈 디렉토리의 .vimrc (또는 Windows의 경우 _vimrc)에 놓을 수 있으므로 한 번만 입력하면됩니다.


0

먼저 Tab수동 들여 쓰기를 위해 Vim 의 키를 사용하지 마십시오 . Vim에는 들여 쓰기 양을 수동으로 늘리거나 줄이기 위해 삽입 모드의 명령 쌍이 있습니다. 이러한 명령은 Ctrl-T및 Ctrl-D입니다. 이 명령은 tabstop, shiftwidth및 의 값을 관찰하고 expandtab공백과 탭의 올바른 혼합을 유지합니다 (최대 탭 수와 필요한 수의 공백 수).

둘째, 자동 들여 쓰기를 사용하는 경우 이러한 수동 들여 쓰기 키를 아무리 많이 사용할 필요는 없습니다.

경우 Ctrl-T대신 Tab귀찮게 당신을, 당신은 그것을 다시 매핑 할 수 있습니다 :

:imap <Tab> ^T

deindent Shift-Tab를 수행하도록 다시 매핑 할 수도 있습니다 Ctrl-D.

:imap <S-Tab> ^D

여기서 ^ T와 ^ D는로 삽입 될 수있는 리터럴 제어 문자입니다 Ctrl-VCtrl-T.

이 매핑을 사용하면을 사용하여 리터럴 탭을 버퍼에 계속 입력 할 수 있습니다 Ctrl-VTab. 이 작업을 수행하면 :set expandtab켜져 있어도 확장되지 않은 탭 문자가 나타납니다.

을 사용하여 <Tab>지도 와 비슷한 효과를 얻을 수 :set smarttab있으며, 이로 인해 줄 앞의 백 스페이스가 스마트하게 작동합니다.

에서 smarttab모드 때 Tab행의 시작에 있지 사용, 그것은 특별한 의미가 없습니다. 삽입 모드에서 줄의 어느 곳에서나 사용하면 해당 줄의 들여 쓰기가 증가 하기 때문에 위의 Tabto 매핑과 다릅니다 .Ctrl-TCtrl-T

다른 유용한 매핑은 다음과 같습니다.

:map <Tab> >
:map <S-Tab> <

이제 우리는 몇 줄 Tab을 고르는 등의 작업을 할 수 있습니다. 또는 Tab줄을 두 번 쳐서 (명령 모드에서) 들여 쓰기를 늘리십시오.

적절한 들여 쓰기 관리 명령을 사용하면 모든 것이 세 개의 매개 변수 인 shiftwidth, tabstop및로 제어됩니다 expandtab.

이 shiftwidth매개 변수는 들여 쓰기 크기를 제어합니다. 네 개의 공백 들여 쓰기를 원하면 :set shiftwidth=4, 또는 약어를 사용하십시오 :set sw=4.

이 작업 만 수행하면 공백과 탭이 혼합되어 들여 쓰기가 만들어 noexpandtab집니다. 기본값 이기 때문 입니다. 사용하십시오 :set expandtab. 이렇게하면 버퍼에 입력 한 탭 문자가 공백으로 확장되고 Vim 관리 들여 쓰기는 공백 만 사용합니다.

경우 expandtab에, 당신이 모든을 통해 적절한 빔 메커니즘을하여 들여 쓰기를 관리하는 경우,의 값은 tabstop무관된다. 파일에서 탭이 발생할 경우 탭이 표시되는 방식을 제어합니다. 를 set tabstop=8 expandtab사용하여 하드 탭을 파일에 넣은 Ctrl-VTab다음 평소와 같이 다음 8 열 기반 탭 위치에 정렬합니다.


모든 매핑은 비재 귀적 변형을 사용해야합니다. 매핑 go <C-t>는 리터럴 대신 해당 구문을 사용할 수 있습니다. 마지막으로, <Tab>일반 모드 에서의 매핑 도 매핑 될 것입니다 <C-i>(같은 문자 임). 권장하지 않습니다. (당신은 멋진 vim 기능을 잃어 버립니다
— D. Ben Knoble

@ D.BenKnoble 나는 이것을 추천하지 않는다. Ctrl-T, Ctrl-D 및 <> 내 자신을 사용합니다. 의도 한대로 Vim을 사용하고 있습니다. 다른 편집기에서 Tab을 사용했던 사람들은 그다지 좋아하지 않을 수도 있습니다.
— Kaz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.