如何在vim中固定窗口缓冲区?

26

我能否修复一个缓冲区,以便从vim窗口中移除它的唯一方法是关闭它?

例如,我正在使用NERDtree插件,在vim窗口中显示文件系统。有时我忘记在使用quickfix命令之前将焦点切换到其他窗口,导致错误的文件取代了文件树。(更不用说NERDtree的窗口默认宽度只有31个字符)

编辑:

我想通过这个问题模拟Eclipse内vim的视图和编辑器的概念。在这个术语中,NERDTree(和其他专门显示信息的插件)将是一个视图,而其他窗口将是编辑器。


不确定,但是:b#通常会将窗口跳回到上一个文件,因此它可能会成功地在该窗口中重新打开NERDtree插件。 - El Yobo
解决NerdTree的一种简单方法是关闭NerdTree缓冲区(ctrl + wq),然后使用:NERDTree命令重新打开它。 - GWW
4
我已经将 <F9> 分配给了 NERDTree 的切换操作(nnoremap <silent> <F9> :NERDTreeToggle<CR>),所以当我按下 <F9> 键时,NERDTree 会在新窗口中打开。此外,El Yobo 的建议也可能起作用,但我更喜欢关闭缓冲区并使用 <F9> 重新打开 NERDTree。 - freitass
另一个解决方案是始终在当前窗口中打开文件。我通常的做法是:
  • 创建一个新窗口(与当前窗口相同),
  • 将要打开新文件的位置移动到该新窗口,
  • 打开 NERDTree(如果需要,即从不打开)
  • 在这个新窗口中打开新文件。
- mb14
感谢您的评论。请查看上面的编辑。 - freitass
缓冲区是全局的,现有选项、修饰符、命令等都无法改变这一点。任何缓冲区都可以在任何窗口中显示,简单明了。如果你不喜欢它的工作方式,也不想适应它,那么你就必须在现有模型之上编写自己的抽象层。祝你好运。 - romainl
2个回答

2

这并不是一个确切的答案,但如果您出现错误,Ctrl-^可以撤销缓冲区内容的更改。


1
其实是 Ctrl+6,对吧?我上周学了这个命令,它为我节省了很多时间,但还不够。 =/ - freitass

2
我已经编写了一个自动命令来实现这一功能。将以下内容添加到vimrc中将防止NERDtree缓冲区被覆盖:
autocmd BufEnter * if bufname("#") =~ "NERD_tree" && bufname("%") !~ "NERD_tree" | b# | endif

每次打开一个新的缓冲区时,自动命令都会运行 -- 如果它检测到上一个缓冲区是 NERDtree,并且当前缓冲区不是 NERDtree,则它将返回到 NERDtree 缓冲区,从而实现对 NERDtree 的“锁定”。

很好,运行良好。为了完整起见,以下是如何在NvimTree中执行的:autocmd BufEnter * if bufname("#") =~ "NvimTree" && bufname("%") !~ "NvimTree" | b# | endif - Pascalius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接