2009-07-20 11 views
6

Usando vim, me gustaría tener efectivamente expandtabs desactivado si estoy a la izquierda de cualquier texto en la línea y si estoy a la derecha de cualquier carácter que no sea de espacio en blanco. (Me gustaría utilizar pestañas para sangría y espacios para alineación.)¿Se puede hacer que vim solo expanda pestañas a la izquierda del texto?

¿Se puede hacer esto?

+0

Creo firmemente que se puede hacer. Pero no creo que sea fácil. –

Respuesta

5

Sí. Use el complemento Smart Tabs.

Este script le permite utilizar su configuración normal de la ficha para el inicio de la línea, y tienen pestañas expandieron como espacios en cualquier otro lugar. Esto efectivamente distingue 'sangría' de 'alineación'.

<tab> Utiliza la configuración de la pestaña del editor para insertar una pestaña al principio de la línea (antes del primer carácter que no sea de espacio), e inserta espacios en caso contrario.

<BS> Usos configuración de la ficha editor para eliminar pestañas o tabs 'expandidos' ala SmartTab

Para hacer que Vim se alinean los argumentos de funciones, añadir

set cindent 
set cinoptions=(0,u0,U0 

a .vimrc. El plugin codificará el espacio en blanco como tal:

int f(int x, 
......int y) { 
--->return g(x, 
--->.........y); 
} 

Esto hace que la alineación de "x" y "y" independiente del tamaño pestaña (tabstop).

4

intentar algo como esto:

function! TabMaybeIndent() 
    if strpart(getline('.'), 0, col('.') - 1) =~ '^\s*$' 
     return "\<Tab>" 
    else 
     return " " 
    endif 
endfunction 

set noexpandtab 
imap <Tab> <C-r>=TabMaybeIndent()<CR> 
+0

Esto parece un enfoque razonable. Con ajustes menores, incluso podría seguir la configuración actual de 'softtabstop' en lugar de insertar ciegamente 4 espacios. – ephemient

Cuestiones relacionadas