Domanda

https://github.com/cakebaker/scss-syntax.vim per evidenziare la sintassi SCSS (o SASS ) file sul vim, che funziona molto bene per l'evidenziazione della sintassi. Tuttavia, il plugin non viene fornito con un file di rientro e sto avendo problemi a scrivere uno.

vorrei impostare il rientro a guardare in questo modo:

entrare descrizione dell'immagine qui

Tuttavia, se lo faccio gg=G, ottengo:

entrare descrizione dell'immagine qui

Ho il sospetto che non capisce trattino nidificato sulla base di parentesi graffe. Ho provato tutte le diverse combinazioni di

set cindent

set nocindent

set autoindent

set smartindent

e ha cercato di utilizzare il codice tasto Tab == 4 spazi e auto-trattino dopo la parentesi graffe in Vim , tra cui

set tabstop=2

set shiftwidth=2

set expandtab

... ma le parentesi annidate come rientro non sembra mai di lavoro.

Credo che potrei voler scrivere un file di rientro personalizzato, e tutti hanno bisogno I è indentazione basa sulla bretelle con livelli nidificati. Come devo fare per questo? Se qualcuno ha un file di rientro per i tipi di file con sintassi simile, che sarà grande come bene.

È stato utile?

Soluzione

Questo è un trucco veloce, basato sul built-in codice indentazione perl (in indent/perl.vim). Speriamo che si può utilizzare per ottenere ciò che si vuole fare. Vedi le osservazioni più dettagliate sia nel codice Perl indentazione o nell'altro uno dei file nella directory trattino per maggiori dettagli.

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

Salva il file come ~/.vim/indent/something.vim dove something è il tipo di file (sostituire ~/.vim con il percorso vimfiles se siete su Windows.

Si potrebbe anche voler attaccare questo all'inizio del file (ma solo se non c'è qualche altra dichiarazione trattino che potrebbe essere caricato per la prima):

" Only load this indent file when no other was loaded.
if exists("b:did_indent")
    finish
endif
let b:did_indent = 1
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top