2009-07-20 8 views
6

Mit vim möchte ich effektiv expandtabs off haben, wenn ich links von einem Text auf der Linie bin und auf, wenn ich rechts von einem Nicht-Whitespace-Zeichen bin. (Ich möchte Tabs für den Einzug und Leerzeichen für die Ausrichtung verwenden.)Kann es vim gemacht werden, nur die Tabs links vom Text zu erweitern?

Kann dies getan werden?

+0

Ich glaube fest, dass es getan werden kann. Ich denke nur nicht, dass es leicht wird. –

Antwort

5

Ja. Verwenden Sie das Smart Tabs Plugin.

Mit diesem Skript können Sie Ihre normalen Registerkarteneinstellungen für den Anfang der Zeile verwenden und die Registerkarten als Leerzeichen an anderer Stelle erweitern. Dies unterscheidet effektiv zwischen "Einzug" und "Ausrichtung".

<tab> Verwendet die Einstellungen der Editor-Registerkarte, um eine Registerkarte am Anfang der Zeile (vor dem ersten Leerzeichen) einzufügen, und fügt andernfalls Leerzeichen ein.

<BS> Verwendet Editor Registerkarte Einstellungen Registerkarten zu löschen oder 'erweiterten' Tabs ala smarttab

Um Vim Argumente in einer Reihe aufstellen Funktion, fügen

set cindent 
set cinoptions=(0,u0,U0 

zu .vimrc. Das Plugin wird das Leerzeichen als solche kodieren:

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

Dies macht die Ausrichtung von „x“ und „y“ unabhängig von der Registerkarte Größe (tabstop).

4

versuchen, etwas wie folgt aus:

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

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

Das sieht nach einem vernünftigen Ansatz aus. Mit kleinen Anpassungen können Sie sogar die aktuelle "Softtabstop" -Einstellung befolgen, anstatt blind 4 Felder einzufügen. – ephemient