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 в действии, переключая буферы:

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 не обновляется должным образом при переходе между буферами
Поведение, которого я достиг, далеко от совершенства, но это хорошее начало.