2011-08-05 19 views
7

Resulta que trabajo en código en el que algunos módulos usan pestañas para la sangría mientras que otros usan espacios. Muchos editores de texto como Np ++ tienen algún tipo de función de tabulación adaptativa, que utiliza espacios para la sangría si la línea anterior (o bloque de código) utiliza espacios, o pestañas, según sea el caso.Tabulación adaptable en vim

No he visto nada en vim como este. ¿Hay algún tipo de complemento o configuración para esto?

Respuesta

4

I perfer para configurar mi entorno arriba como el ejemplo siguiente se muestra. Hago una regla general de reemplazar pestañas con espacios y uso augroup cuando necesito anular esa regla. Los Makefiles son un buen ejemplo de cuándo puede necesitar TABS y un archivo cpp es cuando puede necesitar espacios.

" A tab produces a 4-space indentation 
:set softtabstop=4 
:set shiftwidth=4 
:set expandtab 
" replace tabs with spaces unless noted otherwise 

" <snip> 

augroup CPPprog 
    au! 
    "----------------------------------- 
    " GENERAL SETTINGS 
    "----------------------------------- 
    au BufRead,BufNewFile,BufEnter    *.cpp,*.c,*.h,*.hpp set nolisp 
    au BufRead,BufNewFile,BufEnter    *.cpp,*.c,*.h,*.hpp set filetype=cpp 
    au FileType        *      set nocindent smartindent 
    au FileType        *.c,*.cpp    set cindent 
    au BufRead,BufNewFile,BufEnter    *.cpp     let g:qt_syntax=1 
    " turn on qt syntax highlighting (a plugin) 
    au BufNewFile,BufRead,BufEnter    *.c,*.h,*.cpp,*.hpp let c_space_errors=1 
    " trailing white space and spaces before a <Tab> 

    " <snip> 

augroup END 

" <snip> 

augroup filetype 
    au! BufRead,BufNewFile,BufEnter *Makefile*,*makefile*,*.mk set filetype=make 
augroup END 
" In Makefiles, don't expand tabs to spaces, since we need the actual tabs 
autocmd FileType make set noexpandtab 
0

Como @zkhr dijo que puede usar smartindent o autoindent. También puede usar cindent, que es la sangría predeterminada utilizada por vim al editar archivos C/C++.

'smartindent' inserta automáticamente un nivel adicional de sangría en algunos casos, y funciona para archivos tipo C.

'cindent' es más personalizable, pero también más estricto en lo que respecta a la sintaxis.

'smartindent' y 'cindent' pueden interferir con la indentación basada en el tipo de archivo, y nunca deben usarse junto con ella.

Si está editando un archivo en particular y desea evitar la sangría automática dentro de ese archivo, introduzca:

:setlocal noautoindent 
:setlocal nocindent 
:setlocal nosmartindent 
:setlocal indentexpr= 
0

No creo que haya nada en Vim que sea exactamente lo que usted quiere. Pero es posible que desee comprobar copyindent. Ver :h copyindent. Proporciona "tabulación adaptativa" pero no es exactamente lo que quería. Las pestañas/espacios iniciales de una nueva línea copiarán la de la línea anterior. Sin embargo, si aumenta la sangría, la decisión sobre si se agregan pestañas o espacios dependerá de la configuración expandtab. (También es posible que desee echar un vistazo a la ayuda para preserveindent opción, que también se debe establecer en su escenario, creo.)

También tendrá que tener la configuración de salto automático, ya sea a través autoindent o smartindent. No estoy seguro, es posible que deba restablecer smartindent o autoindent después de configurar copyindent para que funcione correctamente (por ejemplo, haga :set nosmartindent luego :set smartindent nuevamente).

Cuestiones relacionadas