Подтвердить что ты не робот

Как правильно сделать аннотации javas vim indent?

При отступывании java-кода с аннотациями vim настаивает на том, чтобы отступать следующим образом:

@Test
    public void ...

Я хочу, чтобы аннотация была в том же столбце, что и определение метода, но я не могу найти способ сказать vim, чтобы это сделать, за исключением, может быть, использования выражения отступа, но я не уверен, могу ли я использовать что вместе с регулярным уведомлением.

edit: плагин filetype уже включен. Я просто немного запутался в отступающих плагинах. Принятый ответ может быть немного хакерским, но работает и для меня.

4b9b3361

Ответ 1

Изменить: я не могу удалить свой собственный ответ, потому что он уже принят, но @pydave answer кажется лучшим (более надежным) решением.


Вероятно, вы должны использовать файл отступов для java FileType (вместо использования cindent), установив filetype plugin indent on .

Тем не менее, файл отступов, поставляемый вместе с Vim 7.1 из моего дистрибутива Linux (смотря на текущий vim svn, это все еще верно для 7.2) пока не учитывает аннотации. Поэтому я скопировал /usr/share/vim/vim71/indent/java.vim (см. https://vim.svn.sourceforge.net/svnroot/vim/branches/vim7.1/runtime/indent/java.vim) в ~/.vim/indent/java.vim и добавил следующие строки до конца:

let lnum = prevnonblank(v:lnum - 1)
let line = getline(lnum)
if line =~ '^\s*@.*$'
    let theIndent = indent(lnum)
endif

Я не уверен, что это сломает любые другие углубления, но это работает для меня.

Ответ 2

Вы не должны изменять встроенные настройки vim. После обновления пакета ваши изменения могут исчезнуть. Если вы скопируете его в свой .vim, то вы не получите никаких исправлений ошибок в отступлении java.

Вместо этого добавьте следующее в новый файл с именем ~/.vim/after/indent/java.vim

function! GetJavaIndent_improved()
    let theIndent = GetJavaIndent()
    let lnum = prevnonblank(v:lnum - 1)
    let line = getline(lnum)
    if line =~ '^\s*@.*$'
        let theIndent = indent(lnum)
    endif

    return theIndent
endfunction
setlocal indentexpr=GetJavaIndent_improved()

Таким образом, он загружает отступ java запаса и только изменяет отступ для удаления отступов аннотации.

Ответ 3

Я нашел pydave предложение почти то, что я хотел, но я хотел это:

@Override
public void ...

и:

@Override public void ...

поэтому я заменил регулярное выражение (в соответствии с pydave's, место в ~/.vim/after/indent/java.vim):

setlocal indentexpr=GetJavaIndent_improved()

function! GetJavaIndent_improved()
    let theIndent = GetJavaIndent()
    let lnum = prevnonblank(v:lnum - 1)
    let line = getline(lnum)
    if line =~ '^\s*@[^{]*$'
        let theIndent = indent(lnum)
    endif

    return theIndent
endfunction