Como configurar o vim para editar o Makefile e os arquivos de código normais?

14

Estou usando o Mac OSX 10.7.5, o conteúdo do .vimrc é o seguinte:

set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
set shiftround  
set smarttab    
set autoindent  
set copyindent  

autocmd FileType make setlocal noexpandtab

O que eu estou tentando fazer é quando eu edito arquivos normais como .js, .html Eu quero que minhas abas sejam recuadas com 4 espaços em branco ao invés de uma aba normal.

Mas quando estou editando o Makefile, eu preciso que ele seja uma guia normal em vez de quatro espaços em branco para indentações.

Eu pensei que a configuração acima em .vimrc vai me dar isso, mas não está funcionando para mim como quando estou editando Makefile ainda estou recebendo 4 espaços em branco para recuo.

Não sabe o que estou fazendo de errado aqui?

    
por forestclown 16.08.2013 / 11:14

3 respostas

19

Esta é uma seção do meu .vimrc :

" enable filetype detection:
filetype on
filetype plugin on
filetype indent on " file type based indentation

" recognize anything in my .Postponed directory as a news article, and anything
" at all with a .txt extension as being human-language text [this clobbers the
" 'help' filetype, but that doesn't seem to prevent help from working
" properly]:
augroup filetype
  autocmd BufNewFile,BufRead */.Postponed/* set filetype=mail
  autocmd BufNewFile,BufRead *.txt set filetype=human
augroup END

autocmd FileType mail set formatoptions+=t textwidth=72 " enable wrapping in mail
autocmd FileType human set formatoptions-=t textwidth=0 " disable wrapping in txt

" for C-like  programming where comments have explicit end
" characters, if starting a new line in the middle of a comment automatically
" insert the comment leader characters:
autocmd FileType c,cpp,java set formatoptions+=ro
autocmd FileType c set omnifunc=ccomplete#Complete

" fixed indentation should be OK for XML and CSS. People have fast internet
" anyway. Indentation set to 2.
autocmd FileType html,xhtml,css,xml,xslt set shiftwidth=2 softtabstop=2

" two space indentation for some files
autocmd FileType vim,lua,nginx set shiftwidth=2 softtabstop=2

" for CSS, also have things in braces indented:
autocmd FileType css set omnifunc=csscomplete#CompleteCSS

" add completion for xHTML
autocmd FileType xhtml,html set omnifunc=htmlcomplete#CompleteTags

" add completion for XML
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags

" in makefiles, don't expand tabs to spaces, since actual tab characters are
" needed, and have indentation at 8 chars to be sure that all indents are tabs
" (despite the mappings later):
autocmd FileType make set noexpandtab shiftwidth=8 softtabstop=0

" ensure normal tabs in assembly files
" and set to NASM syntax highlighting
autocmd FileType asm set noexpandtab shiftwidth=8 softtabstop=0 syntax=nasm

A seção deve ser autoexplicativa, mas sugiro que você leia a ajuda do vim em filetype e autocmd .

A linha mais relevante para você é provavelmente esta:

autocmd FileType make set noexpandtab shiftwidth=8 softtabstop=0

certifique-se de que a detecção do tipo de arquivo está ativada.

    
por 16.08.2013 / 11:27
4

Em vez de fazer isso com autocmds, você pode criar seu próprio plug-in de tipo de arquivo de usuário para cada tipo de arquivo e colocá-lo em ~/.vim/ftplugin/<filetype>.vim , em que <filetype> é o tipo de arquivo real desejado. Por exemplo:

mkdir -p ~/.vim/ftplugin
echo "setlocal noexpandtab" > ~/.vim/ftplugin/make.vim

Você precisa verificar se tem plug-ins de tipo de arquivo ativados em ~/.vimrc com o seguinte comando:

filetype plugin on
    
por 16.08.2013 / 19:55
0

É mais simples configurar o vim para sempre expandir as abas, o que é o desejado para todos os arquivos, exceto os makefiles. Nos makefiles, você pode usar para inserir uma guia onde quiser. Não será expandido.

    
por 15.01.2018 / 06:41