Vim에서 들여쓰기에 공백을 사용할지 탭을 사용할지 자동으로 결정하는 방법은 무엇입니까?

Vim에서 들여쓰기에 공백을 사용할지 탭을 사용할지 자동으로 결정하는 방법은 무엇입니까?

때로는 탭을 사용하는 스타일이 인기 있는 다른 소스 코드를 편집하기도 합니다. 이 경우 리터럴 탭을 사용하는 기존 규칙을 유지하고 싶습니다.

대신 내가 직접 만든 파일과 기본 들여쓰기 스타일로 공백을 사용하는 파일에 이 방법을 사용하고 싶습니다.

vim에서 어떻게 할 수 있나요?

답변1

~/.vimrc공백/탭의 적절한 사용을 조정하기 위해 파일에서 다음과 같은 것을 사용할 수 있습니다 .

" By default, use spaced tabs.
set expandtab

" Display tabs as 4 spaces wide. When expandtab is set, use 4 spaces.
set shiftwidth=4
set tabstop=4

function TabsOrSpaces()
    " Determines whether to use spaces or tabs on the current buffer.
    if getfsize(bufname("%")) > 256000
        " File is very large, just use the default.
        return
    endif

    let numTabs=len(filter(getbufline(bufname("%"), 1, 250), 'v:val =~ "^\\t"'))
    let numSpaces=len(filter(getbufline(bufname("%"), 1, 250), 'v:val =~ "^ "'))

    if numTabs > numSpaces
        setlocal noexpandtab
    endif
endfunction

" Call the function after opening a buffer
autocmd BufReadPost * call TabsOrSpaces()

답변2

예를 들어 다양한 플러그인이 있습니다(내 플러그인부터 시작):

  • 내 들여쓰기 일관성 경찰버퍼의 들여쓰기를 확인하고 들여쓰기 폭과 사용된 방법을 분석한다. 충돌이 있거나 탭과 공백의 잘못된 조합이 발견되면 경고를 표시하고 친절한 경찰관처럼 위반자를 찾는 데 도움을 줍니다. >
  • 들여쓰기 찾기로드된 버퍼를 검색하고 적절한 들여쓰기 설정을 구성하는 Python 스크립트 및 Vim 플러그인입니다.
  • yaifa.vim위의 vimscript 포트입니다.
  • 들여쓰기 감지.vim작성자: Ciaran McCreesh 들여쓰기 설정을 자동으로 감지하려고 시도 중
  • 들여쓰기 추측detectorindent.vim 기반
  • 들여쓰기 감지.vim 작성자: Eric Van Dewoestine 간단한 탐지를 수행하고 파일 사양에 따라 기본값을 설정할 수 있습니다.
  • indent.vim과 일치탭, 2 및 4 공백 들여쓰기를 감지하고 그에 따라 들여쓰기 설정을 조정합니다.
  • 빔 형사작성자: Tim Pope 자동으로 "shiftwidth" 및 "tabstop"을 경험적으로 조정하거나(오류나 일관되지 않은 들여쓰기를 확인하지 않고 간단한 샘플링을 통해) 또는 동일한 유형의 다른 파일을 확인하여 조정합니다.
  • 파일 스타일'expandtab'을 설정하면 탭, 후행 공백 및 'textwidth'보다 긴 줄이 강조 표시되지만 실제로 들여쓰기 일관성을 확인하지는 않습니다.
  • 전시공간각 버퍼/파일 형식의 들여쓰기 내 공백을 강조 표시합니다.
  • 압입 감지기파일을 열거나 쓸 때 실행할 때 탭/공백 혼합 들여쓰기에 대한 경고가 표시되며 이에 따라 Vim의 옵션이 자동으로 조정될 수 있습니다.

답변3

이전에 출시된 플러그인 중 하나는 일반적인 사용에 적합해야 합니다.

그러나 공유 프로젝트를 개발하는 경우 사람들은 다음을 사용할 수 있습니다.다른편집한 다음 사용하는 것이 좋습니다..editorconfig모든 편집자 간에 구성을 공유하는 파일입니다. 예를 들어:

[*]
indent_style = space
indent_size = 4
end_of_line = lf
insert_final_newline = true

이것은 꽤 잘 알려진 표준입니다. 일부 편집자는 기본적으로 이를 존중하지만 다른 편집자는 플러그인이 필요합니다. 이것은 Vim용 플러그인입니다:

https://github.com/editorconfig/editorconfig-vim

이 플러그인을 설치한 후에는 다른 사람의 프로젝트에 참여할 수 있었고 내 편집자는 새 파일에서도 즉시 형식 지정 규칙을 존중한다는 사실을 알게 되었습니다.

파일 을 생성하면 .editorconfig다른 사람이 내 프로젝트를 더 쉽게 열 수 있습니다.

관련 정보