Перенумерация списка буферов

29

После того, как я некоторое время работал над проектом, я начинаю видеть большие промежутки между последовательными номерами буферов. Это потому, что буферы между ними были уничтожены по разным причинам. К сожалению, это может затруднить переход к определенному буферу или выбор диапазона буферов после ввода :ls. Есть ли способ изменить нумерацию всех открытых буферов, начиная с одного, без повторного открытия всех файлов?

недействительная указка
источник

Ответы:

21

Нет (не без удаления буферов).

Vim не поддерживает ручное назначение номеров буферов или переупорядочение буферов после их открытия. Философия заключается в том, что каждый буфер получает идентификатор, который фиксируется на время существования этого буфера (в справке :lsон отмечает, что «каждый буфер имеет уникальный номер. Этот номер не изменится ...»).

Вы можете использовать список аргументов, хотя. Поместите все открытые буферы в список аргументов, удалите все оставшиеся буферы, затем откройте все в списке аргументов. Следующие команды выполнят это:

  • :argdel * (удалить существующий список аргументов)
  • :bufdo argadd % (для каждого буфера добавьте путь буфера в список)
  • :1,1000bd (удалите буферы от 1 до 1000; возможно, есть лучший способ сделать это)
  • :argdo e (для каждого аргумента отредактируйте этот аргумент)

Это оставит вас с дополнительным пустым буфером, который открывается vim при удалении всех предыдущих буферов, но это разумное приближение к функциональности, которую вы хотите. Вы можете просто :bdэтот дополнительный буфер.


источник
1
Ваш ответ говорит нет, но похоже, что это прекрасно работает!
ахаррис88
(Я имел в виду «нет» в том смысле, что вы не можете сделать это без повторного открытия файлов). Это действительно изменить нумерацию с 1 для вас? Я думал, что это было, когда я впервые попробовал это, но теперь я вижу, что это не изменить нумерацию для меня?
Да, это для меня.
ахаррис88
Да, я просто тупой, я нашел свою ошибку.
«каждый буфер получает идентификатор, который фиксируется на время существования этого буфера» на самом деле сеанс!
14

"буферные числа сойти с ума" Расскажите мне об этом! К концу дня у меня просто более 100 буферов. Но, к счастью, как вы можете видеть в этой анимации, у вас есть tabзавершение для имен буферов.

Хит: b se <Tab>

Таким образом, даже если вы не можете изменить нумерацию буферов, вы все равно можете легко прыгать.

Я не знаю, ясно ли это из анимации, но «завершение табуляции» не похоже на завершение табуляции командной строки. Это больше похоже на «заменитель табуляции для устранения неоднозначности». Это означает, что в командной строке мне нужно было бы набрать sctabтогда, setabно здесь vim выполняет поиск 'se' и заменяет его первым (и единственным) совпадением. Если бы я набрал, testtabон совпадал бы с «generate_test_data.py», а затем tabснова совпадал бы с «scripts / setup_test_data.sh», а затем tabснова возвращался бы назад и т. Д.

Дело в том, что вы можете привыкнуть печатать просто :b <minimum amount of unambiguous characters>tabдля перехода к нужному документу. Я думаю, что это даже лучше, чем вспоминать «Мои буферы 1: foo 2: bar 3: etc», как я делал это, когда был новичком.

Бруно Броноски
источник
7

Вы можете использовать Vim-Airlines. Этот плагин имеет поведение, которое может решить вашу проблему:

См. Строку 470-479 в авиакомпании.txt

Это не изменит номера буферов, но вы можете выбрать буфер слева направо по номеру строки в таблице. Это мои настройки для авиакомпании в .vimrc:

"set airline 
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#tab_nr_type = 1 " tab number
let g:airline#extensions#tabline#show_tab_nr = 1
let g:airline#extensions#tabline#formatter = 'default'
let g:airline#extensions#tabline#buffer_nr_show = 1
let g:airline#extensions#tabline#fnametruncate = 16
let g:airline#extensions#tabline#fnamecollapse = 2

let mapleader=","

let g:airline#extensions#tabline#buffer_idx_mode = 1

nmap <leader>1 <Plug>AirlineSelectTab1
nmap <leader>2 <Plug>AirlineSelectTab2
nmap <leader>3 <Plug>AirlineSelectTab3
nmap <leader>4 <Plug>AirlineSelectTab4
nmap <leader>5 <Plug>AirlineSelectTab5
nmap <leader>6 <Plug>AirlineSelectTab6
nmap <leader>7 <Plug>AirlineSelectTab7
nmap <leader>8 <Plug>AirlineSelectTab8
nmap <leader>9 <Plug>AirlineSelectTab9

Моя строка вкладки: Моя строка вкладки

HJIahu
источник
удивительно! Я люблю это :)
Бласко
Не ответ на вопрос, но он исправляет проблему с сумасшедшими номерами буфера. Просто рекомендация показывать только buffer_numbers: switch_buffers_and_tabs=1иbuffer_idx_mode=0
caligari
6

Согласно документации, номера буфера никогда не меняются

    Each buffer has a unique number.  That number will not change,
    so you can always go to a specific buffer with ":buffer N" or
    "N CTRL-^", where N is the buffer number.

Единственный способ изменить нумерацию буферов - перезапустить vim.

aharris88
источник
0

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

введите описание изображения здесь

Номера буферов отображаются слева, если они вам нужны, но с нечетким искателем вам, возможно, больше не понадобится их использовать. Просто запомните часть имени файла, и обычно это 2-5 нажатий клавиш. Лично я сопоставил эту команду с нажатием клавиши, и переключение между буферами для меня практически мгновенно!

verboze
источник