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



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

vim a/*.php

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

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

:q

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

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

115   9  

9 ответов:

слово предостережения: "w не означает писать, но для wipeout!"

еще из руководств:

:bd

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

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

:bw

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

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

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

проверьте свой идентификатор буфера с помощью :буферы

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

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

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

:2bw

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

:1,3bw

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

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

:bd txt <Tab>

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

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

вот пример:

doc1.txt doc2.txt
:bd txt 

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

:bd doc1.txt

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

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

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

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

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

:help wildmode

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

:set wildmode=list:longest,full

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

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

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

примеры:

  • удалить буфер 2:

    :bd2
    

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

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

от моего vimrc

как о

vim -O a a

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

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

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

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

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

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

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

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

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

    Ничего не найдено.

Добавить ответ:
Отменить.