Vim - динамический список открытых буферов в окне

23

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

Я использую NERDTree в GVim, и мне нравится идея поместить информацию в тонкое левое окно. Я собрал удобную диаграмму для того, как бы я хотел, чтобы моя среда выглядела

|--------|---------------------------------------|
|        |                                       | 
|        |                                       | 
|NERDTree|           Windows                     | 
|        |                                       | 
|        |                                       | 
|        |                                       | 
|--------|                                       |
|        |                                       | 
|        |                                       | 
|  List  |                                       | 
|   of   |                                       | 
|  Open  |                                       | 
| Buffers|                                       | 
|        |                                       | 
|        |                                       | 
|--------|---------------------------------------|

Итак, мой вопрос: есть ли vim-native или плагин-включенный способ поддерживать список открытых в данный момент буферов и выбирать / редактировать / закрывать из этого списка внутри окна, похожего на NERDTree?

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

asfallows
источник
Я также ищу список буферов ниже (или выше) панели nerdtree. Я постараюсь не забыть обновить этот пост, если найду хорошее решение (но все равно спасибо за вопрос)
Eric Drechsel

Ответы:

7

Вы искали хранилище плагинов vim.org? Есть десятки плагинов для переключения буфера на выбор, например, BufferGator или SelectBuf . Кроме того, большинство из них собраны в хороший список вики Vim .


Как вы упоминали в последней части вашего вопроса, такая система не всем по вкусу.

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

Я использую тот же плагин для быстрого переключения между буферами и быстрого изучения файловой системы вокруг файла, который я сейчас редактирую. Вызывается с ,f(файлы) или ,b(буферы), окно исчезает, когда я закончил. Отлично. Есть другие подобные плагины , попробуйте их все, если вам нравится эта идея.

РЕДАКТИРОВАТЬ

Я чувствую себя обязанным добавить анимированный GIF CtrlP в действии, переключая буферы:

Переключение буферов с помощью CtrlP

EndEdit

Натив :sb <Tab>тоже довольно опрятный, но менее сексуальный. Он не поддерживает нечеткое соответствие , но она имеет некоторые большие преимущества: он построен и он работает , как :e <Tab>, :vs <Tab>и так далее.

romainl
источник
Спасибо за ваши предложения. Похоже, что BufferGator и SelectBuf, по крайней мере, близки к той функциональности, которая мне нужна, хотя им, возможно, потребуется некоторая настройка, чтобы все заработало. Я определенно ценю беспокойство по поводу потери пространства, но в моем текущем сценарии использования у меня есть один экземпляр GVim, открытый по несколько часов за раз, с множеством открытых одновременно файлов и переключающихся между ними по мере необходимости. Для этих обстоятельств постоянный список буферов чрезвычайно полезен. Однако мне потребуется некоторое время, чтобы узнать о более типичных подходах Vim к управлению буферами.
asfallows
Я представляю, что вы работаете на большом мониторе. Какую бы систему вы ни выбрали, вам все равно нужно: 1. переключиться на список буферов, 2. выбрать буфер, 3. нажать клавишу, чтобы перейти к нему, независимо от того, виден ли уже буферный список или нет. Таким образом, использование переключателя буфера «по требованию» столь же эффективно, как и сохранение списка буферов открытым, и экономит место.
romainl
Я определенно ценю это рассуждение, поэтому я не слишком опасаюсь того, что точная конфигурация, которую я здесь описываю, может оказаться невозможной. Единственное существенное преимущество постоянного списка буферов состоит в том, что для проверки того, какие буферы открыты, требуется 0 нажатий клавиш, часть информации, которую я считаю полезной, а также очень плохо хранит кратковременную память. (И да, я работаю на довольно большом мониторе.)
asfallows
@romainl, какую команду vimrc вы использовали для отображения ,bв буферах поиска с помощью ctrlp?
заснеженный
1
@snowbound, FWIW Некоторое время назад я перестал использовать CtrlP или любые другие подобные плагины. Во всяком случае, моя команда была nnoremap ,b :CtrlPBuffer<CR>.
Ромен
5

Я очень рекомендую MiniBufExplorer . Смотрите также альтернативу минибуфэксплорер?

Скриншот

Marco
источник
Спасибо за ответ - я нашел MiniBufExplorer, и похоже, что он очень хорош в том, что он делает, но он не соответствует условиям, которые я описал для того, как я хотел бы управлять буферами. Если оказывается, что нет хорошего способа сделать то, что я пытаюсь сделать, или я решаю, что это не правильный способ, MBE довольно высоко в моем списке для вещей, чтобы попробовать дальше.
asfallows
1
Единственное условие, которое не выполняется, - это то, что список находится слева. Я согласен, MiniBufExplorerнаходится наверху (где он не тратит так много места, как слева). Или, может быть, я неправильно понял ваши требования.
Марко
При моей текущей настройке наличие списка буферов слева, как показано, на самом деле улучшает использование пространства, потому что NERDTree всегда открыт, но не всегда использует полную вертикаль. Разделение этого пространства со списком буферов было бы неплохо. Стоит отметить, что именно так я использую GVim, и я не хотел бы иметь постоянный левый столбец, если бы я использовал Vim в консоли. Большая часть моего консольного использования Vim - «открыть файл, быстро редактировать, закрыть vim»
asfallows
1

Есть способ сделать это, используя плагин winmanager . На этом скриншоте я объединяю плагины NERDTree и MiniBufExpl (github: techlivezheng / vim-plugin-minibufexpl, latest commit atm 349a9fbb) в одном вертикальном разделении и переключаю его с помощью F4. Теоретически это решение должно работать для любой другой комбинации плагинов.

Пример моего .vimrc

"{{{MiniBufExpl config
пусть g: miniBufExplVSplit = 20 "открывается по вертикали
let g: miniBufExplSplitToEdge = 0 "открыть относительно предыдущего окна (NERDTree)
"}}} Конфигурация MiniBufExpl

"{{{winmanager config
зарегистрировать плагины
let g: NERDTree_title = 'Дерево NERD'
let g: MiniBufExpl_title = 'MiniBufExpl'

"установить макет
let g: winManagerWindowLayout = 'NERDTree | MiniBufExpl'

"обработчик для NERDTree
функция! NERDTree_Start ()
    exec 'NERDTree'
EndFunction

обработчик для MiniBufExpl
функция! MiniBufExpl_Start ()
    exec 'MBEOpen'
EndFunction

"отображение, чтобы переключить разделение на F4
nmap <F4>: WMToggle
"}}} winmanager config

Проблемы:

  • NERDTree не использует буфер, который создает winmanager, а открывает сам по себе ...
  • ... поэтому буфер winmanager остается неиспользованным
  • MiniBufExpl не обновляется должным образом при переходе между буферами

Поведение, которого я достиг, далеко от совершенства, но это хорошее начало.

svlasov
источник