2016-09-29 2 views
0

Я работаю над растущим проектом с vim. Мне нравится, чтобы большинство файлов проекта открывались в том же сеансе. Однако, по мере роста проекта, у меня одновременно появляется слишком много файлов; переключение между файлами [*] начинает получать немного непродуктивно в 40+ файлах, потому что список слишком длинный (например, для 20 файлов этот способ навигации работает очень хорошо для меня).vim: несколько «сеансов» в одном экземпляре?

Есть ли способ разделить сеанс в нескольких «подсеансах» в одном экземпляре vim?

Как я себе представляю, каждый сеанс содержит, скажем, 20 файлов, и только перечисляет их с :ls и что я могу переключаться между ними в одном окне vim (обычно так же, как если бы я запускал несколько экземпляры vim в одной оболочке и переключаются между ними с Ctrl-Z; fg %X, просто не выходя из vim).

[*] Мне нравится перемещаться между файлами с :ls с последующим :bX (или непосредственно :bX в случае, если я запомнил номер буфера), наряду с :bp/:bn, и у меня всегда есть по крайней мере два раскола open, и этот рабочий процесс работает для меня очень хорошо, поэтому я не ищу более эффективных альтернатив :ls.

+0

В чем проблема, с которой вы столкнулись? В вашем вопросе вы говорите о том, что ваш текущий рабочий процесс «становится немного непродуктивным» (не объясняя, что это значит для вас), но в своем комментарии к ответу Люка вы говорите о размере файла сеанса. – jpaugh

+0

Кстати, если вы все еще сталкиваетесь с одной и той же проблемой, вы можете увидеть, есть ли ответ на [Vim beta] (https://vi.stackexchange.com/). – jpaugh

ответ

2

Я никогда не использую :ls. Однако я часто работаю над большими проектами, и я открываю (много) файлы из разных проектов (и я все еще могу скомпилировать то, что хочу, в режиме, который хочу (debug, release, ...), генерировать теги независимо для каждого проект, имеют разные стили кодирования и т. д.)

Ваш вопрос, похоже, касается «Как перейти от одного файла к другому». Я много расщепленные окна открыты одновременно, и я прыгаю от одного к другому с:

  • :sb, который поддерживает автодополнение по имени файла (уже открыт в буфере)
  • :sp **/filename*<tab> (когда он еще не открыт)
  • старый plugin of mine - другие обычно используют Unite, command-T или другие подобные плагины - объединить :sp и :sb в одну команду.
  • Теги. Интеграция меток по умолчанию (/ csope) по умолчанию уже прекрасна. Тем не менее, я разработал lh-tags, чтобы просто перемещать теги в мире перегруженных и переопределенных функций, как это имеет место на C++.

EDIT: Я только что нажал высоко экспериментальную функцию :Project <name> :ls в lh-vim-lib. Примечание: этот новый проект не предназначен для того, чтобы делать то, что вы ищете, но благодаря этому легко получить ограниченный :ls.

Чтобы использовать его, вам необходимо сначала зарегистрировать буферы в одном проекте. Здесь я рекомендую плагины, такие как local_vimrc, если каждый проект можно выделить как файлы под заданным каталогом. Для каждого корневого каталога поместить _vimrc_local.vim файл в нем, который будет содержать:

:let s:k_version = 1 
" Global definitions executed everytime we enter a file belonging to the project 
" This is where we set g:lobal_variables and options for project-unaware plugins. 
.... 

" Then the anti-reinclusion guards for buffer definitions 
if &cp || (exists("b:loaded__my_foobar_project_settings") 
     \ && (b:loaded__my_foobar_project_settings > s:k_version) 
     \ && !exists('g:force_reload__my_foobar_project_settings')) 
    finish 
endif 
let b:loaded__my_foobar_project_settings = s:k_version 
let s:cpo_save=&cpo 
set cpo&vim 

" HERE, we say the current buffer belongs to a project 
" solution 1 when we need more control 
:call lh#project#define(s:, {'name': 'YouProjectName'}) 
" OR solution 2 which is easier to manipulate (tab completion, ...) 
:Project --define YourProjectName 

Вы также можете иметь меньшую зернистость, если вы хотите (это то, что до сих пор плохо задокументированы).

Затем вы сможете ознакомиться со списком проектов с помощью :Project --list или проконсультироваться с буферами, связанными с данным проектом, с помощью :Project YouProjectName :ls.

+0

Танки для ваших предложений, я не знал о ': sb', который выглядит удобно. Однако вопрос заключается не столько в том, «как добраться из одного файла в другой»; ': ls', за которым следует': bX' (или непосредственно 'bX', как только я запомнил номер буфера) рядом с': bn'/': bp', для меня достаточно хорошо. Основная проблема заключается в том, что сеанс становится немного большим, и я бы хотел избежать использования нескольких экземпляров vim в разных tmux-окнах (хотя это, вероятно, будет способ пойти, если что-то похожее на то, что я описал в вопрос невозможно). – flotzilla

+1

Это то, что вам не нужно запоминать номера буфера, чтобы открыть буфер в текущем окне. ': sb' и': b' завершать вкладку поддержки на части в имени файла буфера. Нам действительно не нужно: ls' знать номера буфера, чтобы загрузить эти открытые буферы в текущем окне. –

+0

Иначе, в лучшем случае, есть вкладки, но все же все будет видно по:: ls' –

Смежные вопросы