Answers:
它可能是暂存缓冲区,可以命名。从帮助中:
刮
包含可以随时丢弃的文本。关闭窗口时将保留它,必须将其显式删除。设置:>
: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中创建了以下函数。
该函数在当前窗口中创建一个空白缓冲区,并将其命名为“ scratch”。如果您尝试退出,暂存缓冲区不受保护。如果退出Vim或擦除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
从函数中省略from,那么当您创建暂存缓冲区时,您当前的缓冲区将被“隐藏”(不再在窗口中)。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
命令用于访问此帮助?