Pull to refresh

Comments 86

Что-то типа: запускаем emacs, подключаем evil mode и сводим задачу к предыдущей ?)
Я тут, яволь! ;-) В emacs всего хватает, если говорить о Python: есть быстрые переходы по классам, свойствам, файлам. По файлам|каталогам проекта. Автоматическое завершение ввода (3+ способами). Доступ к документации ЯП прямо из. Доступ к snippets, ну и так далее по списку. В emacs самая большая проблема наверное то, что всё вместе настроить и запомнить куда какая кнопка — нетривиальная задача, это многих отпугивает
UFO just landed and posted this here
Vim это не emacs. Пользуйте нативные клиенты (хотя бы mysql i psql) и будет счастье.
UFO just landed and posted this here
Где можно найти вменяемое описание актуальных флагов сборки самого Vim из исходников, желательно всех флагов, желательно одним документом?
Почему нет варианта — «Все есть»?

Или вы не верите в такое? :-)
Сначала нужно придумать, что есть «все» )
Скажите, а с проектами какого размера вы работали в vim?

Дело в том, что мне тоже нравится этот редактор, но я просто не могу использовать его для чего-то более-менее серьёзного. Очень не хватает как раз перехода к классам, объявлениям методов и т.п. Да, конечно есть ctags и т.п. но до idea ему далеко.

Как, скажем, вы поступаете, какими инструментами пользуетесь, если нужно быстро посмотреть код вызываемого метода в symfony? Или найти, где реализован метод интерфейса?
Я в основном пишу на JS в WebStorm, в Vim у меня получится настроить корректный автокомплит с учетом jsdoc аннотаций, с поддержкой алиасов, шаблонов и т.д.? Ну например что-то типа такого:
image
Ух ты! А idea такое позволяет? Спасибо большое, не знал!
Казалось бы базовая вещь
На работе активно работаю с 3 проектами; один на ПХП (500к строк), 2 на руби (сумарно более 100к строк). Кроме того еще есть две дюжины мелких проектов; типа деплой скриптов и прочего. Для навигации в проектах использую Silver Searcher. До ВИМа использовал много разных ИДЕ в связке с различными технологиями (визуал студио, пайчарм, рубимайн, нетбинс, эклипс); если честно то я не могу себе даже представить уход от ВИМа в сторону чего-либо другого — настолько деревянным, медленным и невозможным в использовании оно мне сейчас кажется.
Я немного из другой секты, но проблемы с навигацией по проектам в emacs впринципе теже… в итоге пока я пришел к тому, что из «умных» фич я использую только автокомплит по содержимому открытых буферов. А навигацию по проекту осуществляю тупо грепом… зачастую получается даже быстрее, чем когда пользовался QtCreator'ом. Но от полноценной поддержки работы с проектами все же наверно не отказался бы)
Проблема и там и тут в отсутствии толковых семантических анализаторов.
Советую присмотреться к projectile, helm. И то и другое дали очередной прирост производительности лично мне. Потом если в dired научиться пользоваться выборками/глобальными заменами вообще круто получается.
projectile я пробовал, но он мне показался каким-то глючным и вообщем дело у меня с ним не сложилось. А helm я пробовал только как замену ido, но тоже отказался, т.к. ido показался мне более удобным.

з.ы. а может быть поделитесь ссылкой на свой .emacs файл, может у вас как-то более правильно эти можули сконфигурированы)
Для всех текущих проектов я использую Vim. От небольших книг, до web-сервиса на 4 связаных сайта.

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

Я планирую реализовать полноценный синтаксический и (возможно) семантический анализатор кода под Vim на базе Lex-Yacc (или PLY, еще не решил), вот тогда уже будут плагины с возможностью перехода к объявлениям.
Я понимаю, что из вима можно собрать все что угодно за счет плагинов. Но неужели он реально удобнее чем ide от jetBrains? Зачем мучатся со сборками и написанием своих плагинов, когда можно поставить инструмент где уже все есть из коробки? Многие приводят в пример скорость, но из всех ide приведенной выше фирмы с которыми мне доводилось работать, медленно стартует только intellij idea. И даже при работе с ней это не доставляет дискомфорта, ведь я не запускаю новый проект каждые две минуты, а 30 секунд запуска ничто по сравнению с часами работы над проектом.
Но неужели он реально удобнее чем ide от jetBrains?

Удобство складывается из множества мелких деталей. На пример быстрое приведение кода к общему code-style очень удобно, а так же умное автодополнение и возможность перехода к объявлениям тоже, но это лишь составляющие удобства.
Тяжело объяснить, чем именно привлекает Vim, но когда вливаешься в его, оторваться становится сложно.

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

Поверьте, далеко не все, особенно если вы любите «точить инструмент» и умеете программировать свою IDE.

ведь я не запускаю новый проект каждые две минуты

Это может показаться глупый, но я запускаю проекты очень часто. Я могу программировать мой рабочий проект, а затем внезапно перейти к исправлению бага в этой библиотеке, затем снова вернуться к моему проекту и так далее.
  1. быстрое приведение кода к общему code-style очень удобно
  2. умное автодополнение
  3. озможность перехода к объявлениям

Это все есть в ide от jetBrains. Тот же самый phpStorm
Видимо дело вкуса. Сам я не запускаю проекты часто, а если требуется быстро поправить somefile в someprodject могу открыть и сублим. Вим я запускаю только на удаленных серверах, где выбирать не приходиться и любовью к нему не проникся, впрочем как и ненавистью, но для работы мне его мало.
UFO just landed and posted this here
Я в виме делаю большие проекты, никаких проблем нет.
Есть куча плагинов, которые превращают вим в иде, но они абсолютно не нужны на самом деле.
Так же, как не нужно автодополнение, и масса прочих «фич», которыми гордятся коммерческие редакторы.

К нему тяжело привыкнуть (нужно около года использования), но я не видел ни кого, кто-бы об этом пожалел и хотел бы вернуться обратно в мир IDE.
Есть куча плагинов, которые превращают вим в иде, но они абсолютно не нужны на самом деле.
Так же, как не нужно автодополнение, и масса прочих «фич», которыми гордятся коммерческие редакторы.

Они нужны многим, но что в Vim, что в emacs все эти фичи реализованы ужасно криво, либо вообще не реализованы. Поэтому приходится утешать себя тем, что эти фичи не нужны)
приходится утешать себя тем, что эти фичи не нужны)

Либо научиться работать без этих фич )
Я могу сравнивать.
Без них легче жить.
В виме есть все, что нужно.
А главное — уникальная концепция.
Не смотря на отсутствие автодополнений и т.д. код в нем пишется гораздо быстрее, да и вообще, теперь вим режима не хватает в любом другом софте, настолько он удобен. Хорошо, хоть для браузеров есть vim плагины.
В QtCreator, Eclipse, IDEA насколько мне известно тоже есть Vim-режим редактирования.
Я полностью перешел на редактор «без фич», но таки не сказал бы, что нормальное автодополнение, полноценная работа с проектом как с проектом, а не набором файлов и т.п. мне помешают. По крайней мере в emacs мне автокомплит по буферам и снипеты частенько немного упрощают жизнь.
В QtCreator, Eclipse, IDEA насколько мне известно тоже есть Vim-режим редактирования

Гадость гадкая, поверьте мне.

По крайней мере в emacs мне автокомплит по буферам и снипеты частенько немного упрощают жизнь

В Vim из коробки так же есть автокомплиты, и не только по буферам. Со снипетами из коробки сложнее )
Чего, а всяких сниппет / темплейт плагинов хавтает.
Раньше первой программой новичка был калькулятор, а теперь темплейт плагин для вим.
В этой области есть вполне обозримые горизонты и идеалы.
И они достигнуты.
Вы про шаблоны для новых файлов?
Не только. Про сниппеты тоже.
Ну на счет обозримых горизонтов не соглашусь. Чем разнообразнее программные архитектуры, чем изощренее решения, тем сложнее шаблоны и снипеты к ним. У меня, на пример, ни один проект не обходился без собственного набора шаблонов и снипетов.
Понятно, что шаблоны у каждого свои.
Я имел ввиду средства хранения / управления всем этим.
Тут что-то новое (да еще и действительно полезное) уже тяжело изобрести.
Согласен. Главное чтоб все было достаточно гибко в реализации и удобно в использовании. Я выбрал UltiSnips (хотя и не очень доволен им) и мой vim_template.
Я все делаю на unite, функционал пишу сам.
Зато все единообразно выглядит и работает.
Для меня это важно.
Сейчас почти все уже самописное.
Ну, может быть. Меня отсутствие всего этого не напрягало, когда перешел на вим.
Проект — это логичная файловая структура. Если этого нет — это проблема другого порядка.
Не знаю, что еще надо, чтобы работать с кодом, как с проектом, кроме вима и файлового менеджера.
Все субъективно.

Вообще, с ростом знаний, профессионализма и навыков, код быстрее пишется напрямую, без всяких инструментов, которые должны этот код «писать за вас» и всячески помогать, но, естественно, делать этого не могут. ;-)
UFO just landed and posted this here
Вы правда думаете, что профессионально освоить продукт из линейки Jetbrains гораздо сложнее, чем vim или emacs?

Я этого нигде и не утверждал) Про «самоутешение» я немного утрировал, но смысл тот-же. Некоторые действительно полезные фичи типа автокомплитов или навигации по проекту в каком-то виде настраиваются и в Vim и в emacs, но могли бы быть и лучше. Но при этом удобство работы с текстом и возможность работать без мыши в большинстве случаев перекрывает эти минусы и плюсы больших IDE типа продуктов от Jetbrains.
Как мне кажется, они нужны тем, кто не способен к слепому набору и не знает кодовой базы проекта. Грэп и быстрый переход к файлу это 98% навигации необходимой для быстрого, реально быстрого перехода и использования кодовой базы проекта. Сколько раз я видел разработчиков, которые пользуются боковой панелью с деревом файлов в IDEA, а ведь можно использовать аналог Cmd+T что экономит где-то пол часа в день.

Лично для меня, IDEA подобные вещи работают слишком медленно, слишком часто встречался с ситуацией когда после нажатия поиска по файлам и начала ввода окно поиска еще не отрисовано, а весь ввод пошел в текущий открытый файл (к слову, у меня восьми-ядерный мак и 24Гб памяти, а IDE этого не хватает для быстрой работы). Так что пользуюсь ST3, есть настроенный vim, но я никак не приспособлюсь к управлению буферами. Еще у простых но мощных редакторов, таких как vim, emacs, st есть большое преимущество перед java-IDE — маленькие редакторы не жрут память и умеют в большие файлы.
Сколько раз я видел разработчиков, которые пользуются боковой панелью с деревом файлов в IDEA, а ведь можно использовать аналог Cmd+T что экономит где-то пол часа в день.

Мне кажется, что проблема неоптимальной скорости работы с кодом больше надуманная. В любом случае мало какой человек может написать и отладить сложного осмысленного кода больше чем 500-1000 строк в день, а при таких объемах именно набор текста дай бог 30% времени занимает даже для людей не умеющих набирать в слепую и постоянно елозящих мышкой по столу)

Еще у простых но мощных редакторов, таких как vim, emacs, st есть большое преимущество перед java-IDE — маленькие редакторы не жрут память и умеют в большие файлы.

Я бы не сказал, что emacs очень легкий и быстрый редактор :) Однопоточность — его слабое место, поэтому даже простые, для полноценных IDE, операции типа коментирования 1000+ строк кода могут заставить emacs подвиснуть) А полноценной многопоточной версии что-то пока на горизонте не наблюдается.
Как раз хотел это написать. Акцентирую внимание ещё раз — при всём удобстве работы с текстом в vim/emacs, нужно ли оно для написания программы? Код больше читается, чем пишется — это уже аксиома. А прочитать, или, точнее, разобраться, гораздо проще в ide, чем в чистом редакторе. И всё благодаря удобной навигации, подсказкам, интеллектуальному автодополнению и т.п.
Ну, лично я в emacs пользуюсь связкой yasnippet + autocomplete (ищет только по открытым буферам) + grep + gdb. Это конечно не абы что, но с практикой становится вполне удобно ходить даже по большим проектам. Просто приходится в голове держать структуру той части проекта, с котрой работаешь в данный момент
А что насчёт projectile? У меня не получилось нормально с этой штукой работать — тормозит очень, не всегда понимает, что находся в проекте — отказывается искать файлы, каталоги.
Насчет утешения, я не был бы так однозначен.

Приведу как пример дефолтное автодополнение в MSVS. За счет того, что автодополнение работае по абсолютно всем возможным вариантам можно крайне удивиться тому какие варианты попадаются в списке, когда дополняешь имя локальной переменной объявленой 2мя строками выше.

Дефолтное автодополнение в Vim работае по прямому как стрела принципу: есть в открытом буфере — появляется в списке. Да, такое автодополнение не контекстное зато работает в любом месте файла, например в комментариях.
Как вы профилируете плагины? Как находите узкие места в быстродействии?
Пока никак. Проблем с быстродействием пока не возникало, как появятся, займусь этим вопросом.
Можно использовать встроенные в vim средства (:help profiling, хотя, есть ограничения), недавно это обсуждалось на vi.stackexchange.com.
очень мощный плагин для работы с Git прямо из Vim
так они еще и более функциональные по сравнению с аналогами среди плагинов Vim!

Мне показалось, или в плагине git отсутствует команда diff?

Я думаю, ваше стремление с удовольствием приняли бы в каком-нибудь уже существующем проекте. Например, можете посмотреть VCSCommand. Кажется, когда я пользовался им последний раз, там было, над чем работать.
Мне показалось, или в плагине git отсутствует команда diff?

Она работает в зависимости от контекста, на пример diff между двумя ветками, файлами или коммитами. Я расскажу об этому подробнее в других статьях.
понимаете, чем удобен VCSCommand — мне не надо вспоминать кто у меня в текущем проекте — git или svn, оно везде работает одинаково… для текучки это достаточно (лично для меня)… и хоткеями обвешивать вроще…
ссылка битой получилась — двоеточие после http потерялось
Может, кто-нибудь подскажет решение, которое позволяет таскать за собой свой vim-конфиг (а заодно и .profile и еще что-нибудь), на какую бы машину вы ни логинились по ssh, и делать это автоматически (по типу того, как, например, таскаются ключи по ssh ForwardAgent)? При этом было бы идеально, если бы изменять конфиг можно было в любом месте, и он бы везде в момент логина обновлялся (по типа Дропбокса). Может, кто-то написал такую утилиту/сервис уже?
Я использовал для этого rsync.
Да, это похоже. Однако оно, насколько я понимаю, не выживает при цепочке логинов notebook -> server1 -> server2 (хотя ForwardAgent — выживает). Мне видится, что система таскания конфигов, однажды установленная на всех машинах по команде типа «apt-get install ssh-sticky-configs», должна скорее быть завязанной за ключ из ForwardAgent и именно по нему загружать конфиги и заливать их сразу же обратно при изменениях…
Так таких решений полно, каждый допиливает для себя…

Так, я просто храню конфиг на гитхабе, там же храню простенький самописный скрипт на питоне, котрый берет лежащий там же конфиг со списком плагинов и все вытаскивает. Поэтому для старта мне надо просто вытащить на локал github.com/dimasg/vim и запустить update_bundles.py (идея позаимствована из лежащего там же update_bundles.rb на руби, внутри есть урл откуда было взято).
А я храню в дропбоксе и делаю так:

source <( wget -O — dl.dropbox.com/s/xxxxxxxxxx/vim.sh )
Неудобно, историю изменений не посмотреть :)
тем более непонятно: чем дропбокс удобнее?
Ничем.
Так исторически сложилось у меня.
Такой же командой можно выполнить этот скрипт из последнего коммита c гитхаба.
С дропбоксом как-то проще, кроме этого мне это надо для других целей.
Я таким образом получаю доступ и к другим файлам, которые не в репозитории.
Респект за проделанную работу, но зачем с языком-то так мучиться было? На Perl/Python/Lua/Tcl давно уже можно писать плагины к Vim.
К сожалению нельзя. С помощью Perl/Python/Lua/Tcl можно обрабатывать некоторые данные, реализовать сетевое подключение и тому подобное, но вот, скажем, открывать новые окна в Vim (и еще много чего) у вас не получится (на сколько мне известно).
Я писал плагинытолько на Perl, для него есть костыль Vim::Perl (http://metacpan.org/pod/Vim::Perl) — умеет обращаться к VimScript-переменным и выражениям. Но вообще да, доступа абсолютно ко всему, как в VimScript, из перла нет. Про другие языки не знаю, мб к ним есть похожие модули.
Я решил пойти другим путем, а именно реализовать основную логику (какую возможно) в VimLanguage, а то что уже будет сделать нельзя, реализую в Python (ну или на другом, общедоступном ЯП).
Получится.

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

VIM::Eval({expr})
А как на счет функций?

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

А чем функции отличаются? Если не хватает прямых вызовов апи для конкретного встраиваемого языка — вы всегда можете выполнить кусок vim script в eval и получить результат. Это позволяет снять все ограничения.

Я свои плагины делаю на перле.
Ничего ставить дополнительно не надо

То есть если на машине нет интерпретатора Perl, то его заменит сам Vim?
А, вы про это.
Ну да, интерпретатор нужен.
Выше человек писал, что он ставит отдельно доп. модуль к перлу — это ерунда.
Согласен, но если есть возможность решить задачу без использования сторонних ЯП, я сделаю это. Когда же дело дойдет до проблем, с которыми не может справиться VimLanguage, выбиру один из ЯП и буду решать такие проблемы на нем.
Ну это очевидно.

В виме все хорошо, кроме VimL, сбросить бы это «наследние мрачных времен»…
В голосовании я нажал на кнопку воздержаться по следующим причинам:

> Быстрого перехода к объявлениям классов, методов, свойств, переменных и т.д.
jedi-vim (leader+g, leader+d) еще очень приятная комбинация leader+n

> Автоматического завершения ввода с подсказками

Настроил в jedi-vim popup on dot, автокомплит срабатывает например так from django.htt…
Есть для этого еще небольшой и очень удобный скрипт, который я всегда использую

" Auto fill import statement after type from A<space>
function! CompleteAndImport()
  if search('\<from\s\+[A-Za-z0-9._]\+\s*\%#\s*$', 'bcn', line('.'))
    " Enter character and start completion.
    return " import \<C-x>\<C-o>"
  endif
  return ' '
endfunction

inoremap <buffer> <expr> <Space> CompleteAndImport()


то есть, когда мы начинаем ввод from django.http автоматически добавляется ключевое слово import и включается автокомплит (данная фича присутствует и в PyDev, очень удобно)

> Доступа к документации ЯП прямо из Vim

В jedi-vim есть комбинация Shift+K

> Анализатора ошибок

syntastic + flake8

> Готовых snippets для некоторого ЯП (какой, напишу в комментариях)

UltiSnips, на гитхабе полно различных сниппетов для разных языков, ну и emmet еще

> Автоматическое форматирование кода под используемый код-style стандарт

для питона есть прекрасное дополнение github.com/hynek/vim-python-pep8-indent заменяет indent по умолчанию

> Интеграции с таск-трекером

этого действительно нет (а быть может и есть?)

Кстати вопрос для питонистов, сейчас мне не хватает в редакторе только одного: мне нужно, чтобы для импортов в файле, который я открываю автоматически срабатывал фолдинг. Может кто то с таким сталкивался? Так как для больших проектов это было бы очень удобно, бывают импорты на половину экрана.
создайте autocmd и там пропишите все, что вам надо.
А в это время другие энтузиасты делают NeoVim со скриптами на Lua и архитектурой специально под GUI.
Sign up to leave a comment.

Articles