Ни одна их этих команд не закрывает буфер. Мне был нужен способ закрывать буферы в процессе работы не выходя из Vim. Но при этом более универсальный чем :BW(который закрывает буфер но не закрывает окно).
Таким образом пока у меня:
— Много буферов — закрываются буферы. (по :BW)
— Много окон, один буфер — закрываются окна. (по :c)
— Один буфер, одно окно — закрываем, буфер, открываем пустой буфер. (по :bw)
— Одно окно, пустой буфер — закрываем Vim(по :q)
Теперь я все делаю одной командой.
Сходное поведение вы увидите например в Sublime Text если у вас две колонки вкладок и вы начинаете нажимать Ctrl-W.
Пожалуй Вы правы, написано непонятно. Надо так — «Vim имеет множество команд для закрытия окон, буферов, и самого себя, но чего он не умеет так это закрывать окна, буферы и себя с помощью одной команды». Как Вы думаете, так лучше? Если да, сейчас исправлю.
Советую использовать вот этот вариант. Он лишен нескольких неприятных багов оригинального плагина. Вот мои настройки его внешнего вида(вставить в .vimrc;-) ), это значительно улучшит информативность:
" MiniBufExpl Colors
hi MBEVisibleActive guifg=#A6DB29 guibg=fg
hi MBEVisibleChangedActive guifg=#F1266F guibg=fg
hi MBEVisibleChanged guifg=#F1266F guibg=fg cterm=bold gui=bold
hi MBEVisibleNormal guifg=#5DC2D6 guibg=fg cterm=bold gui=bold
hi MBEChanged guifg=#CD5907 guibg=fg cterm=italic gui=italic
hi MBENormal guifg=#808080 guibg=fg cterm=italic gui=italic
Либо вы не прочитали статью, либо я и правда отвратительно пояснил чего же я пытался добиться(и добился). Но «сохранить все и выйти», это не то что делает мой мини-плагин. Кроме того синоним :wqa — :xa, ах да — :xa сохраняет только измененные файлы, а :wqa — абсолютно все
Я думаю это дело вкуса. Когда я использовал табы как Вы, у меня постоянно возникали какие-то мелкие неприятности, то перед выходом из Vim оказывается что у меня куча не сохраненных файлов, про которые я уже и забыл и которые просто не отображались, то еще какая-то назойливая мелочь. Меня такие вещи дико раздражают. Да и окна от таба к табу разные, тоже не удобно. Используя MiniBufExplorer я получаю не менее функциональные вкладки чем у других редакторов и при этом я точно знаю какие файлы у меня открыты, какие из них имеют не сохраненные изменения, всегда вижу одни и теже окна и т.д. Вообщем я полностью контролирую ситуацию!
Вы в любом случае используете буферы, любой открытый в Vim файл помещается в буфер. Другое дело, что Vim в отличии от большинства редакторов использует табы не по принципу «один файл, один таб», в Vim табы используются как контейнеры для окон(сплитов) и список буферов у всех табов общий.
Если Вы посмотрите на «алгоритм», то увидите что если у Вас открыто более одного буфера, то разница по сравнению с :bd, только в том, что окно не закрывается(да и то это достигается с помощью плагина bufkill). Но если у Вас открыт один буфер в нескольких окнах, то закрываются только окна, буфер остается.
Возможно я погорячился и данные премудрости нужны только мне. Но мне так и правда намного удобнее!
Это и не проблема вовсе, просто «свистелки, перделки» которые облегчают мне жизнь.
Честно говоря, я затрудняюсь ответить лучше чем я это сделал в статье, если Вам не сложно вы могли бы попробовать мой вариант и посмотреть в чем разница. Благо засунуть функцию в vimrc и сделать на нее меппинг не сложно. Буду рад узнать ваше мнение.
Для навигации по файлам я использую плагин MiniBufExplorer. На основе списка открытых буферов он создает подобие табов, таким образом если я хочу закрыть файл и не видеть его в MiniBufExplorer, мне необходимо не просто скрыть буфер или закрыть окно с буфером, а удалить буфер полностью(что и делают команды :bw, :bd и тд.). :q делает текущий буфер невидимым и если есть не сохраненные буферы — покажет в окне следующий из них. Если открыто несколько окон :q — просто закроет текущее окно, буфер останется нетронутым, а если окно одно и все буферы сохранены — закроет Vim
Нет. :xa — закрывает буферы, сохраняет изменения и закрывает Vim. Мое же решение касается закрытия файлов в открытом Vim. По сути это «умная» замена для :bw, :BW и :q, по крайней мере я теперь закрываю файлы и окна намного быстрее.
Таким образом пока у меня:
— Много буферов — закрываются буферы. (по :BW)
— Много окон, один буфер — закрываются окна. (по :c)
— Один буфер, одно окно — закрываем, буфер, открываем пустой буфер. (по :bw)
— Одно окно, пустой буфер — закрываем Vim(по :q)
Теперь я все делаю одной командой.
Сходное поведение вы увидите например в Sublime Text если у вас две колонки вкладок и вы начинаете нажимать Ctrl-W.
Возможно я погорячился и данные премудрости нужны только мне. Но мне так и правда намного удобнее!
Честно говоря, я затрудняюсь ответить лучше чем я это сделал в статье, если Вам не сложно вы могли бы попробовать мой вариант и посмотреть в чем разница. Благо засунуть функцию в vimrc и сделать на нее меппинг не сложно. Буду рад узнать ваше мнение.
:q делает текущий буфер невидимым и если есть не сохраненные буферы — покажет в окне следующий из них. Если открыто несколько окон :q — просто закроет текущее окно, буфер останется нетронутым, а если окно одно и все буферы сохранены — закроет Vim
А у ZZ поведение такое же как и у :wq.