Я открываю несколько файлов в Vim, например, запустив
vim a/*.php
который открывает 23 файла.
Затем я редактирую и дважды запускаю следующее
:q
который закрывает все мои буферы.
Как в Vim закрыть только один буфер?
Я открываю несколько файлов в Vim, например, запустив
vim a/*.php
который открывает 23 файла.
Затем я редактирую и дважды запускаю следующее
:q
который закрывает все мои буферы.
Как в Vim закрыть только один буфер?
Предупреждение: «w
в bw
означает не запись, а стирание!»
Еще из руководств:
:bd
Выгрузить буфер [N] (по умолчанию: текущий буфер) и удалить его из списка буферов. Если буфер был изменен, это не сработает, если не указано [!], И в этом случае изменения будут потеряны. Файл не изменится.
Если вы знаете, что делаете, вы также можете использовать :bw
:bw
Как |: bdelete |, но на самом деле удалите буфер.
:bw
только в том случае, если вы знаете, что делаете, чего я не знаю, поэтому я думаю, что буду использовать :bd
.
- person jberryman; 23.06.2014
:bd
) также закрывает вкладку. Вы, вероятно, захотите :bd n .. [m]
или :n,mbd
для конкретных чисел или диапазона чисел, которые нужно закрыть, что вы можете сделать, не глядя на буферы.
- person JonnyRaa; 19.03.2015
w
является сокращением от write
команды согласно руководству Vim, кроме того, нет упоминания о каком-либо уничтожении. Описание команды (help write
) начинается с Записать весь буфер в текущий файл.
- person amn; 13.10.2016
:help bw
, вы увидите, что bw
означает стирание.
- person noark; 28.06.2017
w
в команде bw
означает wipeout, он не говорит о команде w
. Он поместил это предупреждение, чтобы люди не думали, что команда bw
означает запись в буфер (что не означает очистку буфера).
- person John; 24.08.2018
help bw
действительно переводит меня в совершенно не связанный с этим раздел, но help wipeout
работает так, как я ожидал.
- person amn; 24.08.2018
:bd
или :bw
в последнем открытом буфере, вместо этого он открывает новый буфер. В качестве обходного пути я пишу function! CloseOrQuit
, который использует len(getbufinfo({'buflisted':1}))
для проверки количества буферов, но это кажется неправильным.
- person John P; 06.10.2018
Если это не очевидно из предыдущих ответов:
: bd закроет текущий буфер. Если вы не хотите брать список буферов.
:bd
только закрывает буфер, тогда как (что бы это ни значило), тогда как :bw
также очищает все переменные и ДЕЙСТВИТЕЛЬНО удаляет их из ls
буфера.
- person RedX; 13.03.2013
Проверьте свой идентификатор буфера, используя: buffers
вы увидите там список буферов, например
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 ..: sb .. и т. Д.
Этот подход особенно полезен, когда установлена опция «скрытый» 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. Пожалуйста, не используйте вкладки вместо буферов; вкладки - это "макеты окон" Vim]
Может, перейти на вкладки?
vim -p a/*.php
открывает те же файлы во вкладках
gt
и gT
переключают вкладки вперед и назад
:q
закрывает только текущую вкладку
:qa
закрывает все и выходит
:tabo
закрывает все, кроме текущей вкладки
wildmenu
? Он похож на lustyjuggler (хотя и проще), но он встроен (что было хорошо для меня, потому что lustyjuggler нужен +ruby
, а vim по умолчанию для ubuntu oneiric отправляется -ruby
).
- person Nate; 27.04.2012
vim-nox
от Ubuntu поддерживает Ruby.
- person Leonid Shevtsov; 28.04.2012
Как насчет
vim -O a a
Таким образом, вы можете редактировать один файл слева и перемещаться по всему каталогу справа ... Просто мысль, а не решение ...
Если вы хотите закрыть буфер, не разрушая макет окна (текущий макет основан на разделениях), вы можете использовать подключаемый модуль, например до свидания. Исходя из этого, вы можете просто использовать
:Bdelete (instead of :bdelete)
:Bwipeout (instead of :bwipeout)
Или просто создайте сопоставление в своем .vimrc
для облегчения доступа, например
:nnoremap <Leader>q :Bdelete<CR>
- Закройте и удалите буфер.
- Показать другой файл в этом окне.
- Покажите пустой файл, если у вас нет других открытых файлов.
- Не оставляйте бесполезные буферы [без файла], если вы решите редактировать другой файл в этом окне.
- Работайте, даже если файл открыт в нескольких окнах.
- Хорошо работайте с различными обозревателями буфера и панелями вкладок.
В Vim есть две команды для закрытия буфера:
:bdelete
и:bwipeout
. Первый удаляет файл из списка буферов, очищает его параметры, переменные и сопоставления. Однако он остается в списке переходов, поэтомуCtrl-o
вернет вас и снова откроет файл. Если это не то, что вы хотите, используйте:bwipeout
или эквивалент Bbye:Bwipeout
там, где вы бы использовали:bdelete
.
Тем, кто использует плагин навигации по буферу или дереву, например 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
. Вы можете изменить эту функцию для интеграции с вашей собственной конфигурацией.
vim -o a/*.php
(или-O
, чтобы использовать вертикальные окна), и избегать навигации по буферу - это отличный метод только для нескольких файлов, но с 23 файлами у них будет только несколько строк. / столбцы каждый. - person Cascabel   schedule 13.08.2009