Ответы:
Вероятно, это пустой буфер, который можно назвать. Из справки:
царапина
Содержит текст, который можно удалить в любое время. Оно сохраняется при закрытии окна, оно должно быть удалено явно. Настройки:>
:setlocal buftype=nofile :setlocal bufhidden=hide :setlocal noswapfile The buffer name can be used to identify the buffer, if you give it a meaningful name.
Это можно найти в :help special-buffers
.
:edit
файл для редактирования файла, автоматически создается новый буфер. Пустой буфер можно создать, введя :enew
или :new
или :vnew
. Часто задаваемые вопросы из буфера Vim: vim.fandom.com/wiki/Vim_buffer_FAQ
:helpgrep scratch
один из 10 (в моей установке) результатов.
Я помню подсказку vim (которая была перенесена в vim.wikia) на эту тему.
Последняя версия функции, которую я использую для создания чистых буферов, также устанавливает:
'buflisted'
ложно'readonly'
(Из моего плагина библиотеки VimL: lh-vim-lib)
function! lh#buffer#scratch(bname, where) abort
try
set modifiable
" The next function takes care of working around this damn E36
call lh#window#create_window_with(a:where.' sp '.escape(substitute(a:bname, '\*', '...', 'g'), '#%'))
catch /.*/
throw "Can't open a buffer named '".a:bname."'!"
endtry
setlocal bt=nofile bh=wipe nobl noswf ro
return bufnr('%')
endfunction
«Чистый» буфер - это просто неофициальный термин, обозначающий место для ввода произвольного временного содержимого.
После принятого ответа и другого вопроса я создал следующую функцию в моем vimrc.
Функция создает пустой буфер в текущем окне и называет его «нуля». Чистый буфер не защищен, если вы попытаетесь выйти. Он будет удален без запроса даже с несохраненными изменениями, если вы выйдете из Vim или сотрете его ( :bw
).
Поместите эту функцию в ваш vimrc. Для создания рабочего буфера используйте :call Scratch()
.
function! Scratch()
split
noswapfile hide enew
setlocal buftype=nofile
setlocal bufhidden=hide
"setlocal nobuflisted
"lcd ~
file scratch
endfunction
Вы можете проверить это быстро, дергая строки, а затем :@"
. Вы можете попробовать :call Scratch()
.
Разделение используется, чтобы ваш текущий буфер не затрагивался при создании чистого буфера.
(Если вы предпочитаете опускать split
из функции, тогда ваш текущий буфер будет «скрыт» (больше не в окне), когда вы создаете чистый буфер. Vim все равно остановится и предложит вам, если вы попытаетесь выйти с несохраненными изменениями в этом буфер).
Чистый буфер обычно имеет тот же рабочий каталог буфера, в котором вы находитесь, когда вызываете функцию Scratch. Я включил закомментированную строку, чтобы изменить рабочий каталог рабочего буфера на home. Это для тех, у кого смешные строки состояния, которые могут отображать путь к текущему каталогу в качестве пути к буферу. Или просто для тех, кто предпочитает это.
Вы можете установить рабочий буфер, чтобы он был «в списке» или «не в списке» (по умолчанию). Если вы сделаете это в :buffers
списке, вы не увидите его в своем списке, но он будет в :buffers!
. Раскомментируйте nobuflisted
строку, если вы предпочитаете, чтобы она не была в списке. В :b scratch
любом случае вы всегда можете перейти в свой рабочий буфер . Создание списка «чистых» буферов делает его немного более доступным. Например :sball
, включит его в разделение.
Если вы используете :bw
(очистка буфера) в чистом буфере, Vim удалит содержимое и удалит буфер без предупреждения. Если вы используете :bd
(удаление буфера) в чистом буфере, Vim удалит содержимое без предупреждения и сделает буфер не включенным в список.
Вы можете создать несколько буферов нуля. Vim начинает жаловаться, но у вас все еще есть дополнительные.
buftype=hide
перед установкой имени, то изменение каталога не требуется, потому что имя буфера не будет «обрабатываться как имя файла». Также стоит упомянуть 'nobuflisted'
, что предотвращает отображение буфера на выходе :ls
. Вы как бы намекали на это, но не упоминали об этом явно.
buftype=hide
это действительно ерунда, и да, я на самом деле говорил о buftype=nofile
:). Но я не могу воспроизвести поведение, которое вы описываете, и все же считаю, что утверждение Vim buffer names are always filenames
неверно. Если я удаляю cd
строку из вашей функции и затем запускаю ее, в моей строке состояния или в выходных данных нет пути, и echo bufname('%')
я задаюсь вопросом: возможно, это проблема вашей строки состояния, а не имени буфера. Какая у вас 'statusline'
опция?
statusline
на что-то подобное expand(&buftype == 'nofile' ? '%' : '%:p:~:h')
, но теперь я думаю, что мы находимся в сфере личных предпочтений. Если вы решите придерживаться решения для каталога изменений, то может быть лучше использовать его, :lcd
чтобы ограничить изменения рассматриваемым окном, но опять же, это ваше дело. Во всяком случае, я думаю, что это отличный ответ. +1!
:h
команда использовалась для доступа к этой справке?