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


29

Після того, як я деякий час працював над проектом, я починаю бачити великі прогалини між послідовними номерами буфера. Це тому, що буфери між ними були викреслені з різних причин. На жаль, після набору тексту це може зробити незручно переходити до певного буфера або вибирати діапазон буферів :ls. Чи є спосіб перенумерувати всі відкриті буфери, починаючи з одного, не відкриваючи знову всі файли?

Відповіді:


21

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

Vim не підтримує присвоєння номера вручну або переупорядкування буферів після відкриття їх. Філософія полягає в тому, що кожен буфер отримує ідентифікатор, який фіксується протягом життя цього буфера (в довідці :lsзазначається, що "кожен буфер має унікальне число. Це число не зміниться ...").

Ви можете використовувати список аргументів. Покладіть всі відкриті буфери до списку аргументів, видаліть усі незавершені буфери, а потім відкрийте все у списку аргументів. Наступні команди виконають це:

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

Це дозволить залишити додатковий порожній буфер, який відкриється vim, коли ви видалите всі попередні буфери, але це розумне наближення до потрібної вам функції. Ви можете просто :bdцей додатковий буфер.


1
Ваша відповідь говорить ні, але здається, що це чудово працює!
aharris88

(Я мав на увазі "ні" в тому сенсі, що ви не можете зробити це без повторного відкриття файлів). Чи насправді це перерахунок від 1 для вас? Я думав, що це було, коли я вперше спробував це, але тепер я бачу, що він не перераховує мене?

Так, це перераховує для мене.
aharris88

Так, я просто німий, я знайшов свою помилку.

"кожен буфер отримує ідентифікатор, який фіксується протягом життя цього буфера" насправді сесії!

14

"буферні номери збуваються з розуму" Розкажіть про це! До кінця дня я легкий за 100 буферів. Але на щастя, як ви бачите в цій анімації, у вас є tabзаповнення імен буфера.

Натисніть: b se <Tab>

Тож, хоча ви не можете перенумерувати буфери, ви все одно можете легко стрибати навколо.

Я не знаю, чи зрозуміло це з анімації, але "завершення вкладки" на відміну від завершення вкладки командного рядка. Це більше схоже на "замінник вирішення неоднозначностей". Це означає, що в командному рядку я повинен був би набрати sctabтоді, setabале тут vim виконує пошук "se" і замінює його першим (і єдиним) збігом. Якби я набрав, testtabвін би відповідав ' tabcreate_test_data.py', а потім tabзнову збігався б "script / setup_test_data.sh", а потім знову повернувся б назад і т.д.

Справа в тому, що ви можете звикнути вводити текст, :b <minimum amount of unambiguous characters>tabщоб просто перейти до потрібного документа. Я думаю, що це навіть краще, ніж пам'ятати "Мої буфери 1: foo 2: bar 3: і т.д.", як я це робив, коли я був новачком.


7

Можна скористатися vim-airline. Цей плагін має поведінку, яка може вирішити проблему:

Дивіться рядок 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

Мій рядок вкладки: Рядок мого вкладки


дивовижний! Я люблю це :)
Бласко

Не відповідь на питання, але це виправляє проблему з шаленими числами буфера. Просто рекомендація показувати лише 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.


0

Старе питання, але оскільки це з'являється на вершині пошуку в Google, я залишу це для подальших пошуків. Як запропонував Бруно, нечіткий пошук, який підтримує буферні списки, - це шлях. Я особисто використовую і рекомендую fzf-vim . Він забезпечує команду :FZFBuffers, яка виглядає приблизно так:

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

Номери буферів відображаються зліва в тому випадку, якщо вони вам потрібні, але за допомогою нечіткого пошуку ви, можливо, більше не будете використовувати їх знову. Просто запам’ятайте частину назви файлу, і зазвичай це 2-5 натискань клавіш. Особисто я вказав цю команду на натискання клавіші, і перемикання між буферами для мене майже моментальне!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.