¿Cómo configurar vim para editar archivos Makefile y de código normal?


22

Estoy usando Mac OSX 10.7.5, el contenido de .vimrc es el siguiente:

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

autocmd FileType make setlocal noexpandtab

Lo que intento hacer es cuando edito archivos normales como .js, .html Quiero que mis pestañas tengan sangría con 4 espacios en blanco en lugar de una pestaña normal.

Pero cuando estoy editando Makefile, necesito que sea una pestaña normal en lugar de 4 espacios en blanco para sangrías.

Pensé que la configuración anterior en .vimrc me va a dar eso, pero no funciona para mí, ya que cuando estoy editando Makefile todavía obtengo 4 espacios en blanco para la sangría.

¿No estás seguro de lo que estoy haciendo mal aquí?

Respuestas:


26

Esta es una sección de mi .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

La sección debe explicarse por sí misma, pero le sugiero que lea la ayuda de vim en filetypey autocmd.

La línea más relevante para usted es probablemente esta:

autocmd FileType make set noexpandtab shiftwidth=8 softtabstop=0

sin embargo, asegúrese de que la detección de tipo de archivo esté activada.


¡Gracias por los excelentes comandos automáticos! Noté en este tutorial mientras aprendía de usted .vimrcque si no ajusta sus correos autocmdelectrónicos en augroupsecciones, Vim los leerá y los duplicará. ¿Es esto correcto?
Joshua Detwiler

6

En lugar de hacer esto con autocmds, puede crear su propio complemento de tipo de archivo de usuario para cada tipo de archivo y colocarlo ~/.vim/ftplugin/<filetype>.vim, donde <filetype>está el tipo de archivo real que desea. Por ejemplo:

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

Debe asegurarse de que tiene complementos de tipo de archivo habilitados en su ~/.vimrccon el siguiente comando:

filetype plugin on

Esta respuesta tiene más sentido si desea mantener ordenados sus directorios .vimrc y .vim.
Floby

0

Es más sencillo configurar vim para expandir siempre las pestañas, que es lo que se desea para todos los archivos, excepto los archivos MAKE. En los archivos MAKE, puedes usar para insertar una pestaña donde quieras. No se ampliará.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.