21

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

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

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

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

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

3 ответа3

6

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


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

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

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

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

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

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

EndEdit

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

5

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

Скриншот

1

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

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

" {{{ MiniBufExpl config
let g:miniBufExplVSplit = 20 " open in vertical
let g:miniBufExplSplitToEdge = 0 " open relative to previous window (NERDTree)
" }}} MiniBufExpl config

" {{{ winmanager config
" register the plugins
let g:NERDTree_title='NERD Tree'
let g:MiniBufExpl_title='MiniBufExpl'

" set the layout
let g:winManagerWindowLayout='NERDTree|MiniBufExpl'

" handler for NERDTree
function! NERDTree_Start()
    exec 'NERDTree'
endfunction

" handler for MiniBufExpl
function! MiniBufExpl_Start()
    exec 'MBEOpen'
endfunction

" mapping to toggle the split to F4
nmap &ltF4&gt :WMToggle
" }}} winmanager config

Проблемы:

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .