Я открываю несколько файлов в Vim, например, запустив
vim a/*.php
который открывает 23 файла.
Затем я делаю правку и запускаю следующее дважды
:q
который закрывает все мои буферы.
Как вы можете закрыть только один буфер в Vim?
Я открываю несколько файлов в Vim, например, запустив
vim a/*.php
который открывает 23 файла.
Затем я делаю правку и запускаю следующее дважды
:q
который закрывает все мои буферы.
Как вы можете закрыть только один буфер в Vim?
Ответы:
Предостережение: «w в bw означает не запись, а уничтожение!»
Больше из руководств:
: шд
Выгрузите буфер [N] (по умолчанию: текущий буфер) и удалите его из списка буферов. Если буфер был изменен, произойдет сбой, если только не указано [!], И в этом случае изменения теряются. Файл остается без изменений.
Если вы знаете, что делаете, вы также можете использовать: bw
: м.т.
Как |: bdelete |, но действительно удалите буфер.
:bw
если «ты знаешь, что делаешь», а я нет, поэтому, думаю, я буду использовать :bd
.
:bd
) также закрывает вкладку. То, что вы, вероятно, хотите, :bd n .. [m]
или :n,mbd
для конкретных чисел или диапазона чисел, чтобы закрыть, что вы можете сделать, не глядя на буферы
w
сокращение от write
команды в соответствии с руководством Vim, кроме того, нет никакого упоминания о каком-либо "уничтожении". Описание команды ( help write
) начинается с «Записать весь буфер в текущий файл».
w
в bw
команде означает уничтожение, он не говорит о w
команде. Он поместил это предупреждение, чтобы люди не думали, что bw
команда означает запись в буфер (что не означает удаление буфера).
Если это не стало очевидным из предыдущих ответов:
: bd закроет текущий буфер. Если вы не хотите захватить список буферов.
:bd
только закрывает буфер, тогда как (что бы это ни значило), тогда как :bw
также очищает все переменные и ДЕЙСТВИТЕЛЬНО удаляет его из ls
буфера.
Проверьте свой идентификатор буфера, используя: 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, чтобы команда my: bd перебирала список совпадений.
Естественно, этот метод также можно использовать для переключения на данный буфер с помощью таких команд, как: b ..: sb .. и т. Д.
Этот подход особенно полезен, когда установлена опция «скрытый» Vim, потому что список буферов может быстро стать достаточно большим, охватывая несколько экранов, и затрудняя поиск нужного буфера.
Чтобы максимально использовать эту функцию, возможно, лучше прочитать следующий файл справки Vim и соответствующим образом настроить поведение завершения командной строки Tab, чтобы оно лучше подходило вашему рабочему процессу:
:help wildmode
Поведение, которое я описал выше, вытекает из следующего параметра, который я выбрал для согласованности, чтобы эмулировать завершение bash:
:set wildmode=list:longest,full
В отличие от использования номеров буферов, заслуга этого подхода заключается в том, что я обычно помню, по крайней мере, часть данного имени файла, позволяя мне напрямую ориентироваться на буфер, вместо того, чтобы сначала искать его номер с помощью команды: ls.
[РЕДАКТИРОВАТЬ: это было глупое предложение от времени, когда я не знал Vim достаточно хорошо. Пожалуйста, не используйте вкладки вместо буферов; Вкладки - это «макеты окон» Vim]
Может быть, переключиться на использование вкладок?
vim -p a/*.php
открывает те же файлы во вкладках
gt
и gT
переключать вкладки вперед и назад
:q
закрывает только текущую вкладку
:qa
закрывает все и выходит
:tabo
закрывает все кроме текущей вкладки
vim-nox
пакет от Ubuntu имеет поддержку Ruby.
Тем, кто использует плагин для буферизации или древовидной навигации, например, 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
. Вы можете изменить эту функцию для интеграции с вашей собственной конфигурацией.
Если вы хотите закрыть буфер без разрушения макета окна (текущий макет, основанный на разделениях), вы можете использовать плагин, такой как bbye . Исходя из этого, вы можете просто использовать
:Bdelete (instead of :bdelete)
:Bwipeout (instead of :bwipeout)
Или просто создайте карту .vimrc
для более простого доступа, например
:nnoremap <Leader>q :Bdelete<CR>
Из документации плагина :
- Закройте и удалите буфер.
- Показать другой файл в этом окне.
- Показать пустой файл, если у вас нет других открытых файлов.
- Не оставляйте бесполезные буферы [без файла], если вы решите отредактировать другой файл в этом окне.
- Работать, даже если файл открыт в нескольких окнах.
- Работайте хорошо с различными исследователями буфера и панелями вкладок.
Из документации плагина :
Vim имеет две команды для закрытия буфера:
:bdelete
и:bwipeout
. Первый удаляет файл из списка буферов, очищает его параметры, переменные и сопоставления. Тем не менее, он остается в списке переходов, поэтомуCtrl-o
возвращает вас и снова открывает файл. Если это не то, что вы хотите, используйте:bwipeout
или Bbye эквивалент,:Bwipeout
где вы бы использовали:bdelete
.
vim -o a/*.php
(или-O
использовать вертикальные окна), и избегать навигации по буферу - это отличный метод только для нескольких файлов, но с 23 файлами у них будет всего несколько строк / столбцов каждый.