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-TCtrl-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.