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


87

Чи є спосіб відкрити всі файли в каталозі з Vim? Отже, це :commandмогло б сказати фактично "Відкрити всі файли /some/pathв буферах".

В ідеалі було б чудово відкрити всі файли під директорією рекурсивно.

Відповіді:


105

Команда, яку ви шукаєте, - це args:

Наприклад:

:args /path_to_dir/*

відкриє всі файли в каталозі


32
Використовуйте **для рекурсивного збігу файлів. Наприклад:args /path_to_dir/**
daf

1
Щоб відкрити файли без розширення, вкажіть батьківський каталог, наприклад, args ** /. Hg / hgrc працює, але ** / hgrc ні.
79E09796,

11
Після відкриття файлів використовуйте, :tab allщоб помістити їх в окремі вкладки.
Backlin

"Усі файли" будуть містити підкаталоги, які можуть бути небажаними. (Мої помилки vim "/path_to_dir/subdir/" Illegal file name). Швидке рішення - запустити другу команду, argd */щоб знову видалити їх зі списку
lessthanideal

Було б дуже добре доповнити відповідь наступною пропозицією: Як хороша практика і для того, щоб показати, як застосовувати однаковий набір команд до всіх файлів, які були відкриті, ви можете виконати таку команду, щоб застосувати всі замовлення міститься у файлі my_commands_batch.vim:argdo source my_commands_batch.vim
aturegano

21

Чому це не працює, якщо я хочу відкрити всі файли, що закінчуються певним розширенням? я намагався

:n ./**.cs

і відкриває лише файли в поточному каталозі.

Я знайшов відповідь. Правильний код :n **/*.cs

Для отримання додаткової інформації :h find


9

Ви пробували

:n /some/path/*

Він відкриє всі файли в / some / path

Я не думаю, що це відкриє файл рекурсивно.

РЕДАГУВАТИ

Можливо, використання ** відкриється рекурсивно, як згадується daf


Що означає: n? Вивчення допомоги vim лише вказує мені на «повторення останнього шаблону» .. що, на мою думку, є натисканням клавіші. Чи є спосіб отримати допомогу лише в командному режимі?
U0001

1
Занадто просто: h: n .. отримати допомогу для ": n". Хіба я не люблю відповідати на власні запитання;)
U0001

4

Метод, з яким не потрібно возитися, argsполягає у введенні списку файлів у текстовий файл, а потім за допомогою :soкоманди для запуску команд у цьому файлі.

Наприклад, якщо ви хочете відкрити всі файли, які закінчуються в .phpпевному каталозі, спочатку створіть, files.txtщо містить список файлів, доданий до будь-якої команди, яку ви хочете використовувати для їх відкриття.

sp alpha.php
sp bravo.php
sp charlie.php

Тоді, у межах vim:

:so files.txt

Якщо список файлів великий, порівняно тривіально швидко його генерувати files.txt, перенаправляючи вихідні дані lsдо файлу, а потім використовуючи макрос vim перед spпочатком кожного імені файлу.

Очевидно, це не настільки елегантно, як використання команд argsі argdo, але ці команди також набагато складніші.

Також може існувати спосіб зробити це за допомогою однієї команди в командному рядку, але навіть після 16 років я все ще вважаю програмування vim дивним та загадковим.


Цікаво! Звучить це хороший спосіб контролювати, які файли потрібно відкривати, замість того, щоб сліпо відкривати всі файли даного каталогу, якщо ці файли не є обов’язковими.
cram2208

1

Ще один спосіб рекурсивного відкриття файлів

find . -type f -exec vi {} \;

4
Не відповідає обмеженню "зсередини Vim".
ZyX

і все ж робить те, що потрібно :)
rogue-one

3
Це не. Потрібні файли з даного каталогу рекурсивно зсередини vim . Якщо ви відкидаєте умови, ви можете також сказати, що kate **/*(^/)(використовуючи синтаксис zsh globbing) робить те, що потрібно: рекурсивно відкриває файли з даного каталогу. Це не “зсередини” і воно взагалі не використовує vim, але “все ж робить те, що потрібно”. Або навіть kate ~/.vimrc ~/.bashrc. Якщо взагалі опустити “froming”, “з даного каталогу” та “рекурсивно”, але він “все-таки робить те, що потрібно”: відкриває файли.
ZyX

Це відкриває файли по черзі
Павло,

1

Якщо ви хочете додати до списку аргументів;

:arga what_you-d_like_to_add

подивитися

:he arga

від / в vim для отримання додаткової інформації.

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