LINUX.ORG.RU

Уменьшение боли от жабобыдлокодинга в виме

 ,


10

9

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

Задача: писать на жабе в виме (сборку через ant уже осилил).

Навигацию по ошибкам компиляции через :cn/cp/cc прикрутить осилю самостоятельно.

Костыли работающие через eclipse (eclim), идейку, и т.п. — недопустимы.

Фичи которые очень нужны:

  • заполнение списка модулей (аналог cmd+shift+o в эклипсе)
  • заполнение асбтрактных методов при реализации интерфейсов
  • добавление обязательных обработчиков исключений (например, пишу Thread.sleep, тыкаю хоткей, и втыкается пустой обработчик InterruptedException)
  • подсвечивать строки с warnings и errors прямо в коде разными цветами (думаю это не имеет отношения к топику, и делается каким-то плагином)

необязательно, но желательно

  • подсказки со списками методов в классах, аргументами функций
  • переход на документацию слова под курсором

Если кто-то знает альтернативные текстовые редакторы с подобными фичами — тоже будет интересно узнать (обязательно пишите линки не только на сами редакторы, но и на страницы проектов для настройки работы с жабой).

И еще, у меня кроссплатформа linux/osx, поэтому просьба не предлагать виндовс-онли решения, или линукс-онли. osx-онли в принципе в данный момент устроит, но лучше чтобы работало на osx и линуксе.

★★★★★

Ответ на: комментарий от rusich

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

(если не исчерпала — я добавлю, что я разрабатывал проект в течение 1 месяца с использованием андроед студии еще когда она была developer preview, и работала корректно, и пришел к выводу, что для моих нужд она не годится, а потом ее и вообще сломали в 1.0)

waker ★★★★★ ()
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от waker

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

Я х3, что там в бэке но возможно этот труп можно потыкать.

pon4ik ★★★★★ ()
Ответ на: комментарий от waker

да, я в курсе, прикручивал для разных языков неоднократно.

Если у вас дойдут руки, скиньте пожалуйста и мне.

andreyu ★★★★★ ()
Ответ на: комментарий от pon4ik

ну я хабр не посещаю, поэтому спросил - вдруг кто-то что-то посоветует. нет - так нет. я могу обойтись и тем что есть, а без чего не могу - сам сделаю.

waker ★★★★★ ()
Ответ на: комментарий от waker

А если просто идею взять обычную? Она тоже андроид умеет.

Gorthauer ★★★★★ ()
Ответ на: комментарий от Gorthauer

А если просто идею взять обычную? Она тоже андроид умеет.

если опыт с android studio может мне хоть что-то сказать про обычную intellij idea - то я не хочу подходить к ней на расстояние пушечного выстрела.

waker ★★★★★ ()
Ответ на: комментарий от waker

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

Gorthauer ★★★★★ ()
Ответ на: комментарий от waker

не может собрать мой проект, ни экспортом из эклипсы в градле,

Вот здесь собака и порылась. Проект нужно писать ручками в мавене/градле с нуля, а уже потом импортировать его в эклипсы и прочее. Кто лучше импортирует, то и годное IDE.

asaw ★★★★★ ()
Последнее исправление: asaw (всего исправлений: 1)
Ответ на: комментарий от asaw

Проект нужно писать ручками в мавене/градле с нуля

зачем мне IDE, в котором надо файлы в систему сборки добавлять редактированием каких-то неведомых скриптов?

waker ★★★★★ ()
Ответ на: комментарий от waker

Файлы туда добавлять обычно не надо, только директории, да и те тоже не всегда.

asaw ★★★★★ ()
Последнее исправление: asaw (всего исправлений: 1)
Ответ на: комментарий от Gorthauer

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

год назад и в android studio мой проект собирался. в любом случае — спасибо за ваше предложение, но нет, все также, как и написано в топе, не заинтересован.

waker ★★★★★ ()
Ответ на: комментарий от asaw

Файлы туда добавлять обычно не надо, только директории, да и те тоже не всегда.

да мне плевать. давайте будем соблюдать вежливость, и уважать друг друга, а не писать то, о чем собеседник изначально просил не писать.

waker ★★★★★ ()
Ответ на: комментарий от pon4ik

Я х3, что там в бэке но возможно этот труп можно потыкать.

я вообще не понял о чем речь по ссылке.

waker ★★★★★ ()
Ответ на: комментарий от waker

я вообще не понял о чем речь по ссылке

Бывает.

Это единственная известная мне хрень, которая хоть отдалённо напоминает DE для жабы в имаксе.

pon4ik ★★★★★ ()
Ответ на: комментарий от pon4ik

а, так это для имакса.. так понятнее.

интересно, что оно умеет извлекать семантическую информацию напрямую из jar. значит, это возможно, просто для вима или никто не накодил, или я просто не нашел.

а чего труп? оно не работает? я все равно врядли перейду на имакс (уже пробовал пару раз, и вернулся на вим, но притащил оттуда несколько фич :), но можно попробовать потыкать.

waker ★★★★★ ()
Ответ на: комментарий от rusich

Да в вим на жабе вообще пишут только извращенцы. IDEA зарулит вим по скорости написания кода, я гарантирую это. Один рефакторинг чего стоит (а чуваки на виме не смогут рефакторить - у них нет такого понятия даже).

menangen ★★★★★ ()
Ответ на: комментарий от waker

Труп оно для крестов, для жабы - не пробовал.

Гдето тут было упоминание консольной тулзы, которая таскает семантическую инфу из jar.

Я сам тоже не фанат имакса, но живых плагинов под него больше, вот думаю как посвободней на ворке будет, перейти на него + evil, попробовать таки.

pon4ik ★★★★★ ()
Ответ на: комментарий от menangen

Да, жабка в следствии своего низкого порога вхождения, тащит кучу быдлокодеров профессию, за которыми потом очень сложно, хм, рефакторить без инструментальных средств ;)

pon4ik ★★★★★ ()
Ответ на: комментарий от menangen

IDEA зарулит вим по скорости написания кода

у вас в параллельной вселенной жаба не тормозит, а у нас тормозит. да и даже если бы не тормозила, если говорить именно о написании и редактировании кода — то вим заруливает всех с большим отрывом.

Один рефакторинг чего стоит

$ find src -type f -name "*.java"  | wc -l
       9

да и то, только потому, что в некоторых случаях классы из 3 строчек жаба принуждает в отдельные файлы выносить.

более того

$ find src -type f -name "*.java"  | xargs cat | wc -l
    1785

рефакторить там нечего.

проект на сишечке, а на жабе только обвязки для взаимодействия с системными API.

для сравнения, только код гуя под андроид на сишке составляет 10710 LOC, а весь код 2092738 LOC.

waker ★★★★★ ()
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от waker

Код гуя под андроид написан на си? На NDK что-ли? Гугл не рекомендует активно юзать ndk для простых приложений.

menangen ★★★★★ ()
Ответ на: комментарий от pon4ik

Порог низкий только для самого языка. Все остальные поделия по типу мавена, спринга, плэя, анта, и т.п. заставляют изучать монструозные поделия месяцами.

menangen ★★★★★ ()
Ответ на: комментарий от menangen

Монструозные поделия, это все уже следствия :)

pon4ik ★★★★★ ()
Ответ на: комментарий от menangen

Один рефакторинг чего стоит (а чуваки на виме не смогут рефакторить - у них нет такого понятия даже).

Разумеется, они же не пишут говнокод, который постоянно рефакторить нужно.

Отцы вообще в ed и sam пишут, и ничего.

А по сабжу, жаба в любом случае боль, да и без eclim вряд ли что-нибудь вменяемое можно получить.

Freyr69 ★★★ ()
Ответ на: комментарий от menangen

Код гуя под андроид написан на си? На NDK что-ли?

угу.

Гугл не рекомендует активно юзать ndk для простых приложений.

у меня приложение было написано на си еще до появления андроида. предлагаешь начать переписывать все на жабу? извини, времени нет.

зы: да, я пробовал делать гуй на жабе, и дергать из него сишку через jni — херня получилась, переделал гуй на сишку.

waker ★★★★★ ()
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от waker

у вас в параллельной вселенной жаба не тормозит, а у нас тормозит. да и даже если бы не тормозила, если говорить именно о написании и редактировании кода — то вим заруливает всех с большим отрывом.

Если от eclim'a тебя отвращает только эта сторона вопроса, то настоятельно рекомендую, таки попробовать сначала. Оно не будет медленней тогоже ycm. Хотя если у тебя c++, тогда возможно, если у тебя вери греат перцепшн, ты что то и заметишь.

pon4ik ★★★★★ ()
Ответ на: комментарий от andreyu

Если у вас дойдут руки, скиньте пожалуйста и мне.

для ant:

set efm=\ %#[javac]\ %#%f:%l:\ %m,%+Z%p^,%+C%.%#,%-G%.%#

в результате, на вот таком сообщении об ошибке:

    [javac] /Users/waker/prj/deadbeef/android/com.ddb.deadbeef2/src/com/ddb/deadbeef2/DdbBitmap.java:16: error: cannot find symbol
    [javac]     private BitmapShad_er _clampShader;
    [javac]             ^

курсор в quickfix ставится на строку

(1 of 1): error: cannot find symbol

а cp/cn/cc ставит курсор на нужную строку. на нужную колонку в строке не ставит, хотя и должен. но я не заморачиваюсь.

для голого javac есть много примеров в доках :h errorformat-javac

waker ★★★★★ ()
Ответ на: комментарий от pon4ik

я разве не писал, что уже пробовал eclim? нет? тогда пишу щас. спасибо, но снова мимо. и нет, у меня не кресты. (я не пользуюсь ycm, т.к. мне для сишки хватает стандартных C-p/C-n в виме, а objc я пишу в xcode)

waker ★★★★★ ()
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от waker

set efm=\ %#[javac]\ %#%f:%l:\ %m,%+Z%p^,%+C%.%#,%-G%.%#

Вот спасибо.
Вы в autocmd filetype это обернули или глобально?

а cp/cn/cc ставит курсор на нужную строку. на нужную колонку в строке не ставит, хотя и должен. но я не заморачиваюсь.

Отлично, на нужную колонку мне не всегда и нужно перемещаться. Достаточно нужный файл и нужная строка.

andreyu ★★★★★ ()
Ответ на: комментарий от andreyu

Вы в autocmd filetype это обернули или глобально?

угу, но уже додумался = заменить на +=. у меня в vimrc была тонна разных errorformats, от перла до валы. щас их все выпилил, оставил только эту строчку. с сишными ошибками вим искоробочно справляется.

waker ★★★★★ ()
Ответ на: комментарий от waker

блин, все не так просто оказалось. += не сработал как я ожидал. ща буду решение искать :)

waker ★★★★★ ()
Ответ на: комментарий от andreyu

ты не знаешь, как в виме сделать что-то вроде «errorformat=new stuff,$errorformat» ?

если делать +=, новое добавляется в конец, и ловится сишным паттерном.

waker ★★★★★ ()
Ответ на: комментарий от waker

В моем случае этот вариант не помог:

[javac] /home/andrey/projects/jelly-berry/projects/android/src/com/tinyorange/jellyberry/JellyBerry.java|17 error| ';' expected

Выщемляется путь:

[javac] /home/andrey/projects/jelly-berry/projects/android/src/com/tinyorange/jellyberry/JellyBerry.java

andreyu ★★★★★ ()
Ответ на: комментарий от waker

$ find src -type f -name «*.java» | xargs cat | wc -l
1785

и зачем тебе какая-то поддержка жабы для 2к строк кода?

vvviperrr ★★★★★ ()
Последнее исправление: vvviperrr (всего исправлений: 1)
Ответ на: комментарий от andreyu

у тебя другой формат вывода. надо в формате заменить кусок начиная с :%l на то что у тебя.

waker ★★★★★ ()
Ответ на: комментарий от waker

ты не знаешь, как в виме сделать что-то вроде «errorformat=new stuff,$errorformat» ?

Я думал, что можно запихнуть нужный efm в autocmd:

autocmd FileType java set=....

andreyu ★★★★★ ()
Ответ на: комментарий от waker

я о том, зачем тебе какое-то уменьшение боли от жабы в виме, когда у тебя кода всего ничего

vvviperrr ★★★★★ ()
Ответ на: комментарий от andreyu

можно. но я часто открываю пустой вим, на нажимаю f9 (:mak). так не сработает autocmd.

waker ★★★★★ ()
Ответ на: комментарий от waker

Так, это я затупил, вот какой у меня формат вывода егора:

||     [javac] /home/andrey/projects/jelly-berry/projects/android/src/com/tinyorange/jellyberry/JellyBerry.java:17: error: ';' expected
andreyu ★★★★★ ()
Ответ на: комментарий от vvviperrr

я о том, зачем тебе какое-то уменьшение боли от жабы в виме, когда у тебя кода всего ничего

затем, что от эклипсы тошнит. например, ненавно она удалила половину текста из файла, и похерила undo history. пришлось откатить из гита, и переписать изменения заново. постоянно сплошные грабли.

waker ★★★★★ ()
Ответ на: комментарий от andreyu

и что, все равно не работает? с виду все ок. хотя вот эти || смущают. у меня такого не видно нигде.

waker ★★★★★ ()
Ответ на: комментарий от andreyu

вобщем, похоже что этот errorformat конфликтует с сишным дефолтным. придется делать через локальный .exrc

если что — prepend делается через :set efm^=

waker ★★★★★ ()
Ответ на: комментарий от waker

и что, все равно не работает?

Попробовал еще раз - работает. Но, естественно, отвалился сишный формат.

с виду все ок. хотя вот эти || смущают.

Я случайно захватил || в егоре их нет.

andreyu ★★★★★ ()
Ответ на: комментарий от waker

вобщем, похоже что этот errorformat конфликтует с сишным дефолтным. придется делать через локальный .exrc

Можно и так, но это менее удобно.

если что — prepend делается через :set efm^=

Ага, спасибо.

andreyu ★★★★★ ()

допилил основы. теперь могу прямо из вима компилять, бродить по ошибкам через quickfix, подписывать apk, инсталлировать на девайс, и запускать. все на хоткеях.

http://i.imgur.com/6gg4aCi.png

waker ★★★★★ ()
Последнее исправление: waker (всего исправлений: 2)

Тред не читал, YouCompleteMe не советовали?

ebantrop ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.