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

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

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

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

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

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

3 ответа

Решение

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


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

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

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

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

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

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

EndEdit

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

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

Скриншот

Есть способ сделать это, используя плагин 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 : WMToggle
"}}} winmanager config

Проблемы:

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

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

Другие вопросы по тегам