¿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.

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


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).


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.


6

Simplemente ejecute:

user@host:~ $ echo set autoindent >> .vimrc

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.


0

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

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


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


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
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.