Як редагувати наявний буфер на новій вкладці vim?


51

Припустимо, я почав vim так:

vim foo bar

Тепер я вирішую, що хочу кожен із цих файлів на власній вкладці. Чи є спосіб зробити це, не виходячи з vim та не додавши -pпараметр до мого командного рядка?


Багато хто з вас, напевно, шукають, про tabe %що йдеться у відповіді liuyang1 нижче.
Матеуш Піотровський

1
@MateuszPiotrowski Як я вже згадував у цьому коментарі до цієї відповіді , :tabe %не працює з буферами, які не мають дійсного файлового шляху. :tab sbпрацює щоразу.
JoL

Відповіді:


30

Коли ви запускаєте vim таким чином, ви не отримуєте клієнт-vim, текстовий редактор використовує термінальний або cmd-запит - два файли знаходяться у двох різних буферах. Використовуйте :lsдля переліку буферів:

:ls
  1 %a   "foo"                 line 6
  2      "bar"             line 0

% A - активний буфер. Ви можете використовувати :b2для перемикання на буфер 2 або використовувати для переходу до :bnнаступного або :bpпопереднього. Я вважаю за краще (CTRL-W v) розділяти вікна вертикально, а не (CTRL-W s), яке розбивається горизонтально.

Якщо у вас завантажено 2 файли та немає вкладок (поки що), ви можете :tabnewта в новому вкладі:b2

Якщо ви хочете, щоб буфери завжди були завантажені на власні вкладки, перегляньте цю статтю .


Так, але я хочу мати вкладки.
innaM

Отже, ви вже запустили vim таким чином, що у вас є ваші файли у клієнті vim, а не в cmd / terminal оболонці?
DaveParillo

1
Я не впевнений, що ти маєш на увазі. Я використовую оболонку для запуску vim, як описано вище, і тоді у мене є запущена vim.
innaM

Ах! Я думаю, я ніколи не розумів, що буфери не є локальними для вкладок. Я завжди думав (не дуже думаючи), що кожна вкладка має свій буферний список.
innaM

На моїй машині vimзапустить редактор в оболонці. Щоб отримати графічний інтерфейс користувача vim, я маю використовувати gvim. І ви маєте рацію - буфери є глобальними для програми vim.
DaveParillo

47

Ви хочете відкрити буфер на новій вкладці?

Розділіть екран (Ctrl-W s), візьміть вікно та Ctrl-W T


Хм. Не зовсім те, що я мав на увазі, але непогано для початку. Я про це Ctrl-w Tще не знав . Звичайно, перша вкладка все одно матиме два буфери.
innaM

Ні. Після того, як ви розділите екран на два вікна та відкриєте одне з них у новій вкладці, він відходить від першої вкладки. Він не залишиться (принаймні, це не на моєму гвімі72). Що стосується буферів, вони не підключені до вікон / вкладок ... вони більше схожі на пам'ять, де vim зберігає вміст файлів.
Корінь

Ах! Ти правий. Я неправильно інтерпретував вихід :ls.
innaM

Також ctrl-w V розбиває вікно вертикально.
Шеннон Нельсон

1
CTRL-w v - правильна команда для розділення вікон по вертикалі
JRM

27

Ви можете досягти цього, поєднавши tabкоманду з sb[uffer]командою.

Спочатку вам потрібно знати ідентифікатор буфера буфера, який ви бажаєте відкрити, на новій вкладці. Ви можете дізнатися це за допомогою lsкоманди:

:ls
  1 %a   "foo"                          line 1
  2      "bar"                          line 0

Коли у вас є ідентифікатор, ви можете легко відкрити його на новій вкладці, використовуючи:

:tab sb 2

sbКоманда зазвичай відкриває заданий буфер в новому розділеному вікні, але tabкоманда змушує його відкрити в новій вкладці, замість цього.

tabКоманда також дозволяє вказати , де в списку вкладок повинна бути створена нова вкладка. Наприклад, :0tab sb 2нова вкладка "бар" з'явиться на початку списку, а не після поточної вкладки.


2
Вам не потрібен номер буфера, дайте йому однозначну частину імені буфера, а VIM робить для вас все інше.
десерт

1
Це була така відповідь, яку я шукав і потребував. Мене злякало, коли :tab buffer part-of-nameне відкрили нову вкладку! Але :tab sb part-of-nameпрацював як шарм. Дякую!!!!
Сукіма

Це не точне питання ОП, але саме це я шукав :)
jackcogdill

25

Кращий спосіб здійснити те, про що вимагали ОП:

:bufdo tab split

Це відкриє кожен буфер на власну вкладку, незалежно від того, скільки їх буде. Якщо ви багато використовуєте це, легко зробити карту у своєму .vimrc. У поєднанні з чимось подібним плагіном vim наступне відкриє кожен елемент з :grep(або : Ack ) на власній вкладці:

:grep foo
:QuickFixOpenAll
:bufdo tab split

Звичайно, вдаючись до плагіна, його буде досить легко змінити, щоб відкрити вміст списку швидких виправлень безпосередньо на вкладках.

ОНОВЛЕННЯ : Я дійсно повинен дати вигук на коментар ggustafsson нижче. Це далеко не найкраща відповідь партії і прекрасно ілюструє схильність Віма до композиційної поведінки. Пропозиція:

 :tab sball

Варто пошукати довідку Vim для : tab та : sball, щоб побачити, що тут відбувається.


Аналогічний підхід у попередній редакції, що стосується нащадків, є :bufdo execute "tabnew %". Я думаю, що новий підхід трохи чіткіший.
Джон Вітлі

Одне застереження: якщо стартовий буфер в vim не порожній, це, здається, відкриває останній буфер двічі. Я опублікую оновлення, якщо знайду просте виправлення.
Джон Вітлі

12
:tab sballздається, працює краще.
ggustafsson

6

1. Відкрийте два файли у Vim.

$ vim foo bar

2. Перевірте кількість буферів.

: лс
  1% "foo"
  2 "бар"

3. Ланцюг двох команд: tabnewвідкрити нову вкладку і b <buffer_number>завантажити потрібний буфер на вкладку.

: tabnew | b 2

8
Проблема кроку 3 полягає в тому, що він спочатку створює нову вкладку з порожнім буфером, а потім відкриває буфер 2, в результаті чого в списку буферів з'являється додатковий без назви буфер. Краще використовувати:tab sb 2
rkjnsn

1
@rkjnsn ви повинні опублікувати це як відповідь - він найкраще відповідає на питання "як мені редагувати наявний буфер на новій вкладці vim?"
JonnyRaa

1
@JonnyLeeds зроблено.
rkjnsn

4

Просто додайте якийсь момент, який інші хлопці не згадували.

  • поточне вікно до нової вкладки

Якщо у вас кілька вікон, <C-W>Tперенесіть це вікно на нову вкладку. Однак це ярлик лише для "Вікна", а не "буфера". Якщо ви віддаєте перевагу цьому стилю :spабо <C-W>sдублюєте поточний буфер в ще одне вікно, тоді <C-W>Tперенесіть його на нову вкладку.

4 натискання клавіш або 7 натискань клавіш.

  • поточний буфер до нової вкладки

:tabe % щоб відкрити нову вкладку для поточного буфера.

7 натискань клавіш.

  • буфер до нової вкладки

Якщо ви використовуєте плагін CtrlP, також можна використовувати "CtrlPBuffer", а потім за допомогою <C-t>ярлика відкрити його на новій сторінці вкладки. Цей стиль легко перемикається на різні буфери.

За допомогою ярлика "CtrlPBuffer", 4 натискань клавіш або більше.


:tabe %це те, що я довго шукав, дякую!
pevik

Ні, :tabe %насправді не відкривається нова вкладка для поточного буфера. Що відбувається, це %розширюється до файлового шляху поточного буфера і :tabeвідкриває цей шлях. Vim побачить, що ви намагаєтесь відкрити файл, який ви вже відкрили, і повторно використовувати буфер, який у вас є. Це означає, що це не працює з буферами, які не мають шляху файлу. Якщо ви відкриєте новий файл за допомогою, :newі ви не зберегли його, ви не можете помістити його на новій вкладці з цим. Справжня команда, яка вам потрібна, - це те, що rkjnsn поставив у своїй відповіді: :tab sb %або коротше::tab sb
JoL
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.