2009-07-20 11 views
6

Używając vima, chciałbym skutecznie wyłączyć expandtabs, jeśli znajduję się po lewej stronie dowolnego tekstu na linii i jeśli jestem po prawej stronie od dowolnej nie białej spacji. (Chciałbym użyć zakładek na wcięcia i spacji do wyrównania).Czy vim może zostać rozszerzony tylko na zakładki po lewej stronie tekstu?

Czy to można zrobić?

+0

Jestem przekonany, że można to zrobić. Po prostu nie sądzę, że będzie to łatwe. –

Odpowiedz

5

Tak. Użyj wtyczki Smart Tabs.

Ten skrypt pozwala na użycie normalnych ustawień zakładki na początku linii, a zakładki są rozszerzone jako spacje w innym miejscu. To skutecznie rozróżnia "wcięcie" od "wyrównania".

<tab> Używa ustawień zakładki edytora, aby wstawić zakładkę na początku wiersza (przed pierwszym znakiem spacji) i wstawia spacje w przeciwnym razie.

<BS> Używa ustawień zakładki edytora, aby usunąć zakładki lub zakładki 'rozszerzonych' ala smarttab

Aby Vim kolejce argumentów funkcji, dodać

set cindent 
set cinoptions=(0,u0,U0 

do .vimrc. Wtyczka będzie zakodować spacje jako takie:

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

To sprawia, że ​​ustawienie „x” i „y” niezależnie od wielkości zakładki (tabstop).

4

spróbować czegoś takiego:

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

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

To wygląda na rozsądne podejście. Po drobnych korektach można nawet śledzić bieżące ustawienie 'miękkiego przesunięcia' zamiast ślepo wstawiać 4 spacje. – ephemient