Frage

ich benutze https://github.com/cakebaker/scss-syntax.vim Für die Syntax -Hervorhebung SCSS (oder Sass) Dateien auf VIM, die sehr gut für die Syntax -Hervorhebung geeignet sind. Das Plugin verfügt jedoch nicht über eine Einrückungsdatei und habe Probleme, eine zu schreiben.

Ich möchte den Einzug so einstellen, dass er so aussieht:

enter image description here

Wenn ich jedoch tue gg=G, Ich bekomme:

enter image description here

Ich vermute, dass es keinen verschachtelten Einsatz basierend auf Zahnspangen versteht. Ich habe all die verschiedenen Kombinationen von ausprobiert

set cindent

set nocindent

set autoindent

set smartindent

und versuchte, den Code von zu verwenden Tab-Taste == 4 Leerzeichen und automatisch nach lockigen Zahnspangen in VIM , einschließlich

set tabstop=2

set shiftwidth=2

set expandtab

... aber verschachtelte Zahnspangenantrieb scheint nie zu funktionieren.

Ich glaube, ich möchte vielleicht eine benutzerdefinierte Einstelldatei schreiben, und alles, was ich brauche, ist eine Einklebung, die auf Zahnspangen mit verschachtelten Ebenen basiert. Wie soll ich das machen? Wenn jemand eine Einklebungsdatei für Filetypen mit ähnlicher Syntax hat, ist dies auch großartig.

War es hilfreich?

Lösung

Dies ist ein kurzer Hack, der auf dem integrierten Perl-Eindringungscode (in "basiert indent/perl.vim). Hoffentlich können Sie es verwenden, um das zu bekommen, was Sie tun möchten. Weitere Informationen finden Sie in den detaillierteren Kommentaren im Perl -Einrückungscode oder in einem anderen der Dateien im Einstellungsverzeichnis.

setlocal indentexpr=GetMyIndent()
function! GetMyIndent()
    let cline = getline(v:lnum)

    " Find a non-blank line above the current line.
    let lnum = prevnonblank(v:lnum - 1)
    " Hit the start of the file, use zero indent.
    if lnum == 0
        return 0
    endif
    let line = getline(lnum)
    let ind = indent(lnum)

    " Indent blocks enclosed by {}, (), or []
    " Find a real opening brace
    let bracepos = match(line, '[(){}\[\]]', matchend(line, '^\s*[)}\]]'))
    while bracepos != -1
        let brace = strpart(line, bracepos, 1)
        if brace == '(' || brace == '{' || brace == '['
            let ind = ind + &sw
        else
            let ind = ind - &sw
        endif
        let bracepos = match(line, '[(){}\[\]]', bracepos + 1)
    endwhile
    let bracepos = matchend(cline, '^\s*[)}\]]')
    if bracepos != -1
        let ind = ind - &sw
    endif

    return ind
endfunction

Speichern Sie diese Datei als ~/.vim/indent/something.vim wo something ist Ihr Dateityp (ersetzen ~/.vim mit dem Weg zu dem Weg zu vimfiles Wenn Sie unter Windows sind.

Möglicherweise möchten Sie dies auch zu Beginn der Datei festhalten (aber nur, wenn es keine andere Einrückungsdeklaration gibt, die zuerst geladen werden könnte):

" Only load this indent file when no other was loaded.
if exists("b:did_indent")
    finish
endif
let b:did_indent = 1
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top