Как правильно сделать аннотации vim отступа Java? - PullRequest
20 голосов
/ 14 октября 2008

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

@Test
    public void ...

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

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

Ответы [ 3 ]

18 голосов
/ 11 декабря 2010

Вы не должны изменять встроенные настройки 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-отступ и изменяет его только для удаления отступов аннотации.

9 голосов
/ 17 октября 2008

Редактировать: я не могу удалить свой собственный ответ, потому что он уже принят, но @ pydave's 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

Я не уверен, нарушает ли это какие-либо другие отступы, но это работает для меня.

1 голос
/ 09 декабря 2013

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

@Override
public void ...

и это:

@Override public void ...

поэтому я заменил регулярное выражение (согласно пидаве, место в ~/.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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...