¿Espacios con sangría automática con C en vim?

85

Me he echado a perder un poco al usar Eclipse y Java. Comencé a usar vim para hacer codificación C en un entorno de Linux, ¿hay alguna manera de que vim haga automáticamente el espaciado adecuado para los bloques?

Entonces, después de escribir a {, la siguiente línea tendrá 2 espacios con sangría, y un retorno en esa línea la mantendrá en la misma sangría, y a} retrocederá 2 espacios.

zxcv
fuente

Respuestas:

134

Estos dos comandos deberían hacerlo:

:set autoindent
:set cindent

Para obtener puntos de bonificación, colóquelos en un archivo llamado .vimrc ubicado en su directorio de inicio en Linux

davr
fuente
12
También recomendaría ponerlos en ~ .vim / ftplugin / c.vim para que no use cindent todo el tiempo, sino solo para archivos C / C ++.
graywh
@graywh: ¿Qué pasa con pl, php, cpp, as, java y todos los demás archivos que quiero que tengan la misma sangría? ¿Necesito crear un archivo de configuración independiente para cada uno?
2010
17
Confío en los scripts de sangría incluidos en Vim (: filetype indent on), que es mucho mejor que simplemente usar 'cindent' siempre.
graywh
3
por qué la sangría del tipo de archivo es mejor que usar cindent se explica bien aquí: vim.wikia.com/wiki/…
Jayen
1
Para sangría automática, es posible que desee utilizar la abreviatura: set ai
Iam Zesh
56

Yo escribí todo acerca de pestañas en vim , lo que da un par de cosas interesantes que usted no preguntó. Para sangrar automáticamente las llaves, use:

:set cindent

Para sangrar dos espacios (en lugar de una pestaña de ocho espacios, el valor predeterminado de vim):

:set shiftwidth=2

Para evitar que vim convierta ocho espacios en pestañas:

:set expandtab

Si alguna vez desea cambiar la sangría de un bloque de texto, use <y>. Normalmente utilizo esto junto con el modo de selección de bloque (v, seleccione un bloque de texto, <o>).

(Trataría de convencerlo de que no use sangría de dos espacios, ya que a mí (y a la mayoría de las personas) nos resulta difícil leer, pero esa es otra discusión).

Comodoro Jaeger
fuente
Muy buen blog. Todavía soy bastante nuevo en vim, aunque es bueno saber que hay buenos recursos.
zxcv
3
También se perdió el cambio de softtabstop además del ancho de turno.
graywh
8

Muchas de las funciones de vim (como autoindenty cindent) están desactivadas de forma predeterminada. Para ver realmente lo que vim puede hacer por usted, necesita un archivo ~/.vimrc.

Ha llegado un buen comienzo $VIMRUNTIME/vimrc_example.vim. Si quieres probarlo, usa

:source $VIMRUNTIME/vimrc_example.vim

cuando en vim.

De hecho, sugeriría que simplemente copie los contenidos a usted, ~/.vimrcya que está bien comentado, y es un buen lugar para comenzar a aprender a usar vim. Puedes hacer esto por

:e $VIMRUNTIME/vimrc_example.vim
:w! ~/.vimrc

Esto sobrescribirá su actual ~/.vimrc, pero si todo lo que tiene es la configuración de sangría que sugirió Davr, no me preocuparía, ya que el ejemplo vimrc se encargará de eso por usted también. Para obtener un recorrido completo del ejemplo y lo que hace por usted, consulte :help vimrc-intro.

rampion
fuente
6

Simplemente ejecute:

user@host:~ $ echo set autoindent >> .vimrc
JamesM-SiteGen
fuente
1
Yo no fui el que votó en contra, pero probablemente fue porque simplemente "establecer sangría automática" no se sangra automáticamente al escribir "{" y "}", y tampoco establece automáticamente el espaciado en 2 espacios. Esto es lo que pidieron.
Victor Zamanian
3

Creo que la mejor respuesta se explica en la wikia vim:

http://vim.wikia.com/wiki/Indenting_source_code

Tenga en cuenta que desaconseja el uso de "set autoindent". La mejor característica de todas que encuentro en esta explicación es poder establecer configuraciones por archivo, lo cual es especialmente útil si programa en Python y C ++, por ejemplo, ya que querría 4 espacios para pestañas en el primero y 2 para espacios en este último.

usuario809472
fuente
0

y recuerda siempre esta venerable explicación de Spaces + Tabs:

http://www.jwz.org/doc/tabs-vs-spaces.html

mike511
fuente
2
¿Qué pasa con el argumento de ese tipo? No entiendo cómo no usar el carácter TAB y llenar con espacios codificados en forma rígida resuelve los problemas de todos. Eso haría imposible, por ejemplo, poder abrir un archivo y que el ancho de sus sangrías aparezca según sus propias preferencias.
thomasrutter
1
La solución de este chico es mucho mejor :) blogs.msdn.com/cyrusn/archive/2004/09/14/229474.aspx
thomasrutter
-1

Tratar:

establecer sw = 2

establecer ts = 2

establecer smartindent

Craig B.
fuente
Según la ayuda, cindent es mejor que smartindent, pero solo funciona para código similar a C.
thomasrutter
smartindent está en desuso (también era solo para código similar a C). Las secuencias de comandos de sangría de tipo de archivo son mucho mejores.
graywh
@graywh además de la wiki, ¿qué fuente autorizada indica el estado obsoleto de smartindent?
memeplex