2010-12-18 11 views
33

¿Cómo puedo obtener vim para colocar el cursor entre las llaves a partir de una nueva línea, es decir, con | que denota la posición del cursor:Vim Auto Sangría con nueva línea

class { 
    | 
} 

en este momento con mi configuración sólo hace esto

class { 
|} 

Tengo esto en mi archivo .vimrc conjunto autoindent shiftwidth = 2 = 2 tabstop noexpandtab

Básicamente solo quiero cómo un IDE normal lo sangraría.

actualización:

encontré cómo hacer esto con inoremap { {<CR>}<Esc>O

Respuesta

9

poner esto en su .vimrc:

imap <C-Return> <CR><CR><C-o>k<Tab> 

Suponiendo autoindent y smartindent se han definido correctamente, escribir Ctrl + Return entre llaves se coloque el cursor donde desea que sea.

+0

¡Gracias! que funciona: P – Zen

+0

de todos modos hay que mapearlo solo para ingresar tho? Estoy acostumbrado a presionar solo ingresar la tecla mientras uso eclipse todo este tiempo. – Zen

+0

o hay de todos modos para integrar esto dentro de un archivo de sangría para un idioma en particular? – Zen

10

autoindent se refiere a ella en libros sobre el actual nivel de sangría en las líneas siguientes. Para obtener una sangría de acuerdo con la sintaxis, debe especificar un indicador como smartindent o cindent también.

+0

la sangría no es un problema, solo quiero una línea nueva insertada automáticamente cuando presiono enter con la sangría correcta – Zen

+0

Estoy confundido. ¿Estás fuera del modo de inserción?Si presiona 'i' luego' Volver', ¿obtiene el comportamiento que desea? –

+0

Sí, estoy en modo insertar, lo que quiero es cuando presiono enter después de {quiero que vim me ponga en una nueva línea dentro del cierre}, básicamente el primer bloque en mi pregunta. – Zen

21

Encontré que delimitMate hace exactamente lo que describes y más (es decir, insertando automáticamente la terminación }). Tenga en cuenta que debe indicar a delimitMate que expanda el retorno de carro agregando let delimitMate_expand_cr=1 a su configuración.

Según mi observación, este es exactamente el comportamiento que se encuentra en TextMate y SublimeText.

+0

FYI para usuarios de delimitMate + neocomplcache: si usa la configuración predeterminada de neocomplcache .vimrc, tendrá que ajustar la asignación para acomodar ambos complementos. Más información [aquí] (https://github.com/Raimondi/delimitMate/issues/111). Mi .vimrc ahora tiene 'imap pumvisible()? neocomplcache # smart_close_popup(): ' delimitMateCR'' y ambos complementos funcionan como yo los quiero – bknoles

+4

Para 'delimitMate'' expand_cr_1' no ha estado funcionando recientemente. En su lugar, puede usar 'imap pumvisible()? "\ ": " delimitMateCR" '. –

17

Tengo Ubuntu 12.04 y no encontré el archivo vimrc en el directorio personal. El archivo global vimrc estaba en /etc/vim/vimrc.
No había casi nada en este archivo. Así que para mí funcionó para agregar esto 3 líneas al final de /etc/vim/vimrc

set autoindent 
set cindent 
inoremap { {<CR>}<up><end><CR> 

Cuando se va a escribir { próxima vez que será cambiado por la combinación {, Enter, }, arriba, extremo, Intro. cindent y autoindent agregarán la cantidad requerida de Tab.
P.S. No soy bueno para sintonizar vim, por lo que algunas explicaciones pueden no ser tan precisas. Es como creo que funciona.

+0

Agregué un "" al final de la última línea para que sangrara la línea media un paso. Es decir. inoremap {{} Skurpi

0

Al final del archivo, estoy usando:

# vim: ts=2 sw=2 sts=2 sr noet st ai si 

Por ejemplo Dockerfile:

FROM centos-7 
RUN ... 
CMD ... 

# vim: ts=2 sw=2 sts=2 sr noet st ai si 

Si desea mantener sólo la sangría, utilice # vim: st ai si

Cuestiones relacionadas