Как переназначить номер буфера в VIM?

Я думал, что vim был очень мощным, пока я не захотел избавиться от буферов в списке и повторно использовать их для чего-то другого. Например, если у меня есть

1 "f1.h"
2 "f2.h"
3 "f3.h"
4 "f1.cpp"
5 "f2.cpp"
6 "f3.cpp"

и я хочу заменить f1.h - f3.h чем-то другим, но в той же последовательности буфера:

1 "n1.h"
2 "n2.h"
3 "n3.h"
4 "f1.cpp"
5 "f2.cpp"
6 "f3.cpp"

Я не могу понять, как это сделать. Я могу сделать "1,3bd" и удалить буферы 1-3 или даже "1,3bw" и уничтожить их, но не вижу способа повторно использовать эти числа без перезапуска vim. Очевидно, что vim buffer faq в http://vim.wikia.com/wiki/Vim_buffer_FAQ подтверждает это.

Но я не хочу верить, что у vim действительно есть это ограничение, нет ли способа сделать это изнутри vim?

Ответы

Ответ 1

Вы не можете переназначить номера буфера в том же сеансе. Лучше всего посмотреть на альтернативы vimscript.

Один проводник буфера, который обрабатывает самые последние использованные файлы (и может удалять буферы), Buffer Explorer/Browser.

На vim.org имеется множество других сценариев переключения буфера, которые удовлетворяют потребности различных авторов. Или, альтернативно, вы можете перевернуть свои собственные с некоторыми сопоставлениями.

Я придумал это для Django.

http://code.djangoproject.com/wiki/UsingVimWithDjango#Mappings

Он дает мне быстрый двух/трех нажатий клавиш на 20 стандартных именованных файлов относительно каталога приложения. Вы могли бы придумать что-то для своего проекта на этих строках.

Мои сопоставления \1, \2, \3 и т.д., поэтому парадигма числа все еще существует.

Я также сопоставил \vr для ~/.vimrc и \br для ~/.bashrc.

Важная вещь, которая может и должна быть очень эффективным процессом.

Ответ 2

Здесь ленивый способ сделать это (не требует изучения чего-то нового):

  • Сохраните сеанс в файле в текущем рабочем каталоге или где бы вы ни хотели работать:
:mksession Session.vim
  • Редактировать Session.vim. Найдите список открытых буферов (строки, начинающиеся с badd).

  • Переупорядочивайте строки по своему вкусу.

  • Закрыть vim.

  • Запустите vim, используя флаг -S и файл сеанса:

$> gvim -S Session.vim

Буферы будут перенумерованы последовательно в том порядке, в котором вы их разместили.

Ответ 3

Я бы рекомендовал вместо этого использовать вкладки (из vim 7). Вы можете свободно перемещать их с помощью tabm и открывать новые с помощью tabe или tabnew. Плюс, это более очевидно, что происходит. Вы также можете запустить vim с открытыми вкладками с помощью -p (IIRC).