탭을 4 개의 공백으로 재정의


1094

현재 설정은 8 개의 공백을 가정합니다. 어떻게 재정의 할 수 있습니까?



7
나는 그것을 얻지 못한다. 줄이 들여 쓰기되었음을 알기 위해 8 칸이 필요하지 않으며 필요한 것 이상으로 긴 줄의 텍스트에서 볼 수있는 문자를 제한합니다 (적어도 줄 바꿈하기 전에). 그러나 각자 자신에게. :)
weberc2

40
@ heinrich5991 나의 주장은 "들여진 줄을 쉽게 식별 할 수 있도록 가능한 적게 사용하는 것"입니다. 내 추정에 따르면, 들여 쓰기를 쉽게 식별 할 수있는 능력은 3 칸 미만에서 급격히 떨어지고 4 칸에서는 증가하지 않습니다. 따라서 4 공간을 초과하는 들여 쓰기는 내 경험에서 낭비입니다.
weberc2

7
@ weberc2 더 동의 할 수 없습니다, 친구. 그렇기 때문에 루비 또는 "현대 JavaScript"를 읽고 쓸모없는 폐소 공포증을 느낀다. 그것은 심하게 긴장된 구조를 따르려고 할 때 합법적으로 눈의 피로를줍니다. 빌어 먹을 승리를위한 하드 탭.

답변:


1615

그것은 당신이 무엇을 의미하는지에 달려 있습니다. 파일의 실제 탭 문자 4 칸 넓이 로 나타나 도록 하시겠습니까 , 또는 "tab"은 실제로 탭 키를 눌러 생성 된 들여 쓰기를 의미합니까? 입력 한 "탭"각각?

답변에 따라 다음 설정 중 하나가 적합합니다.

  • 4 칸 너비로 나타나는 탭 문자 :

    set tabstop=4
    

    소스 코드에서 실제 탭 문자를 사용하는 경우 이러한 설정을 원할 수도 있습니다 (실제로는 기본값이지만 방어 적으로 설정할 수도 있습니다).

    set softtabstop=0 noexpandtab
    

    마지막으로 들여 쓰기가 단일 탭에 해당되도록하려면 다음을 사용해야합니다.

    set shiftwidth=4
    
  • 공백 문자 4 개로 구성 되지만 탭 키로 입력 된 들여 쓰기의 경우 :

    set tabstop=8 softtabstop=0 expandtab shiftwidth=4 smarttab
    

위의 설정을 영구적으로 만들려면 vimrc 에이 줄을 추가하십시오 .

조정이 필요하거나 이러한 옵션의 의미가 무엇인지 이해하려는 경우 각 옵션의 의미에 대해 설명합니다.

tabstop

"공백"으로 측정 한 하드 탭 스톱의 너비-실제 탭 문자의 최대 너비입니다.

shiftwidth

"들여 쓰기"의 크기입니다. 또한 공백으로 측정되므로 코드베이스가 탭 문자로 들여 쓰기되면 탭 문자 shiftwidth수와 같기 를 원합니다 tabstop. 이것은 또한 =, ><명령 과 같은 것들에 의해 사용됩니다 .

softtabstop

이 값을 0이 아닌 값으로 설정하면 tabstop(삽입 모드에서) 탭 키가 공백과 탭 조합을 삽입 하여이 폭에서 탭 정지 를 시뮬레이션 합니다.

expandtab

이를 사용하면 탭 키 (삽입 모드에서)가 탭 문자 대신 공백을 삽입합니다. 이것은 retab명령 의 동작에도 영향을줍니다 .

smarttab

이 기능을 활성화하면 커서가 줄의 시작 부분에있을 때 탭 키 (삽입 모드에서) 삽입 공간 또는 탭이 다음 탭 정지의 다음 들여 쓰기로 이동합니다 (즉, 앞의 유일한 문자는 공백 임).

이들의에 대한 자세한 내용은 참조하십시오 (예 : VIM에서 ):help 'optionname':help 'tabstop'


18
Makefile은 항상 하드 탭 문자를 사용해야합니다. 그렇지 않으면 빌드가 실패합니다! 나는 방법에서 보여 stackoverflow.com/questions/234564/...
Shervin 년 Emami을

29
@Undefined 시스템 vim 설정입니다. ~/.vimrc사용자의 vim 설정입니다. 대부분의 사람들은 시스템 설정을 그대로두고 사용자 설정을 편집합니다. 참고 ~/.vimrc대부분의 시스템에서 그것을 만들 때까지 존재하지 않습니다.
Laurence Gonsalves 16:23에

4
Vim 사용자는이 set softtabstop=4기능 을 주목하십시오 ! 탭을 임의의 수의 공백으로 재정의했기 때문에 (시스템의 나머지 부분은 다르게 생각하지만) less, 또는 다른 편집기를 사용하여 코드를 읽는 데 지쳤습니다 vim! :-)
Ogre Psalm33

6
tabstop=8누군가이 대답이 4 개의 공백 으로 구성된 들여 쓰기 에 사용한다고 말하는 이유를 이해할 수 있습니까? 다양한 설정에 대한 설명을 읽은 후 이유를 알 수 없습니다. 또 다른 대답은 tabstop=4조금 더 이해가되는 사용법 입니다.
Kodos Johnson

5
@KodosJohnson이 tabstop옵션은 하드 탭 문자의 너비를 제어합니다. - 당신은 당신의 들여 쓰기 4-넓은 4 개 공백 문자가 아닌 하나의 탭 문자, 중요하지 않습니다 당신의 탭 문자의 다음 폭으로 구성하려면 종류의 . 실제로, 탭 문자 너비가 들여 쓰기 너비와 달라서 탭 문자가 적절한 들여 쓰기로 가장 할 가능성을 줄이려고합니다. ( list+ expandtab도 여기에 도움이 될 수 있습니다.) 또한 8 문자 너비 탭은 "표준"입니다. 터미널, Python 및 기타 여러 도구의 기본값은 8 문자 너비 탭입니다.
Laurence Gonsalves

744

현재 사용자에 대해 영구적으로이를 정의하려면 .vimrc파일을 작성 (또는 편집) 하십시오.

$ vim ~/.vimrc

그런 다음 아래 구성을 파일에 붙여 넣습니다. vim이 다시 시작되면 탭 설정이 적용됩니다.

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

~ / .vimrc가 없으면 / etc / vim / vimrc로 시도하십시오. 우분투 16.04의 경우 구성 파일이 있습니다. 그러나이 파일을 변경하면 구성이 전체적으로 사용됩니다.
Todor Todorov

4
한 가지 더, :retab기존 tab을 로 변환하는 데 사용하십시오 spaces. vim.wikia.com/wiki/Converting_tabs_to_spaces
DawnSong

57

또는 vim modeline의 약칭 :

vim :set ts=4 sw=4 sts=4 et :

28

공백 또는 탭 사용 여부를 정의하는 설정이 거의 없습니다.

다음은 ~/.vimrc파일 에서 정의 할 수있는 편리한 기능입니다 .

function! UseTabs()
  set tabstop=4     " Size of a hard tabstop (ts).
  set shiftwidth=4  " Size of an indentation (sw).
  set noexpandtab   " Always uses tabs instead of space characters (noet).
  set autoindent    " Copy indent from current line when starting a new line (ai).
endfunction

function! UseSpaces()
  set tabstop=2     " Size of a hard tabstop (ts).
  set shiftwidth=2  " Size of an indentation (sw).
  set expandtab     " Always uses spaces instead of tab characters (et).
  set softtabstop=0 " Number of spaces a <Tab> counts for. When 0, featuer is off (sts).
  set autoindent    " Copy indent from current line when starting a new line.
  set smarttab      " Inserts blanks on a <Tab> key (as per sw, ts and sts).
endfunction

용법:

:call UseTabs()
:call UseSpaces()

파일 확장자별로 사용하려면 다음 구문을 사용할 수 있습니다 (에 추가됨 .vimrc).

au! BufWrite,FileWritePre *.module,*.install call UseSpaces()

참조 : 탭을 공백으로 변환 .


다음은 탭과 공백전환 하는 데 사용할 수있는 Wikia의 다른 스 니펫입니다 .

" virtual tabstops using spaces
set shiftwidth=4
set softtabstop=4
set expandtab
" allow toggling between local and default mode
function TabToggle()
  if &expandtab
    set shiftwidth=8
    set softtabstop=0
    set noexpandtab
  else
    set shiftwidth=4
    set softtabstop=4
    set expandtab
  endif
endfunction
nmap <F9> mz:execute TabToggle()<CR>'z

모든 탭에 4 개의 공백을 사용 F9하고 설정을 전환 하기위한 매핑을 사용할 수 있습니다.


27

나는 이것을 내 .vimrc 파일에 복사하여 붙여 넣었다.

" size of a hard tabstop
set tabstop=4

" always uses spaces instead of tab characters
set expandtab

" size of an "indent"
set shiftwidth=4

처음 2 개의 설정은 Tab 키를 누르면 4 개의 공백이 있음을 의미합니다. 세 번째 설정은 내가 할 때 V>(즉, 시각적이고 들여 쓰기) 4 개의 공백을 얻는다는 것을 의미합니다.

허용되는 답변만큼 포괄적이지는 않지만 복사하여 붙여 넣기를 원하는 사람들에게 도움이 될 수 있습니다.


14

~ / .vimrc 파일 에 원하는 설정을 지정 하십시오-일부 지침 및 모범 사례는 아래를 참조하십시오.

Vim에서 탭을 사용하는 4 가지 주요 방법이 있습니다 :

  1. 항상 'tabstop'을 8로 유지하고 'softtabstop'및 'shiftwidth'를 4 (또는 3 또는 원하는 것)로 설정하고 'noexpandtab'을 사용하십시오. 그런 다음 Vim은 탭과 공백을 혼합하여 사용하지만 입력하면 4 자 또는 3 자마다 탭이 나타나는 것처럼 동작합니다.

    참고 : 'tabstop'을 8 이외의 다른 값으로 설정하면 파일이 여러 위치에서 잘못 표시 될 수 있습니다 (예 : 인쇄시).

  2. 'tabstop'및 'shiftwidth'를 원하는 것으로 설정하고 'expandtab'을 사용하십시오. 이런 식으로 항상 공백을 삽입합니다. 'tabstop'이 변경되면 서식이 엉망이되지 않습니다.

  3. 'tabstop'및 'shiftwidth'를 원하는대로 설정하고 | modeline | 파일을 다시 편집 할 때이 값을 설정하십시오. Vim을 사용하여 파일을 편집 할 때만 작동합니다.

  4. 'tabstop'과 'shiftwidth'는 항상 같은 값으로 설정하고 'noexpandtab'을 설정하십시오. 그런 다음 사람들이 사용하는 탭 중지 설정에 대해 작동해야합니다 (초기 들여 쓰기에만 해당). 이렇게하면 공백이 아닌 첫 번째 공백이 아닌 후에 탭이 있으면 좋을 것입니다. 그렇지 않으면 'tabstop'이 변경 될 때 정렬 된 주석이 잘못됩니다.

출처:


tabstop! = 8 설정이 나쁜 이유를 설명하는 +1!
오우거 시편 33

3
이것은 훌륭하지만 vimdoc.sourceforge.net/htmldoc/options.html#'tabstop '또는 :help tabstopvim에서 그대로 사용됩니다 .
belacqua




2

주석이있는 내 기본 ~ / .vimrc :

set number " show line number                                                                                           
set tabstop=2 " set display width of tab; 1 tab = x space with                                                           
set expandtab " transform tab to x space (x is tabstop)                                                               
set autoindent " auto indent; new line with number of space at the beginning same as previous                                                                      
set shiftwidth=2 " number of space append to lines when type >> 

0

모든 사용자에 대한 영구적 (서버에 혼자있는 경우) :

# echo "set tabstop=4" >> /etc/vim/vimrc

일반적으로 새 서버 apt-get purge nano mc와 다른 모든 서버에서 시간을 절약하십시오. 그렇지 않으면 편집기에서 재정의 git, crontab


1
EDITOR를 설정하면 대부분의 프로그램이이를 존중합니다.
D. Ben Knoble

@ D.BenKnoble 당신이 맞아요. 난 노력 했어. 지금은 시간과 신경을 아끼는 것을 선호합니다. 정확히 무엇이 실행되는지 확인할 수 F10nano없지만 항상 save로 몇 가지 트릭을 수행합니다 (어쩌면 F10해결책 일 수 있습니다). 아니면 작동하지 screen않습니까? 기억이 안나요. 그냥 싫어 해요)
Vasilii Suricov

어쨌든 그것은 과거에 ...
Vasilii Suricov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.