vi, переполнение буфера vim - PullRequest
2 голосов
/ 19 февраля 2009

Я теряю все предыдущие буферы, когда по ошибке пытаюсь переключиться на последний буфер [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 ]

4 голосов
/ 19 февраля 2009

Я думаю, вы что-то путаете. Буфер - это что-то вроде открытого файла. Когда вы переключаетесь на следующий файл в списке аргументов, используя : n , вы закрываете текущий буфер и открываете следующий, поэтому изменения должны быть либо сохранены, либо отброшены на этом этапе.

Кроме того, по умолчанию vim отображает сообщение об ошибке, если вы пытаетесь выйти за пределы последнего файла в списке аргументов, поэтому потерять что-либо не очень легко в vim.

Возможно, здесь может помочь описание ваших действий (нажатые клавиши), если это не ответит на ваш вопрос.

[править]

Хорошо, теперь я знаю, в чем проблема: существует разница между буфером и списком файлов для редактирования, которые вы предоставляете при запуске vim. Если вы начинаете vim с

vim a.txt b.txt

есть 2 файла для редактирования. Это не значит, что есть несколько буферов. Вы можете перемещаться, используя: n и: p (что означает n (ext) файл и p (revious) файл). Если у вас установлен глобальный флаг: скрытый, это означает, что каждый закрытый буфер станет скрытым. Файл все еще редактируется, но он не отображается ни в одном окне. Это значение может быть установлено при запуске vim в вашей системе. Попробуйте добавить : se nohidden к вашему .vimrc и попробуйте следующее:

:help buffer-hidden

[/ править]

2 голосов
/ 19 февраля 2009
:bn

будет отображать * п внутр файл * 1002 в буфере (в вашем случае "/ и т.д. / модули")

:bp

будет отображать р revious файл в буфере (также "/ и т.д. / модулей", потому что это делает перестановку)

Одна вещь, которую вы заметите, что файл, который вы редактируете помечается

%a

тогда

#

означает, что это последний файл отображается. Надеюсь, что это помогает.

2 голосов
/ 19 февраля 2009

: n и: p не переключаются между буферами:)

try: 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, чтобы вывести список ваших буферов и выбрать один с помощью цифровых клавиш.

...