Как открыть все файлы в текущем каталоге и всех подкаталогах с помощью vim?

8

До сих пор я использовал, vim */**который, кажется, открывает все файлы в подкаталогах, но не в текущем каталоге, и vim *который открывает все файлы в currentкаталоге. Но как мне открыть все файлы в текущем каталоге и всех подкаталогах?

шест для отталкивания
источник

Ответы:

8

С zsh:

vim ./**/*(.)

Другие снаряды:

find . \( -name '.?*' -prune \) -o -type f -exec vim {} +

Открывать только (не скрытые) обычные файлы (не каталоги, символические ссылки, каналы, устройства, двери, сокеты ...).

vim ./**/*(D-.)

Другие оболочки, GNU find:

find . -xtype f -exec vim {} +

Чтобы также открыть скрытые файлы (и обход скрытых каталогов) и символические ссылки на обычные файлы.

А также:

vim ./***/*(D-.)

другие снаряды:

find -L . -type f -exec vim {} +

также просматривать символические ссылки при просмотре подкаталогов.

Если вам нужен только один уровень подкаталогов:

vim ./* ./*/*

Обратите внимание, что это хорошая привычка - добавлять префиксы в конце, ./если некоторые имена файлов начинаются с -или +.

(конечно, findони также работают zsh. Обратите внимание, что они могут запускать несколько экземпляров, vimесли список файлов большой).

Стефан Шазелас
источник
1

В bash с shopt -s extglob:

for file in **/**; do [[ -f "$file" ]] && vim "$file"; done

Обратите внимание, что, согласно комментарию Стефана , до Bash 4.3 это следовало за любыми символическими ссылками в рассматриваемых каталогах.

jasonwryan
источник
1
Это работает по одному vimна файл, хотя. Обратите внимание, что bash до 4.3 использовался для перемещения по символическим ссылкам с помощью **. Это было исправлено в 4.3.
Стефан Шазелас
@ StéphaneChazelas Один vim на файл плох как таковой (если мы говорим о нескольких файлах, а не о нескольких сотнях)? Спасибо за примечание о символических ссылках: я отредактирую это в.
jasonwryan