Как закрыть один буфер (из многих) в Vim?

Я открываю несколько файлов в Vim, например, запуская

vim a/*.php

который открывает 23 файла.

Затем я сделаю свое редактирование и запустим следующие дважды

:q

который закрывает все мои буферы.

Как вы можете закрыть только один буфер в Vim?

Ответ 1

Предупреждение: "w не стоит писать, но для стирания!"

Больше из руководств:

: шд

Выгрузить буфер [N] (по умолчанию: текущий буфер) и удалить его из                 список буферов. Если буфер был изменен, это не сработает,                 если указано [!], и в этом случае изменения потерял.                 Файл остается незатронутым.

Если вы знаете, что делаете, вы также можете использовать: bw

: м.т.

Как и:: bdelete |, но на самом деле удалить буфер.

Ответ 2

Если это не стало очевидным из предыдущих ответов:

: bd закроет текущий буфер. Если вы не хотите захватывать список буферов.

Ответ 3

Проверьте свой идентификатор буфера, используя : буферы

вы увидите список буферов там вроде

1  a.php
2  b.php
3  c.php

если вы хотите удалить b.php из буфера

:2bw

если вы хотите удалить/закрыть все из буферов

:1,3bw

Ответ 4

Вместо того, чтобы просматривать вывод команды: ls и удалять (выгрузить, стереть..) буфер, указав его номер, я считаю, что использование имен файлов часто более эффективно.

Например, после того, как я открыл несколько файлов .txt, чтобы обновить мои воспоминания о какой-то тонкой точке. скопируйте и вставьте несколько строк текста, которые будут использоваться в качестве шаблона, и т.д. Я бы набрал следующее:

:bd txt <Tab>

Обратите внимание, что строка соответствия не должна находиться в начале имени файла.

Приведенный выше список имен файлов, которые соответствуют "txt" в нижней части экрана, и сохраняет команду: bd, которую я первоначально напечатал нетронутой, готов к завершению.

Вот пример:

doc1.txt doc2.txt
:bd txt 

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

:bd doc1.txt

Если я хочу избавиться от этого конкретного буфера, мне просто нужно нажать Enter.

И если буфер, который я хочу удалить, является вторым (третьим и т.д.) совпадением, мне нужно только нажать клавишу Tab, чтобы сделать мой: bd командный цикл через список совпадений.

Естественно, этот метод также можно использовать для переключения на заданный буфер с помощью таких команд, как: b..: sb.. и т.д.

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

Чтобы максимально использовать эту функцию, лучше всего прочитать следующий файл справки Vim и соответствующим образом настроить поведение командной строки Tab, чтобы он наилучшим образом соответствовал вашему рабочему процессу:

:help wildmode

Поведение, описанное выше, приводит к следующему параметру, который я выбрал для согласования ради эмулирования завершения bash:

:set wildmode=list:longest,full

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

Ответ 5

Использование:

  • :ls - для отображения буферов
  • :bd#n - закрыть буфер, где #n - номер буфера (используйте ls для его получения)

Примеры:

  • для удаления буфера 2:

    :bd2
    

Ответ 6

Вы также можете отображать следующую и предыдущую функциональные клавиши, делая циклическое перемещение по буферам

map <F2> :bprevious<CR>
map <F3> :bnext<CR>

из моего vimrc

Ответ 7

Как насчет

vim -O a a

Таким образом, вы можете редактировать один файл слева и перемещаться по всему директорию справа от вас. Просто мысль, а не решение...

Ответ 8

[EDIT: это было глупое предложение с того времени, когда я не очень хорошо знал Вима. Не используйте вкладки вместо буферов; вкладки Vim "макеты окон" ]

Может быть, переключиться на использование вкладок?

vim -p a/*.php открывает те же файлы на вкладках

gt и gt переключайте вкладки назад и вперед

:q закрывает только текущую вкладку

:qa закрывает все и выходит

:tabo закрывает все, кроме текущей вкладки

Ответ 9

Те, кто использует буферный или древовидный плагин, такие как Buffergator или NERDTree, должны будут переключать эти расщепления до уничтожения текущего буфера, иначе вы отправите свои расколы в wonkyville

Я использую:

"" Buffer Navigation                                                                                                                                                                                        
" Toggle left sidebar: NERDTree and BufferGator                                                                                                                                                             
fu! UiToggle()                                                                                                                                                                                              
  let b = bufnr("%")                                                                                                                                                                                        
  execute "NERDTreeToggle | BuffergatorToggle"                                                                                                                                                              
  execute ( bufwinnr(b) . "wincmd w" )                                                                                                                                                                      
  execute ":set number!"                                                                                                                                                                                    
endf                                                                                                                                                                                                        
map  <silent> <Leader>w  <esc>:call UiToggle()<cr>   

Где "NERDTreeToggle" в этом списке совпадает с типом :NERDTreeToggle. Вы можете изменить эту функцию для интеграции с вашей собственной конфигурацией.