2010-08-31 13 views
13

मैंने स्कैला 2.8 डाउनलोड किया, विम स्क्रिप्ट को शामिल किया और कुछ स्काला कोड टाइप करने का प्रयास किया। जब मैंने val x = 1 + 2 में टाइप किया और ENTER दबाया, तो इंडेंटेशन v के नीचे जाता है। जब मैं val x = (1 + 2) टाइप करता हूं, तो इंडेंटेशन x से नीचे है!वीआईएम और स्कैला - इंडेंटेशन समस्याएं?

यदि वीआईएम का उपयोग किसी भी द्वारा स्कैला के लिए किया जाता है, तो यह बग बहुत पहले देखा जाना चाहिए था। या मैं इसे देखकर अकेला हूं?

उत्तर

8

वर्तमान 2.8.0.final रिलीज से indent/scala.vim के साथ मेरे पास एक ही परिणाम है ... लेकिन मुझे पता है कि यह पहले रिलीज़ में काम करता था, क्योंकि मेरे पास एक फ़ाइल है जहां यह काम करती है। संदेश यह है:

" Vim indent file 
" Language : Scala (http://scala-lang.org/) 
" Maintainer : Stefan Matthias Aust 
" Last Change: 2006 Apr 13 

if exists("b:did_indent") 
    finish 
endif 
let b:did_indent = 1 

setlocal indentexpr=GetScalaIndent() 

setlocal indentkeys=0{,0},0),!^F,<>>,<CR> 

setlocal autoindent sw=2 et 

if exists("*GetScalaIndent") 
    finish 
endif 

function! CountParens(line) 
    let line = substitute(a:line, '"\(.\|\\"\)*"', '', 'g') 
    let open = substitute(line, '[^(]', '', 'g') 
    let close = substitute(line, '[^)]', '', 'g') 
    return strlen(open) - strlen(close) 
endfunction 

function! GetScalaIndent() 
    " 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 ind = indent(lnum) 
    let prevline = getline(lnum) 

    "Indent html literals 
    if prevline !~ '/>\s*$' && prevline =~ '^\s*<[a-zA-Z][^>]*>\s*$' 
    return ind + &shiftwidth 
    endif 

    "### Taken from mail on scala mailing list 
    "### ------------------------------------- 
    " Add a 'shiftwidth' after lines that start a block 
    " If if, for or while end with), this is a one-line block 
    " If val, var, def end with =, this is a one-line block 
    "if prevline =~ '^\s*\<\(\(else\s\+\)\?if\|for\|while\|va[lr]\|def\)\>.*[)=]\s*$' 
     "\ || prevline =~ '^\s*\<else\>\s*$' 
     "\ || prevline =~ '{\s*$' 
     "let ind = ind + &shiftwidth 
     "endif 
     " Add a 'shiftwidth' after lines that start a block 
     " If if, for or while end with), this is a one-line block 
     " If val, var, def end with =, this is a one-line block 
     if prevline =~ '^\s*\<\(\(else\s\+\)\?if\|for\|while\)\>.*[)]\s*$' 
        \ || prevline =~ '^\s*\<\(\(va[lr]\|def\)\>.*[=]\s*$' 
        \ || prevline =~ '^\s*\<else\>\s*$' 
        \ || prevline =~ '{\s*$' 
      let ind = ind + &shiftwidth 
     endif 

    " If parenthesis are unbalanced, indent or dedent 
    let c = CountParens(prevline) 
    echo c 
    if c > 0 
    let ind = ind + &shiftwidth 
    elseif c < 0 
    let ind = ind - &shiftwidth 
    endif 

    "### Taken from mail on scala mailing list 
    "### ------------------------------------- 
    " Dedent after if, for, while and val, var, def without block 
    "let pprevline = getline(prevnonblank(lnum - 1)) 
    "if pprevline =~ '^\s*\<\(\(else\s\+\)\?if\|for\|while\|va[lr]\|def\)\>.*[)=]\s*$' 
     "\ || pprevline =~ '^\s*\<else\>\s*$' 
     "let ind = ind - &shiftwidth 
     "endif 
     " Dedent after if, for, while and val, var, def without block 
     "let pprevline = getline(prevnonblank(lnum - 1)) 
     if pprevline =~ '^\s*\<\(\(else\s\+\)\?if\|for\|while\)\>.*[)]\s*$' 
        \ || pprevline =~ '^\s*\<\(\va[lr]\|def\)\>.*[=]\s*$' 
        \ || pprevline =~ '^\s*\<else\>\s*$' 
      let ind = ind - &shiftwidth 
     endif 

    " Align 'for' clauses nicely 
    if prevline =~ '^\s*\<for\> (.*;\s*$' 
    let ind = ind - &shiftwidth + 5 
    endif 

    " Subtract a 'shiftwidth' on '}' or html 
    let thisline = getline(v:lnum) 
    if thisline =~ '^\s*[})]' 
     \ || thisline =~ '^\s*</[a-zA-Z][^>]*>' 
    let ind = ind - &shiftwidth 
    endif 

    return ind 
endfunction 

लेकिन मैं कोई सुराग नहीं है, जहां परिवर्तन पेश किया गया था है ... https://codereview.scala-lang.org/fisheye/browse/scala-svn/scala-tool-support/trunk/src/vim/indent/scala.vim

पर SVN के इतिहास में यह पता लगाने की कोशिश