Просто поместите его в свой .vim/pluginкаталог и затем используйте :BufOnlyкоманду, чтобы закрыть все буферы, кроме активного. Вы также можете отобразить это в другом месте, где вам нравится .vimrc.
Возможно, вы захотите закрыть NERDTree перед этим, чтобы bdкоманда не закрывала сам vim; nnoremap <silent> <leader>c :NERDTreeClose<bar>bufdo bd<CR>,
Иварают
11
Документация предупреждает, что аргумент :bufdo«не должен удалять буферы или добавлять буферы в список буферов». Так что, если это решение работает, оно работает случайно ... и часто у меня не работает (переключается на другой буфер).
Glts
10
Это закрывает все буферы для меня, а это не то, что задают вопросы. (MacVim версия 8.0.1207)
Майкл Леонард
1
Эта команда закрывает все буферы. Как я могу оставить текущий открытый?
Это хороший ответ. Это заставляет BufOnly чувствовать себя немного излишним (я имею в виду, целый плагин?), Если вы не используете функцию передачи аргументов в BufOnly. Все, что я действительно хочу сделать, это:%bd|e#
shmup
42
@jorgeh %bd= удалить все буферы. e#= открыть последний буфер для редактирования. Труба между ними просто выполняет одну команду за другой.
OldTimeGuitarGuy
20
@Jared Вы можете использовать, %bd|e#|bd#чтобы удалить [No Name]созданный буфер.
кшеной
12
Чудесно. Тогда здесь у вас есть единственная вещь, для которой я когда-либо использовал плагин BufOnly, отобранный для одной команды:command! BufOnly silent! execute "%bd|e#|bd#"
shmup
4
@ Финн, тебе нужно сбежать |:map <leader>o :%bd\|e#<cr>
Халил Озгюр,
57
Если вам плевать на текущий, проще сделать что-то вроде (сценарий не нужен):
Я столкнулся с некоторыми проблемами при использовании этой команды, когда NERDTree включен. Я рекомендую использовать плагин BufOnly.vim, как упомянуто @VoY.
моэбдол
1
Я сделал следующее сопоставление, которое объясняет удаление буфера NERDTree:nnoremap <leader>bd :%bd | NERDTree<cr>
Uri
5
Я использовал это в течение долгого времени, но теперь я получаю, E16: Invalid rangeпотому что некоторые из буферов в диапазоне фактически не существуют. До недавнего времени это игнорировалось.
Джон
3
@Jon Проверьте, :lsчтобы увидеть самый большой буфер, который у вас есть на самом деле, и установите для него диапазон (т. Е. Если ваш самый высокий буфер равен 22, тогда :1,22bd). Я получил ту же ошибку, пока я не сделал это.
Nairou
51
я сделаю это
:w | %bd | e#
Мой любимый, если я просто хочу, чтобы мой текущий буфер открывал и закрывал все остальные.
Как это работает: сначала запишите изменения в текущем буфере, затем закройте все открытые буферы, затем снова откройте буфер, в котором я был в данный момент. В Vim |цепочки выполнения команд вместе. Если ваш буфер обновлен, вышеприведенное может быть сокращено до:%bd | e#
В основном работает нормально. но иногда %не может работать как весь селектор. Можете ли вы угадать что-нибудь?
Jinyoung Ким
@JinyoungKim (из [1]) В команде ":% bd" диапазон '%' будет заменен номерами начальной и конечной строк в текущем буфере. Вместо использования «%» в качестве диапазона, вы должны указать числа для диапазона. Например, чтобы удалить все буферы, вы можете использовать команду ": 1,9999bd" [1] vimdoc.sourceforge.net/cgi-bin/vimfaq2html3.pl#8.8
iamnotsam
Я только что проверил документ. Итак, диапазон '%' зависит от количества текущих строк файла?
Jinyoung Ким
2
Я нашел встроенную функцию, bufnr("$")которая возвращает последний номер буфера. но я понятия не имею, интерполировать в строку, когда я использую, как это :1,bufnr("$")bd. Может быть .. лучшее решение будет :1,9999bd.
Jinyoung Ким
2
:help :bdпоказывает :%bdelete " delete all buffers. Так %что именно то, что вы хотите. Я использую вариант вашего решения: :%bd<CR><C-O>:bd#<CR>это удалит все буферы, затем используйте, <C-O>чтобы восстановить позицию в текущем файле, затем :bd#удалить неиспользованный буфер. Это закроет все буферы и оставит вас в том же месте в файле.
Алехандро
26
Опираясь на ответ juananruiz.
Сделайте небольшое изменение в буфере, который вы хотите сохранить, затем
:1,1000bd
Команда bd(удаление буфера) не удалит буферы с несохраненными изменениями. Таким образом, вы можете сохранить текущий (измененный) файл в списке буферов.
Изменить: Обратите внимание, что это также удалит ваш NERDTreeBuffer. Вы можете получить его обратно: NERDTree
Я заметил, что при возобновлении сеансов vim, которые восстанавливают буферы, я больше не мог удалять буферы, используя описанное выше. Вместо этого я должен был использовать:%bd|e#|bd#
shmup
Лучшее решение. Я добавил команду, чтобы открыть NERDTreenmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>:NERDTree<CR>
Вот что я делаю. Поэтому мне нравится сохранять свою позицию курсора после удаления всех буферов, и большинство решений выше просто игнорирует этот факт. Я также думаю, что переназначить команду лучше, чем вводить ее, поэтому здесь я использую, <leader>bdчтобы удалить все буферы и вернуться к исходной позиции курсора.
noremap <leader>bd :%bd\|e#\|bd#<cr>\|'"
%bd = удалить все буферы.
e# = открыть последний буфер для редактирования (это буфер, над которым я работаю).
bd#удалить буфер [Без имени], который создается при использовании %bd.
Труба между ними просто выполняет одну команду за другой. Вы должны избежать этого, используя\|
У вас действительно нет причин иметь bdqотображение, которое закрывает все буферы и выходит из vim :q!, когда вместо этого вы можете просто использовать :qa!. Если только я не пропускаю что-то
Ответы:
Вы можете использовать этот скрипт с vim.org:
http://www.vim.org/scripts/script.php?script_id=1071
Просто поместите его в свой
.vim/plugin
каталог и затем используйте:BufOnly
команду, чтобы закрыть все буферы, кроме активного. Вы также можете отобразить это в другом месте, где вам нравится.vimrc
.Источник на Github (через зеркало vim-scripts): https://github.com/vim-scripts/BufOnly.vim/blob/master/plugin/BufOnly.vim
источник
Попробуй это
bufdo запускает команду для всех буферов
http://vim.wikia.com/wiki/Run_a_command_in_multiple_buffers
источник
bd
команда не закрывала сам vim;nnoremap <silent> <leader>c :NERDTreeClose<bar>bufdo bd<CR>
,:bufdo
«не должен удалять буферы или добавлять буферы в список буферов». Так что, если это решение работает, оно работает случайно ... и часто у меня не работает (переключается на другой буфер).Я смог сделать это довольно легко, как это:
источник
:%bd|e#
%bd
= удалить все буферы.e#
= открыть последний буфер для редактирования. Труба между ними просто выполняет одну команду за другой.%bd|e#|bd#
чтобы удалить[No Name]
созданный буфер.command! BufOnly silent! execute "%bd|e#|bd#"
|
:map <leader>o :%bd\|e#<cr>
Если вам плевать на текущий, проще сделать что-то вроде (сценарий не нужен):
источник
nnoremap <leader>bd :%bd | NERDTree<cr>
E16: Invalid range
потому что некоторые из буферов в диапазоне фактически не существуют. До недавнего времени это игнорировалось.:ls
чтобы увидеть самый большой буфер, который у вас есть на самом деле, и установите для него диапазон (т. Е. Если ваш самый высокий буфер равен 22, тогда:1,22bd
). Я получил ту же ошибку, пока я не сделал это.я сделаю это
Мой любимый, если я просто хочу, чтобы мой текущий буфер открывал и закрывал все остальные.
Как это работает: сначала запишите изменения в текущем буфере, затем закройте все открытые буферы, затем снова откройте буфер, в котором я был в данный момент. В Vim
|
цепочки выполнения команд вместе. Если ваш буфер обновлен, вышеприведенное может быть сокращено до:%bd | e#
источник
%
не может работать как весь селектор. Можете ли вы угадать что-нибудь?bufnr("$")
которая возвращает последний номер буфера. но я понятия не имею, интерполировать в строку, когда я использую, как это:1,bufnr("$")bd
. Может быть .. лучшее решение будет:1,9999bd
.:help :bd
показывает:%bdelete " delete all buffers
. Так%
что именно то, что вы хотите. Я использую вариант вашего решения::%bd<CR><C-O>:bd#<CR>
это удалит все буферы, затем используйте,<C-O>
чтобы восстановить позицию в текущем файле, затем:bd#
удалить неиспользованный буфер. Это закроет все буферы и оставит вас в том же месте в файле.Опираясь на ответ juananruiz.
Сделайте небольшое изменение в буфере, который вы хотите сохранить, затем
:1,1000bd
Команда
bd
(удаление буфера) не удалит буферы с несохраненными изменениями. Таким образом, вы можете сохранить текущий (измененный) файл в списке буферов.Изменить: Обратите внимание, что это также удалит ваш NERDTreeBuffer. Вы можете получить его обратно: NERDTree
источник
set nohidden
чтобы быть установленным?Используя
и
источник
Закрытие всех открытых буферов:
Закрытие всех открытых буферов, кроме текущего :
Добавьте эту функцию
.vimrc
и вызовите ее используя:call CloseAllBuffersButCurrent()
.Удобная карта:
источник
:%bd|e#|bd#
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>:NERDTree<CR>
Я положил это в мой файл .vimrc
тогда вы
leader + ca
(закройте все) закроете все буферы, кроме текущего.Что это делает
: w - сохранить текущий буфер
% bd - закрыть все буферы
e # - открыть последний отредактированный файл
bd # - закрыть безымянный буфер
источник
Есть плагин, который делает именно это и немного больше!
Проверьте close-buffers.vim
источник
Вот что я делаю. Поэтому мне нравится сохранять свою позицию курсора после удаления всех буферов, и большинство решений выше просто игнорирует этот факт. Я также думаю, что переназначить команду лучше, чем вводить ее, поэтому здесь я использую,
<leader>bd
чтобы удалить все буферы и вернуться к исходной позиции курсора.%bd
= удалить все буферы.e#
= открыть последний буфер для редактирования (это буфер, над которым я работаю).bd#
удалить буфер [Без имени], который создается при использовании%bd
.Труба между ними просто выполняет одну команду за другой. Вы должны избежать этого, используя
\|
'"
= сохранить мою позицию курсора.источник
Мне нравится
1,100bd
( предложенный juananruiz ), который, кажется, работает для меня.Я добавил
quit!
в свое отображение, чтобы дать мнеЭто убивает все буферы и отключает Vim, что я и искал в основном.
источник
bdq
отображение, которое закрывает все буферы и выходит из vim:q!
, когда вместо этого вы можете просто использовать:qa!
. Если только я не пропускаю что-тоКак насчет просто:
(спасибо https://thoughtbot.com/blog/vim-splits-move-faster-and-more-naturally )
источник