tabwidth와 함께 "filetype plugin indent on"뭉치


9

어제 Vundle을 설치했으며 그 이후로 vimrc에서 구성한 tabwidth가 무시되고 2 대신 4로 다시 설정되었습니다.

Vundle 단락 이후에 다음 행이 원인임을 알았습니다.

filetype plugin indent on

내 들여 쓰기는 다음과 같이 설정됩니다.

set noexpandtab " Make sure that every file uses real tabs, not spaces
set shiftround  " Round indent to multiple of 'shiftwidth'
set smartindent " Do smart indenting when starting a new line
set autoindent  " Copy indent from current line, over to the new line

" Set the tab width
let s:tabwidth=2
exec 'set tabstop='    .s:tabwidth
exec 'set shiftwidth=' .s:tabwidth
exec 'set softtabstop='.s:tabwidth

내 전체 vimrc를 여기서 확인할 수 있습니다 .

파이썬 스크립트를 사용하여 들여 쓰기 문제를 테스트했습니다 (들여 쓰기가 정말로 중요한 곳).

나는 이미 변경 filetype plugin indent on을 시도했지만 filetype plugin on아무것도 변경되지 않습니다. 그 줄을 주석 처리하는 것만 도움이됩니다.
이제 Vundle 설치 안내서에 따르면이 줄이 필요합니다.

이 들여 쓰기 문제를 어떻게 해결합니까? 파일 형식 줄을 생략해도됩니까 아니면 vimrc에 보관해야합니까?

해결책:

@ChristianBrabandt와 @romainl 덕분에 이제 단일 vimrc 파일에 상주 할 수있는 솔루션을 찾았습니다.

filetype plugin indent on

[...]

set noexpandtab " Make sure that every file uses real tabs, not spaces
set shiftround  " Round indent to multiple of 'shiftwidth'
set autoindent  " Copy indent from current line, over to the new line

" Set the tab width
let s:tabwidth=2
au Filetype * let &l:tabstop = s:tabwidth
au Filetype * let &l:shiftwidth = s:tabwidth
au Filetype * let &l:softtabstop = s:tabwidth

그것은 당신에게 질문에 대답하지 않더라도, 나는 Vundle 대신 vim-plug로 시도했고 완벽하게 작동했습니다 ...
nobe4


새로운 OptionSet 자동 명령을 사용하여 이동

답변:


10

먼저 첫 번째 것들; 아래 줄은 Vundle 또는 플러그인 관리와 전혀 관련이 없습니다 .

filetype plugin indent on

이 명령은 다음 세 가지를 수행합니다.

  • 파일 유형 감지
  • 파일 유형별 스크립트 (ftplugin)를 활성화합니다.
  • 파일 유형별 들여 쓰기 스크립트를 활성화합니다.

일부 플러그인 관리자는 마법을 수행하기 전에 파일 유형 감지가 비활성화되어 있는지 확인해야하고 프로그래밍에 Vim을 사용하면 ftplugins 및 적절한 들여 쓰기가 없으면 훨씬 더 어려워집니다. 내부적으로 파일 형식 탐지를 처리해야하지만 내 생각에는…

어쨌든, 문제는 들여 쓰기 설정을 무시하는 과다 삽입 식 ftplugin으로 인해 발생합니다. python ftplugin은 PEP8을 시행하기로 결정하지 않았기 때문에 가장 일반적인 범인입니다.

쉬운 방법은 ftplugin을 모두 소싱하지 않는 것입니다.

filetype indent on

그러나 일반적으로 유용한 방법이 제공되므로 방법이 실제로 권장되지 않습니다.

가장 깨끗한 해결책은 filetype라인을 "최적의"상태 로 두는 것입니다 .

filetype plugin indent on

자신의 재정의를 재정의하십시오 after/ftplugin/python.vim.

setlocal noexpandtab
setlocal shiftround
setlocal autoindent

let s:tabwidth=2
let &l:tabstop = s:tabwidth
let &l:shiftwidth = s:tabwidth
let &l:softtabstop = s:tabwidth

노트:

  • smartindent어쨌든 파일 유형별 들여 쓰기 스크립트로 시작하여 더 이상 사용되지 않는 것이 현명하지 않기 때문에 제거 했습니다.
  • 나는 당신의 교체 :execute클리너와 명령 :let불필요한 연결을 방지하기 위해 명령을.

1
shiftwidth0으로 설정 하고 softtabstop-1로 설정하면 탭 정지 설정을 따릅니다.
Christian Brabandt

설명해 주셔서 감사합니다. vimrc에서 여러 설정을 동기화하려고하므로 대부분의 설정을 유지하고 싶습니다. 내 vimrc에서 솔루션을 사용하고 @ChristianBrabandt faq 링크를 사용하여 내 질문 아래에 게시했는데 작동합니다. 솔루션을 포함하도록 질문을 편집하겠습니다.
wullxz

4

들여 쓰기 문제는 ftplugin에서 발생합니다. ftplugin은 파일에있는 /usr/share/vim/vim-version-/ftplugin/-filetype-.vim모든 것을 재정의 하는 .vim 파일을로드 .vimrc합니다. vim 내부에서 다음 명령을 실행하여 파일 위치를 찾을 수 있습니다 :verbose set tabstop?. 출력은 구성을 재정의하는 파일을 가리 킵니다.

필자의 경우 파이썬 들여 쓰기 구성에 문제가있었습니다.

이를 해결하는 쉬운 방법은 다음을 수행하는 것입니다.

홈 폴더에 .vim 폴더를 만듭니다 (없는 경우).

cd ~/.vim
mkdir -p after/ftplugin/
cd ~/.vim/after/ftplugin/
vim python.vim

다음을 추가하십시오.

setlocal noexpandtab shiftwidth=4 softtabstop=4 tabstop=4

명령에서 원하는 것을 수정하십시오. 공백 대신 탭으로 작업하기 때문에 광산처럼 보입니다.

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