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


22

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

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

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

Отже, моє запитання: чи існує спосіб, підтримуючи vim або плагін, підтримувати список відкритих в даний час буферів і вибирати / редагувати / закривати зі цього списку, всередині вікна, схожого на NERDTree?

Я розумію, що такий підхід може бути несумісним із способом виконання Vim , і якщо ви відчуваєте, що мені щось не вистачає про те, як керувати кількома файлами під час сеансу Vim, залиште коментар із пропозиціями!


Я також хочу створити список буферів нижче (або вище) панелі nerdtree. Я спробую пам’ятати, щоб оновити цю публікацію, якщо я знайду вдале рішення (але дякую, що все-таки
запитаєте

Відповіді:


7

Ви шукали в сховищі плагінів vim.org? Є кілька десятків плагінів для перемикання буфера, які ви можете вибрати, як BufferGator або SelectBuf . Крім того, більшість з них складені у приємному списку на вікі Vim .


Як ви нагадали в останній частині свого запитання, така система не на смак кожному.

Я ненавиджу, щоб усі ці меню, кнопки та списки того чи іншого були відкриті постійно: список відкритих буферів корисний лише тоді, коли вам потрібно перейти до іншого буфера, залишаючи такий список відкритим, мені здається марною тратою місця . Те ж саме можна застосувати і до надряджених ліній статусу.

Я використовую той самий плагін для швидкого перемикання між буферами та для швидкого дослідження файлової системи навколо файлу, який я зараз редагую. Після виклику ,f(файлів) або ,b(буферів) вікно зникає, коли я закінчу. Ідеально. Є й інші подібні плагіни , спробуйте їх усі, якщо вам подобається ця ідея.

EDIT

Я змушений додавати анімований GIF CtrlP в дію, перемикаючи буфери:

Перемикання буферів за допомогою CtrlP

ENDEDIT

Уродженець :sb <Tab>теж досить акуратний, але менш сексуальний. Він не підтримує нечітка відповідність , але вона має деякі великі переваги: він побудований і він працює , як :e <Tab>, :vs <Tab>і так далі.


Дякуємо за ваші пропозиції. Схоже, BufferGator і SelectBuf обидва, як мінімум, близькі до функціоналу, за яким я переживаю, хоча їм може знадобитися певне налаштування, щоб все покращити. Я, безумовно, ціную занепокоєння з приводу витрачання місця, але в моєму теперішньому випадку використання у мене є один екземпляр GVim, відкритий годинами одночасно з багатьма файлами, відкритими одночасно, перестрибуючи між ними за потребою. У цих умовах надзвичайно корисний постійний список буферів. Однак мені знадобиться трохи часу, щоб дізнатися про більш типові підходи Vim до управління буферами.
асфальт

Я уявляю, що ви працюєте на великому моніторі. Яку б систему ви не вибрали, вам все одно знадобиться: 1. перейти до буферного списку, 2. вибрати буфер, 3. натиснути клавішу, щоб перейти до нього, чи буферний список вже видно чи ні. Таким чином, використання буферного перемикача "на вимогу" настільки ж ефективно, як і збереження буферного списку відкритим, і це економить простір.
romainl

Я, безумовно, ціную це міркування, тому я не надто переймаюся можливістю того, що точна конфігурація, яку я тут описую, може бути неможливою. Єдиною головною перевагою постійного списку буферів є те, що потрібно 0 натискань клавіш, щоб перевірити, які буфери відкриті, інформацію, яку я вважаю цінною, а також мені дуже погано зберігати короткочасну пам'ять. (І так, я працюю на досить великому моніторі.)
асфальтується

@romainl, яку команду vimrc ви використовували для картографування ,bпошукових буферів за допомогою ctrlp?
снігопад

1
@snowbound, FWIW Я деякий час тому перестав використовувати CtrlP або будь-які інші подібні плагіни. У всякому разі, моя команда була nnoremap ,b :CtrlPBuffer<CR>.
romainl

5

Я настійно рекомендую MiniBufExplorer . Дивіться також альтернативу minibufexplorer?

Знімок екрана


Дякую за відповідь - я знайшов MiniBufExplorer, і, схоже, він надзвичайно хороший у тому, що він робить, але він не відповідає умовам, які я описав, як я хотів би керувати буферами. Якщо виявиться, що немає хорошого способу зробити те, що я намагаюся зробити, або я вирішу, що це не правильний спосіб зробити це, MBE досить високо в моєму списку, щоб спробувати далі.
асфальт

1
Єдина умова, яка не виконується - це список зліва. Я погоджуюся, MiniBufExplorerзнаходиться вгорі (там не витрачається стільки місця, скільки зліва). А може, я неправильно зрозумів ваші вимоги.
Марко

З моїм поточним налаштуванням, перелік буферів ліворуч, як зображено, - це фактично поліпшення використання простору, оскільки NERDTree відкритий у будь-який час, але не завжди є повною вертикаллю. Поділитися цим простором зі списком буфера було б непогано. Варто відзначити, що саме так я використовую GVim, і я б не хотів, щоб стійкий лівий стовпець був би якби я використовував Vim в консолі. Більшість моїх консольних застосувань Vim - це "відкрити файл, зробити швидке редагування, закрити vim"
asfallows

1

Існує спосіб зробити саме це, використовуючи плагін winmanager . У цьому скріншоті я поєдную і NERDTree, і MiniBufExpl (github: techlivezheng / vim-plugin-minibufexpl, остання фіксація atm 349a9fbb) плагіни на одному вертикальному розділенні і перемикаю його на F4. Теоретично це рішення повинно працювати для будь-якої іншої комбінації плагінів.

Приклад мого .vimrc

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

"{{{конфігурація winmanager
"зареєструвати плагіни
нехай g: NERDTree_title = 'Дерево NERD'
нехай g: MiniBufExpl_title = 'MiniBufExpl'

"встановити макет
нехай g: winManagerWindowLayout = 'NERDTree | MiniBufExpl'

"обробник для NERDTree
функція! NERDTree_Start ()
    exec 'NERDTree'
кінцева функція

"обробник для MiniBufExpl
функція! MiniBufExpl_Start ()
    exec 'MBEOpen'
кінцева функція

"відображення для переключення розбиття на F4
nmap <F4>: WMToggle
"}}} конфігурація winmanager

Проблеми:

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

Поведінка, яку я досяг, далеко не ідеальна, але це вдалий початок.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.