Обратите внимание, что вы можете открывать файлы в отдельных окнах Vim, используя vim -o a/*.php(или -Oиспользовать вертикальные окна), и избегать навигации по буферу - это отличный метод только для нескольких файлов, но с 23 файлами у них будет всего несколько строк / столбцов каждый.
Каскабель
1
@Jefromi: Спасибо, что указали на это! Я никогда раньше не использовал опцию -o.
Лео Леопольд Герц 준영
На тему оконных расколов. Если вы уже находитесь в Vim и хотите открыть другой файл в split: esp для горизонтального: evsp для вертикального.
Lanzafame
Ответы:
560
Предостережение: «w в bw означает не запись, а уничтожение!»
Больше из руководств:
: шд
Выгрузите буфер [N] (по умолчанию: текущий буфер) и удалите его из списка буферов. Если буфер был изменен, произойдет сбой, если только не указано [!], И в этом случае изменения теряются. Файл остается без изменений.
Если вы знаете, что делаете, вы также можете использовать: bw
Также есть возможность сделать ': M, Nbd', чтобы закрыть номера буферов от M до N. Или ': bd N1 N2 ...', где N # - номер буфера
заснеженный
61
В руководстве сказано, что нужно использовать только, :bwесли «ты знаешь, что делаешь», а я нет, поэтому, думаю, я буду использовать :bd.
jberryman
1
Сначала это меня смутило - я открывал новую вкладку, чтобы закрыть буферы ... но закрытие буфера на вкладке (с использованием прямой :bd) также закрывает вкладку. То, что вы, вероятно, хотите, :bd n .. [m]или :n,mbdдля конкретных чисел или диапазона чисел, чтобы закрыть, что вы можете сделать, не глядя на буферы
JonnyRaa
6
wсокращение от writeкоманды в соответствии с руководством Vim, кроме того, нет никакого упоминания о каком-либо "уничтожении". Описание команды ( help write) начинается с «Записать весь буфер в текущий файл».
атп
3
@amn Я тоже запутался, но он имел в виду, что wв bwкоманде означает уничтожение, он не говорит о wкоманде. Он поместил это предупреждение, чтобы люди не думали, что bwкоманда означает запись в буфер (что не означает удаление буфера).
Джон
351
Если это не стало очевидным из предыдущих ответов:
: bd закроет текущий буфер. Если вы не хотите захватить список буферов.
До того, как найти: bd, для меня никогда не было никакого смысла, что у людей не было проблем с выполнением: ls -> сканирования номера документа -> выгрузки буфера по номеру. Люди действительно находят это эффективным?
Свен
3
@svend для диапазона буферов, конечно, но для одиночного a: bd, вероятно, более эффективен.
короткий путь для проверки идентификатора буфера: 2 CTRL-G
заснеженный
43
Вместо того, чтобы просматривать выходные данные команды: 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]
Может быть, переключиться на использование вкладок?
Это был отличный пост - это вдохновило меня копать еще глубже - вы смотрели wildmenu? Он похож на lustyjuggler (хотя и проще), но он встроен (что было хорошо для меня, потому что нужен lustyjuggler +ruby, и vim по умолчанию для кораблей ubuntu oneiric -ruby).
Nate
@Nate: да, я использую wildmenu для открытия файлов, но когда в проекте много файлов, он просто не масштабируется. Также vim-noxпакет от Ubuntu имеет поддержку Ruby.
Леонид Шевцов
1
Тем, кто использует плагин для буферизации или древовидной навигации, например, 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или :bwipeout. Смотри мой ответ .
Вольфсон
0
Закрыть буфер без закрытия окна
Если вы хотите закрыть буфер без разрушения макета окна (текущий макет, основанный на разделениях), вы можете использовать плагин, такой как bbye . Исходя из этого, вы можете просто использовать
:Bdelete (instead of :bdelete)
:Bwipeout (instead of :bwipeout)
Или просто создайте карту .vimrcдля более простого доступа, например
Vim имеет две команды для закрытия буфера: :bdeleteи :bwipeout. Первый удаляет файл из списка буферов, очищает его параметры, переменные и сопоставления. Тем не менее, он остается в списке переходов, поэтому Ctrl-oвозвращает вас и снова открывает файл. Если это не то, что вы хотите, используйте :bwipeoutили Bbye эквивалент, :Bwipeoutгде вы бы использовали :bdelete.
vim -o a/*.php
(или-O
использовать вертикальные окна), и избегать навигации по буферу - это отличный метод только для нескольких файлов, но с 23 файлами у них будет всего несколько строк / столбцов каждый.Ответы:
Предостережение: «w в bw означает не запись, а уничтожение!»
Больше из руководств:
: шд
Если вы знаете, что делаете, вы также можете использовать: bw
: м.т.
источник
:bw
если «ты знаешь, что делаешь», а я нет, поэтому, думаю, я буду использовать:bd
.:bd
) также закрывает вкладку. То, что вы, вероятно, хотите,:bd n .. [m]
или:n,mbd
для конкретных чисел или диапазона чисел, чтобы закрыть, что вы можете сделать, не глядя на буферыw
сокращение отwrite
команды в соответствии с руководством Vim, кроме того, нет никакого упоминания о каком-либо "уничтожении". Описание команды (help write
) начинается с «Записать весь буфер в текущий файл».w
вbw
команде означает уничтожение, он не говорит оw
команде. Он поместил это предупреждение, чтобы люди не думали, чтоbw
команда означает запись в буфер (что не означает удаление буфера).Если это не стало очевидным из предыдущих ответов:
: bd закроет текущий буфер. Если вы не хотите захватить список буферов.
источник
:bd
только закрывает буфер, тогда как (что бы это ни значило), тогда как:bw
также очищает все переменные и ДЕЙСТВИТЕЛЬНО удаляет его изls
буфера.Проверьте свой идентификатор буфера, используя: buffers
вы увидите список буферов там, как
если вы хотите удалить b.php из буфера
если вы хотите удалить / закрыть все из буферов
источник
Вместо того, чтобы просматривать выходные данные команды: ls и удалять (выгружать, стирать ..) буфер, указав его номер, я считаю, что использование имен файлов часто более эффективно.
Например, после того, как я открыл пару файлов .txt, чтобы освежить мои воспоминания о какой-то тонкости ... скопируйте и вставьте несколько строк текста, чтобы использовать их в качестве шаблона для сортировки ... и т. Д. Я набрал бы следующее:
Обратите внимание, что соответствующая строка не обязательно должна быть в начале имени файла.
Выше приведен список имен файлов, которые соответствуют 'txt' в нижней части экрана, и команда: bd, которую я первоначально набрал, не тронута и готова к завершению.
Вот пример:
Я мог бы вернуться назад по биту 'txt' и ввести имя файла, который я хочу удалить, но когда это становится действительно удобным, мне не нужно: если я нажимаю клавишу Tab во второй раз, Vim автоматически завершает мою команду с первым матчем:
Если я хочу избавиться от этого конкретного буфера, мне просто нужно нажать Enter.
И если буфер, который я хочу удалить, совпадает со вторым (третьим ... и т. Д.) Совпадением, мне нужно только нажимать клавишу Tab, чтобы команда my: bd перебирала список совпадений.
Естественно, этот метод также можно использовать для переключения на данный буфер с помощью таких команд, как: b ..: sb .. и т. Д.
Этот подход особенно полезен, когда установлена опция «скрытый» Vim, потому что список буферов может быстро стать достаточно большим, охватывая несколько экранов, и затрудняя поиск нужного буфера.
Чтобы максимально использовать эту функцию, возможно, лучше прочитать следующий файл справки Vim и соответствующим образом настроить поведение завершения командной строки Tab, чтобы оно лучше подходило вашему рабочему процессу:
Поведение, которое я описал выше, вытекает из следующего параметра, который я выбрал для согласованности, чтобы эмулировать завершение bash:
В отличие от использования номеров буферов, заслуга этого подхода заключается в том, что я обычно помню, по крайней мере, часть данного имени файла, позволяя мне напрямую ориентироваться на буфер, вместо того, чтобы сначала искать его номер с помощью команды: ls.
источник
Использование:
:ls
- перечислить буферы:bd#n
- закрыть буфер, где #n - номер буфера (используйтеls
для его получения)Примеры:
удалить буфер 2:
источник
Вы также можете отобразить следующее и предыдущее на функциональные клавиши, делая циклический переход по буферам быстрым
из моего vimrc
источник
Как насчет
Таким образом, вы можете редактировать один файл слева и перемещаться по всему каталогу справа ... Просто мысль, а не решение ...
источник
[РЕДАКТИРОВАТЬ: это было глупое предложение от времени, когда я не знал Vim достаточно хорошо. Пожалуйста, не используйте вкладки вместо буферов; Вкладки - это «макеты окон» Vim]
Может быть, переключиться на использование вкладок?
vim -p a/*.php
открывает те же файлы во вкладкахgt
иgT
переключать вкладки вперед и назад:q
закрывает только текущую вкладку:qa
закрывает все и выходит:tabo
закрывает все кроме текущей вкладкиисточник
wildmenu
? Он похож на lustyjuggler (хотя и проще), но он встроен (что было хорошо для меня, потому что нужен lustyjuggler+ruby
, и vim по умолчанию для кораблей ubuntu oneiric-ruby
).vim-nox
пакет от Ubuntu имеет поддержку Ruby.Тем, кто использует плагин для буферизации или древовидной навигации, например, Buffergator или NERDTree, нужно будет отключить эти разбиения перед уничтожением текущего буфера - иначе вы отправите свои разбиения в wonkyville
Я использую:
Где "
NERDTreeToggle
" в этом списке совпадает с набором:NERDTreeToggle
. Вы можете изменить эту функцию для интеграции с вашей собственной конфигурацией.источник
:bdelete
или:bwipeout
. Смотри мой ответ .Закрыть буфер без закрытия окна
Если вы хотите закрыть буфер без разрушения макета окна (текущий макет, основанный на разделениях), вы можете использовать плагин, такой как bbye . Исходя из этого, вы можете просто использовать
Или просто создайте карту
.vimrc
для более простого доступа, напримерПреимущество перед vim's: bdelete и: bwipeout
Из документации плагина :
: bdelete vs: bwipeout
Из документации плагина :
источник