有时我看到一个名为scratch的窗口打开。
我知道它是某种临时缓冲区/窗口。
如何创建一个临时缓冲区/窗口?
:h scratch不返回任何内容。

#1 楼

它可能是暂存缓冲区,可以命名。在帮助中:


临时

包含可以随时丢弃的文本。
关闭窗口时保留它,必须将其明确删除。
设置:>

      :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中。

评论


哪个:h命令用于访问此帮助?

– wizzup
17年2月8日在13:33

:h缓冲区,然后通过“特殊类型的缓冲区”读取。您走在正确的轨道上。

– wbogacz
17-2-8在13:36



使用任何Vim命令打开文件时,都会自动创建一个缓冲区。例如,如果使用:edit文件编辑文件,则会自动创建一个新的缓冲区。可以通过输入:enew或:new或:vnew创建空缓冲区。从Vim缓冲区常见问题解答:vim.fandom.com/wiki/Vim_buffer_FAQ

– NeilG
19-10-2在23:15

@wizzup:helpgrep从头开始将其设置为10个结果(在我的安装中)之一。

–丰富
19-10-3在13:05

#2 楼

'scratch'缓冲区只是用于键入任意临时内容的地方的非正式术语。

在接受了答案和另一个问题之后,我在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,那么在创建暂存缓冲区时,当前缓冲区将被“隐藏”(不再在窗口中)。Vim仍将停止并提示您您尝试退出该缓冲区中未保存的更改)。

暂存缓冲区通常具有与调用Scratch函数时所在缓冲区相同的工作目录。我已包含一条注释行,用于将暂存缓冲区工作目录更改为home。这适用于那些状态栏很有趣的人,它们可能会将当前目录的路径显示为缓冲区路径。或仅针对喜欢它的人。

您可以将暂存缓冲区设置为“列出”或“不列出”(默认情况下列出)。如果将其设为未列出,则不会在:buffers列表中看到它,但是它将在:buffers!中显示。如果您希望取消列出nobuflisted行,请取消注释。已列出或未列出,始终可以使用:b scratch随时更改到暂存缓冲区。列出暂存缓冲区会使它更易于访问。例如,:sball会将其包括在拆分中。

如果在暂存缓冲区上使用:bw(缓冲区擦除),Vim会删除内容并删除缓冲区而不会发出警告。如果在暂存缓冲区上使用:bd(删除缓冲区),Vim会在没有警告的情况下删除内容,并使缓冲区不列出。

您可以创建多个暂存缓冲区。 Vim开始抱怨,但您仍然会遇到其他问题。

#3 楼

我记得关于该主题的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


#4 楼

我创建了“从头开始”命令
command! Scratch new | setlocal bt=nofile bh=wipe nobl noswapfile nu