Найти в Дзене
Блокнот математика

Рубрика "Секреты Вим". О буферах

Привет, коллеги. Обсудим такое фундаментальное понятие Вим, как буфер. Буфером называется область памяти, в которой Вим хранит текст — прочитанный из файла, сохраненный в файл, а также с файлом не связанный. Команда :e имя_файла (или :edit) позволяет открыть для редактирования существующий файл или создать новый. Команда :new открывает новый буфер, не связанный с файлом. Посмотреть список буферов позволяет команда :ls (или buffers, или files). Каждому буферу присвоен номер, который будет указан в первом столбце. Во втором столбце указан статус буфера (активный, скрытый, измененный, readonly и т.п.). Можно указать флаг команде, чтобы увидеть, например, только скрытые или только измененные буферы. См. :help :ls Можно вставить буфер в список, не открывая его: команда badd, которой надо указать имя файла, а перед ним можно задать номер строки в виде +66. Это не от слова bad, а от "buffer add". Присутствие буфера в списке можно проверить через опцию buflisted. Открывать буферы из списка п

Привет, коллеги. Обсудим такое фундаментальное понятие Вим, как буфер.

Буфером называется область памяти, в которой Вим хранит текст — прочитанный из файла, сохраненный в файл, а также с файлом не связанный.

Команда :e имя_файла (или :edit) позволяет открыть для редактирования существующий файл или создать новый. Команда :new открывает новый буфер, не связанный с файлом.

Посмотреть список буферов позволяет команда :ls (или buffers, или files). Каждому буферу присвоен номер, который будет указан в первом столбце. Во втором столбце указан статус буфера (активный, скрытый, измененный, readonly и т.п.). Можно указать флаг команде, чтобы увидеть, например, только скрытые или только измененные буферы. См. :help :ls

Что-то много у меня накопилось буферов)) Надо почистить.
Что-то много у меня накопилось буферов)) Надо почистить.

Можно вставить буфер в список, не открывая его: команда badd, которой надо указать имя файла, а перед ним можно задать номер строки в виде +66. Это не от слова bad, а от "buffer add".

Присутствие буфера в списке можно проверить через опцию buflisted.

Открывать буферы из списка по кругу можно командами :bnext, :bprev. Повторитель перед командой позволяет шагнуть на более, чем один. Есть доступ прямо по номеру: :buffer. Вместо номера можно указать имя файла, с которым связан буфер. Не обязательно указывать точное имя, достаточно хорошего приближения. Клавиша табуляции позволит дополнить имя, если это возможно, что позволяет оценить достаточность приближения.

Это всё может пригодиться, если вы открыли через vim -p *.txt много файлов: часть откроется во вкладках, а остальных будет не видно. Или если вы работаете с QuickFix: можно улететь в другой файл, а как вернуться к прежнему? Теперь вы знаете.

Можно предварительно расщепить окно и открыть буфер там: sbuffer.

Вим запоминает перемещения, в том числе между буферами. Прыгать взад-вперед позволяют команды <C-O> и <C-I>, можно перемещаться туда-сюда между текущим и предыдущим буфером командой <C-^>. Заметьте, что в режиме вставки <C-^> переключает раскладку.

При работе с большим проектом есть смысл держать все файлы проекта в виде буферов. Какие-то можно открывать во вкладках или окнах в пределах вкладки. Другие до поры скрыты.

Удалить буфер позволит команда :bd. Вот мне, например, надо почистить список буферов, так как сессии привели к тому, что список этот разросся за счет скрытых буферов. Не то чтобы это мешало, но почищу.

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

Опция hidden (это флаг, то есть скинуть его позволяет :set nohidden) предписывает делать буферы скрытыми, а не выгружать, если файл из окна исчезает (команды :edit, :tag, :next и другие). Иногда буфер всё равно может стать скрытым, даже если флаг сброшен: например, если файл изменен (изменения не сохранены), но команда с восклицательным знаком всё-таки удалила буфер. Вот он и становится скрытым, так что ещё не всё пропало. Помните об этом, это может при случае выручить.

Скрытый буфер надо начать редактировать и он перестанет быть скрытым.

Опция hidden глобальная, но есть ещё bufhidden: ее возможные значения hide, unload, delete или пустая строка. В последнем случае предписывается использовать hidden. Остальные варианты понятны, и они для данного буфера преодолевают hidden.

Помимо отображения файлов, буфера могут применяться для других целей, и тип буфера описывает опция buftype. Помимо файлов, буфер может отображать справку, QuickFix, содержать терминал или содержимое каталога, а также быть временным файлом, который в любой момент может быть удален (scratch, черновик). Может быть статус unlisted, когда буфер в список не входит. Странный случай, но возможный. Есть и другие значения, а пустая строка означает нормальный буфер.

Помимо справки Вим, о буферах есть неплохой текст на vim.fandom.

Удачи, коллеги!

Научно-популярные каналы на Дзене: путеводитель
Новости популярной науки12 марта 2022