Как я могу открыть в Vim сразу несколько файлов?


87

Есть ли способ открыть все файлы в каталоге из Vim? Таким образом :command, по сути, будет сказано: «Открыть все файлы /some/pathв буферах».

В идеале было бы здорово открывать все файлы в каталоге рекурсивно.

Ответы:


105

Команда, которую вы ищете, - это args:

Например:

:args /path_to_dir/*

откроет все файлы в каталоге


32
Используется **для рекурсивного сопоставления файлов. Eg: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 02

1
Слишком просто: h: n .. получить помощь по ": n". Разве я не люблю отвечать на свои вопросы;)
U0001 02

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. Исключая «изнутри», «из данного каталога» и «рекурсивно» вместе, но он «все же делает то, что необходимо»: открывает файлы.
ZyX

Это открывает файлы по одному
Пол

1

Если вы хотите добавить в список аргументов;

:arga what_you-d_like_to_add

увидеть

:he arga

from / in vim для получения дополнительной информации.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.