2009-07-20 11 views
6

Usando vim, mi piacerebbe avere expandtabs in modo efficace se sono a sinistra di qualsiasi testo sulla riga e attivo se sono a destra di qualsiasi carattere non di spazi vuoti. (Vorrei usare le schede per i rientri e gli spazi per l'allineamento.)Si può fare per espandere solo le schede a sinistra del testo?

Questo può essere fatto?

+0

Credo fermamente che si possa fare. Non penso che sarà facile, comunque. –

risposta

5

Sì. Utilizza il plug-in Smart Tabs.

Questo script consente di utilizzare le normali impostazioni delle schede per l'inizio della riga e le schede espanse come spazi in qualsiasi altro punto. Questo distingue efficacemente "rientro" da "allineamento".

<tab> Utilizza le impostazioni della scheda dell'editor per inserire una scheda all'inizio della riga (prima del primo carattere non spaziale) e inserisce gli spazi in altro modo.

<BS> Utilizza impostazioni della scheda editor per eliminare le schede o schede 'ampliati' ala smarttab

Per rendere Vim in fila gli argomenti delle funzioni, aggiungere

set cindent 
set cinoptions=(0,u0,U0 

a .vimrc. Il plugin codificherà gli spazi come tale:

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

Questo rende l'allineamento di "x" e "y" indipendente dalla dimensione scheda (tabstop).

4

provare qualcosa di simile:

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

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

Questo sembra un approccio ragionevole. Con piccoli aggiustamenti, potresti persino seguire l'attuale impostazione 'softtabstop' invece di inserire ciecamente 4 spazi. – ephemient

Problemi correlati