Set makeprg para gradlew

2

Primeiro, um pouco de contexto para aqueles que não conhecem gradle. É basicamente como make exceto que você não precisa ter gradle instalado em seu computador. Ele vem com projetos como um arquivo chamado gradlew . Então, por exemplo, um projeto gradle poderia se parecer com:

.
├── gradlew
└── src
    └── main
        └── java
            └── com
                └── foo
                    └── bar
                        ├── Bar.java
                        ├── Baz.java
                        ├── Foo.java
                        └── Qux.java

E no diretório raiz, posso executar comandos como ./gradlew build ou ./gradlew test para criar / testar meu código.

Agora vim. Primeiro, eu :set autochdir no meu .vimrc . Em segundo lugar, meu buffer atual é Foo.java .

Eu quero executar :make , o que acionaria ../../../../../../gradlew . Como posso definir makeprg de tal forma que não importa qual é o meu :pwd , ele chamará gradlew (acho que isso poderia ser alcançado usando dirname em um loop, mas não tenho certeza se é o mais eficiente / mais limpo maneira de fazer isso).

Obrigado.

    
por foo 14.03.2014 / 04:03

2 respostas

1

Para aqueles que procuram fazer a mesma coisa (ou coisas semelhantes), é possível criar um novo compilador que use findfile e reutilizar errorformat de algum outro compilador + pequenas modificações. O resultado final parece:

let s:gradlew = escape(findfile('gradlew', '.;') . " -b " . findfile('build.gradle', '.;'), ' \')

if exists("current_compiler")
    finish
endif

if exists(":CompilerSet") != 2      " older Vim always used :setlocal
  command -nargs=* CompilerSet setlocal <args>
endif

let current_compiler = s:gradlew
execute "CompilerSet makeprg=" . s:gradlew
" copied from javac.vim + added the :compileJava bits
CompilerSet errorformat=%E:compileJava%f:%l:\ %m,%E%f:%l:\ %m,%-Z%p^,%-C%.%#,%-G%.%#
    
por 26.03.2014 / 17:19
1

Para adicionar ao comentário de foo acima, note que é útil adicionar './' à variável s: gradlew, ou seja:

let s:gradlew = escape('./' . findfile('gradlew', '.;') . " -b " . findfile('build.gradle', '.;'), ' \')

Isso permitirá que o gradlew seja executado mesmo quando o arquivo estiver no diretório de trabalho atual. Sem isso, você pode ver o erro "comando não encontrado: gradlew".

    
por 08.05.2015 / 03:52

Tags