vi,vim缓冲区溢出

时间:2009-02-19 12:32:10

标签: vim vi

当我错误地试图在最后一个缓冲区[n:]后面切换时,我正在丢失所有先前的缓冲区。

例如,如果我在编辑器中打开几个文件

:ls
  1 #    "/etc/moduli"                  line 1
  2 %a   "/etc/motd"                    line 1

:n
E163: There is only one file to edit

:p
E163: There is only one file to edit

now i can navigate between tabs just using :b [number]

请告知如何解决此问题。在这种情况下,如何防止缓冲区关闭?

3 个答案:

答案 0 :(得分:4)

我觉得你在那里混淆了什么。缓冲区就像一个打开的文件。当您使用:n 切换到参数列表中的下一个文件时,关闭当前缓冲区并打开下一个缓冲区,因此必须保存或丢弃更改。

此外,如果你试图超越参数列表中的最后一个文件,vim的默认行为是显示错误信息,因此在vim中丢失任何东西都不是很容易。

如果这不能回答你的问题,也许在这里描述你的行为(按键)可能有所帮助。

[编辑]

好的,现在我知道问题所在:缓冲区和启动vim时要提供的要编辑的文件列表之间存在差异。如果你用

启动vim
vim a.txt b.txt

有2个要编辑的文件。这并不意味着,有多个缓冲区。您可以使用:n和:p(表示n(ext)文件和p(revious)文件)进行导航。如果你有全局标志:hidden set,这意味着你关闭的每个缓冲区都将成为一个隐藏缓冲区。该文件仍在编辑中,但未在任何窗口中显示。该值可能在系统启动vim时设置。尝试将:se nohidden 添加到.vimrc并尝试以下操作:

:help buffer-hidden

[/编辑]

答案 1 :(得分:2)

:n和:p不在缓冲区之间切换:)

尝试:bufnext和:bufprev

也许你会喜欢:

nmap <LEADER>k :bnext<CR>:redraw<CR>
nmap <LEADER>j :bprevious<CR>:redraw<CR>
nmap <LEADER>d :bd<CR>
nnoremap <LEADER>b :buffers<CR>:buffer<space>

按,j表示前一个缓冲区,k表示下一个缓冲区,d表示关闭当前缓冲区,b表示缓冲区并选择一个带数字键的缓冲区。

答案 2 :(得分:2)

:bn

将在缓冲区中显示 n ext文件(在您的情况下为“/ etc / moduli”)

:bp

会在缓冲区中显示 p revious文件(也是“/ etc / moduli”,因为它会进行排列)

您会注意到的一件事是您正在编辑的文件标有

%a

#

表示它是您显示的最后一个文件。 希望它可以帮到你。