Intereting Posts

Установите makeprg в gradlew

Сначала немного контекста для тех, кто не знает градиента. Это в основном как make за исключением того, что вам не нужно устанавливать gradle на вашем компьютере. Он поставляется с проектами в виде файла, называемого gradlew . Так, например, проект градиента может выглядеть так:

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

И из корневого каталога я могу запускать команды типа ./gradlew build или ./gradlew test для сборки / тестирования моего кода.

Теперь vim. Сначала я :set autochdir в свой .vimrc . Во-вторых, мой текущий буфер – Foo.java .

Я хочу запустить :make который будет запускаться ../../../../../../gradlew . Как я могу установить makeprg таким образом, что независимо от того, что является моим :pwd он вызовет gradlew (я предполагаю, что это может быть достигнуто с использованием dirname в цикле, но я не уверен, что это самый эффективный / самый чистый способ сделать это).

Благодарю.

Для тех, кто хочет сделать то же самое (или подобные вещи), это выполнимо, создавая новый компилятор, который использует errorformat findfile , и повторно использует errorformat из какого-то другого компилятора + небольшие изменения. Конечный результат выглядит так:

 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%.%# 

Просто добавьте комментарий к foo выше … Полезно добавить './' к переменной s: gradlew, то есть:

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

Это позволит выполнить gradlew, даже если файл находится в текущем рабочем каталоге. Без этого вы можете увидеть ошибку «команда не найдена: gradlew».