Есть ли какой-либо плагин/способ управления несколькими проектами в Vim?

Я всегда работаю над несколькими проектами одновременно. Разбивка количества файлов, которые у меня есть, выглядит следующим образом

  Project   |   Files
--------------------------
  Thesis         20
  Simulator      50
  Plots          30
  Graphs         30
  Website        500+

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

  • Разделить Windows. Я мог бы разделить vim на 5 окон, по одному для каждого проекта, но я мог бы также кодировать через отверстие. Я никогда не был поклонником разделенных окон, за исключением случаев, когда вы постоянно сравниваете и редактируете два связанных файла. Также я не считаю навигацию в двух измерениях такой же бесшовной, как в горизонтальном направлении.

  • вкладки. Вкладки, или, скорее, видоискатели, по-дурацски называемые вкладками, кажутся именно такими проблемами, но они не предоставляют ограничений для использования буферов. Например, если я нахожусь на моей вкладке Thesis, я хочу ориентироваться только на эти 20 буферов, а не на все 500+ связанных с ним буферов. Поскольку я сохраняю их как сеансы, это может потенциально привести к проблемам, если я случайно переключусь на буфер website на вкладке Thesis, выйдите, а после ввода у меня есть две вкладки website. Это еще более проблематично, потому что для каждой вкладки я установил локальные каталоги (:lcd).

  • Вкладки терминала. Использование вкладок "Терминал" гарантирует, что эти буферы на каждой вкладке остаются независимыми. Тем не менее, каждая сессия vim больше не может обмениваться информацией. Я не могу вытащить текст с одного терминала на другой (я полагаю, я мог бы заглянуть в регистр +). Я также больше не могу использовать :buffdo для всех буферов. Кроме того, мне нравится, что я могу сохранить все мои вкладки vim до одного сеанса.

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

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

РЕДАКТИРОВАТЬ. Я хочу выйти из вкладок в vim - это возможность более эффективно использовать их в качестве того, что они на самом деле: видовые экраны. Я хочу иметь одну вкладку исключительно для моего раздела Thesis. В этом разделе я изменю локальный каталог, чтобы его отразить. Кроме того, я хочу отфильтровать буферы в этой таблице только как подмножество всех буферов. Аналогично на вкладке "Симулятор" я хочу использовать его исключительно для своих файлов-симуляторов.

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

Ответ 1

Я нашел способ сделать это. Вкладки vim почти бесполезны. Вместо этого я использовал вкладки терминала Gnome.

  • глобальные регистры. Чтобы имитировать использование глобальных регистров, чтобы иметь возможность копировать вставки через разные экземпляры vim, 'pipe', системный буфер обмена и неназванный регистр вместе, добавляя строку set clipboard=unnamedplus в ваш .vimrc файл. Это приводит к копированию всех операций yank/delete... в системный буфер обмена. Оттуда другие экземпляры vim получат доступ к нему. Точно так же любая копия, вставляющая вас за пределы vim, теперь будет храниться в неназванном регистре.

  • Ярлыки вкладки терминала Gnome Ярлыки по умолчанию для перехода к следующей и предыдущей вкладкам: Ctrl Pg Up и Ctrl Pg Dn. Поскольку я использую Shift k и Shift j для своих следующих и предыдущих буферов, я сопоставил Ctrl k и Ctrl j, чтобы перейти к моим следующим и предыдущим вкладкам. Просто перейдите на терминал Gnome > Редактировать > Горячие клавиши

  • Вкладки терминала Gnome. Напишите оболочку script, чтобы запустить каждый экземпляр vim в качестве новой вкладки терминала. См. здесь инструкции

  • Экземпляры Vim Наконец, для каждого экземпляра vim сохраните файл сеанса :mksession fileName

Это не идеально (например, названные регистры не могут быть скопированы через терминалы), но это, на мой взгляд, гораздо более представительное представление того, что должен делать viewport (здесь называемые "вкладки" ).


EDIT Я действительно вернулся к использованию вкладок vim. Я узнал vim script и сопоставил свои ключи, поэтому Shift j и Shift k сопоставить предыдущие/следующие буферы и Ctrl j и Ctrl k отобразить предыдущие/следующие вкладки. Затем я загрузил tabname script, чтобы я мог установить значащие имена вкладок, а затем изменил создание сеансов vim для сохранения имен вкладок (см. здесь), затем переключился с gVim на Vim, чтобы я мог использовать полноэкранный режим. Это было долгий трудный путь, но я бы хотел подумать, что это того стоит.

Ответ 2

Я согласен с эхамбергом.

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

Вместо этого используйте один экземпляр Vim для каждого проекта. Если вам действительно нужно что-то поделиться, вы всегда можете использовать системный буфер обмена. Попробуйте set clipboard+=unnamedplus синхронизировать регистр по умолчанию Vim с системным буфером обмена.

Но мне интересно, рациональен ли ваш способ управления проектами:

  • В пункте 3 вы пишете: "Я также больше не могу использовать: buffdo для всех буферов". Почему вы используете команду, которая работает во всех открытых буферах через несколько разных проектов?

  • Есть ли у вас всерьез 500+ буферов одновременно? Я знаю, что Vim, возможно, справится с этим, но почему вы открываете много буферов? Я занимаюсь веб-разработкой для жизни, и я редко работаю над более чем дюжиной файлов в определенный день, даже на "больших" проектах.

Ответ 3

Плагин BufExplorer может группировать буферы по вкладке. Плагин CtrlP может повторно использовать буфер с другой вкладки.

Ответ 4

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

Я использую vim-rooter, который является простым плагином, который автоматически изменит рабочий каталог на корень проекта из открытого вами буфера, если в корне проекта есть .git файл. Он запускается только при открытии файлов с определенными расширениями, но этот список можно настроить. Работает с ctrlp и любым другим плагином.

Ответ 5

У меня такая же проблема в течение длительного времени, работая одновременно с несколькими проектами.

Чтобы частично решить эту проблему, я использовал этот плагин https://github.com/xolox/vim-session.

vim-session упрощает навигацию между сессиями, и в каждом сеансе у нас есть проект. После использования нескольких недель я стал расстроен, потому что каждый раз, когда вам нужно переключиться, он нуждается в всех изменениях текущих файлов сеанса.

Лучшее решение для меня теперь Spacemacs с режимом Vim. Мне очень нравится дух редактирования, который предлагает Vim, и опыт тот же, что и в Spacemacs + более эффективная обработка проекта + лучше git.