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

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