Відповіді:
Ймовірно, буфер подряпин, який можна назвати. З довідки:
подряпина
Містить текст, який можна відкинути в будь-який час. Він зберігається при закритті вікна, його потрібно явно видалити. Налаштування:>
: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 FAQ: 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. Я включив коментований рядок, щоб змінити робочий каталог буфера подряпин на домашній. Це для тих, хто має смішні рядки стану, які можуть відображати шлях поточного каталогу як шлях буфера. Або просто для тих, хто віддає перевагу.
Ви можете встановити буфер подряпин як "у списку" чи "в списку" (вказаний за замовчуванням). Якщо ви внесете його до списку, ви не побачите його у своєму :buffers
списку, але він буде в :buffers!
. Відкоментуйте nobuflisted
рядок, якщо ви хочете, щоб він не був у списку. У списку чи внесенні до списку, ви можете будь-коли перейти до буфера подряпин :b scratch
. Якщо внесений до списку буфер нуля, це робить його трохи доступнішим. Наприклад :sball
, включить його в розкол.
Якщо ви використовуєте :bw
(wiper buffer) для буфера подряпин, 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
команда використовується для доступу до цієї довідки?