Як я можу відкрити кілька вкладок одночасно?


14

Якщо я використовую:

:tabedit file1 file2

Я отримав:

E172: Only one file name allowed

Чи є спосіб використання :tabeditз кількома іменами файлів? Або інший спосіб відкрити кілька вкладок одночасно?



@kenorb Так. І він має абсолютно таку ж відповідь вже тут, за винятком пояснення того, що це робить. Тож як посилання на нього додає значення?
Мартін Турноїй

Є ще деякі відповіді, і нові відповіді можуть прийти туди. По-друге, існує мало інших подібних пов'язаних / пов’язаних там, так що користувачі також можуть дізнатися більше про споріднені форми.
kenorb

Я дізнався про це однострочнікі: :args *.c | tab all. Інше питання є більш популярним, ніж це, тому добре також пов’язати його.
kenorb

Відповіді:


10

Враховуючи проблеми та складність моєї іншої відповіді, використовуючи "вбудований" спосіб, змінивши список аргументів, я додав власну невелику функцію для цього:

" Open multiple tabs at once
fun! OpenMultipleTabs(pattern_list)
    for p in a:pattern_list
        for c in glob(l:p, 0, 1)
            execute 'tabedit ' . l:c
        endfor
    endfor
endfun

command! -bar -bang -nargs=+ -complete=file Tabedit call OpenMultipleTabs([<f-args>])

Тепер ви можете використовувати :Tabedit *.vim. Ця функція дозволить розширити всі шаблони глобалізації та виконати :tabedit <f>для кожного файлу. Ви можете додати скільки завгодно назв шляхів, наприклад, це все працює:

:Tabedit file.rb
:Tabedit *.c
:Tabedit file1.py file2.py _*.py
:Tabedit /etc/hosts file{1,2}.sh

Ну, і так далі ...

Я поклав це в невеликій globedit.vim плагін, який також містить команди для :Edit, :Splitі т.д.


2
Відмінна функція та команда! Деякі вдосконалення: (1) Використовуйте [<f-args>]замість "<args>"- таким чином, patternпараметр буде List (масив), і вам не доведеться мати справу з розбиттям рядка вручну. (2) Введіть ненульовий показник як третій аргумент, щоб glob()він повернув список. Тоді ви також можете уникнути розбиття вручну. Вам потрібно буде пройти в 0якості другого аргументу , щоб пропустити його , не впливаючи на поведінку: glob(l:p, 0, 1).
tommcdo

7

Наскільки мені відомо, єдиний вбудований спосіб зробити це:

:args *.vim
:tab all

По-перше, :argsаргумент замінить список аргументів. Список аргументів перераховує файли, з якими ви відкрили Vim; так vim file1 file2означає , що список аргументів містить file1і file2.
Ми можемо змінити це під час виконання, і Vim відкриє буфер для кожного нового запису в списку аргументів.
Див. Для :help argument-listотримання додаткової інформації.

:allКоманда відкриває вікно для кожного елемента в списку аргументів, то :tabкоманда виконує команду і відкриває нову вкладку , коли команда дала б відкрити нове вікно.

Коваджі

Існує кілька застережень до цього методу.

Перш за все, немає перевірки на дублікати, тому ви можете закінчити 2 та більше вкладок для одного буфера.

Але найбільша проблема полягає в тому, що він замінює всі ваші вкладки тим, що є у списку аргументів; тож ви втратили всі існуючі вкладки.
Ви можете трохи обійти це, використовуючи :argadd *.vimдля додавання в список аргументів, замість того , щоб замінити його; але команда , такі як :editабо :tabeditж НЕ змінити список аргументів, і ви втратите ці вкладки , якщо не додати їх до списку аргументів (ви до сих пір їх в списку буферів, хоча). Можливо, ви також не хочете відкривати все у своєму аргументі на вкладці, можливо, ви просто хочете відкрити 2 файли як додаткову вкладку.

Можливо, ви могли б зробити це трохи краще, спочатку додавши до списку аргументів усі відкриті в даний час вкладки (які я не можу реально дістати), але це все ще далеко не ідеально. Якщо на вкладці є 2 або більше вікон, вони все одно змінять їх ...


Я можу помилятися, але чи не відкриває це зайву вкладку (як видно з мого запитання про відкриття вкладок за замовчуванням)?
муру

1
Якщо ви посилаєтесь на мою відповідь на це питання, різниця в тому, що я використав :argdo tabedit %, що відкриває нову вкладку для кожного аргументу. Починаючи з однієї вкладки та відкриваючи n нових, звичайно, ви залишатимете n + 1 вкладки. :tab allє набагато кращим рішенням.
tommcdo

@tommcdo Я говорив про відповідь Джоша Петрі . Ви б не сталися з одним із його псевдонімів, чи не так? :)
муру

Ха-ха, ні. Я, мабуть, думав над іншим питанням!
tommcdo

2

Ви можете використовувати :nextкоманду замість цього, наприклад:

:n file1 file2

або:

:n *.txt

Це здається таким же, як використання :args *.vim? Принаймні, він поводиться так само, і :help next_fдокументує це як те саме ...
Мартін Турной

Це коротше і простіше, і ви цього не згадали. Поведінка така ж, як ви просили запитання щодо цього.
kenorb

2

З командного рядка ви можете використовувати:

vim file1 ... filen -p

І якщо ви забули використовувати -pвсе-таки, можете використовувати

:tab ball

До речі, не забувайте, що змінна tabpagemax(значення за замовчуванням 10) обмежує кількість вкладок, які ви можете відкрити таким чином.


0

Ви фактично можете відкривати нові вкладки та зберігати свої поточні вкладки, не записуючи нових функцій (див. Цю відповідь на Переповнення стека ):

:args file1 file2 | argdo tabe

Ви можете відкрити нову порожню вкладку ( :tabe) перед цим, тому що перший файл відкриється в поточній вкладці. Крім того, додаткова порожня вкладка залишиться відкритою (див., :help argdoЩоб зрозуміти, чому).


Вам також потрібно виправити виділення синтаксису (чомусь), як це пояснено у посиланні та закрити останню вкладку, так що команда 'full' буде такою: :tabnew | args file1 file2 | argdo tabe | tabdo syntax onВам потрібно натиснути Enter, щоб очистити підказку та введіть :closeдля видалення останньої ( порожня) вкладка ... це дуже жахливо вводити текст, і це варто того лише, якщо ви відкриваєте багато вкладок (для 2 або 3 файлів, просто використовувати :tabeдва рази буде швидше).
Мартін Турноїй
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.