Мелодия cindent "switch" отступ - PullRequest
1 голос
/ 28 ноября 2011

Nemerle является C-подобным языком и в основном очень хорошо работает с cindent.Однако его конструкция, аналогичная switch, называется match:

match (x)                // switch (x)
{                        // {
| "Hello World" => ...   // case "Hello World": ...
| _ => ...               // default: ...
}                        // }

Возможно ли вместо этого получить операторы cinoptions для switch, применяемые к этой конструкции?Может быть, есть регулярное выражение, которое я могу установить где-нибудь.Если нет, могу ли я сделать так, чтобы вертикальные полосы совпали с фигурными скобками другим способом?


Обновление

Вот что я придумал:

" Vim indent file
" Language:   Nemerle
" Maintainer: Alexey Badalov

" Only load this indent file when no other was loaded.
if exists("b:did_indent")
   finish
endif
let b:did_indent = 1

" Nemerle is C-like, but without switch statements or labels.
setlocal cindent cinoptions=L0

" Enable '|', disable ':'.
setlocal indentkeys=0{,0},0),0#,0\|,!^F,o,O,e

setlocal indentexpr=GetNemerleIndent()

let b:undo_indent = "setl cin< cino< indentkeys< indentexpr<"

function! GetNemerleIndent()
    " Nemerle is C-like; use built-in C indentation as a basis.
    let indent = cindent(v:lnum)

    " Set alignment for lines starting with '|' in line with the opening
    " brace. Use default indentation outside of blocks.
    if getline(v:lnum) =~ '^\s*|'
        call cursor(v:lnum, 1)
        silent! normal [{
        if line('.') == v:lnum
            return indent
        endif
        return indent(line('.'))
    endif

    return indent
endfunction

1 Ответ

3 голосов
/ 28 ноября 2011

См. :h indent-expression, чтобы закрепиться в документации Vim. По сути, я думаю, что вы захотите написать свой собственный «файл отступа» для вашего типа файла, который вернет indentexpr с соответствующими пробелами для вашей структуры соответствия, а в противном случае (при условии, что это только изменение) вернет обычное значение cindent (). Он включает в себя немного больше, чем просто установка регулярного выражения, файл отступа будет содержать команды и структуры Vim для оценки строк и возврата правильного значения. Как сказано в документации, лучший способ узнать, как они работают, - это посмотреть на некоторые файлы отступов для других языков. , , , (В C нет файла отступа, чтобы вы могли на него смотреть, потому что он все интегрирован в собственный исходный код Vim, но большинство других языков имеют файлы отступов, использующие Vimscript.)

...