Як відкрити кілька файлів, що відповідають виразному символу?


10

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

vim */.git/config

У :командному рядку Vim я очікував :find */.git/configзробити щось подібне (тобто відкрити всі файли, що відповідають виразу glob), але натомість він скаржиться E77: Too many file names.

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

Відповіді:


8

Можна використовувати :args {glob}. У вашому глобальному масштабі реверсивно **будуть переходити каталоги.

Це заповнить список аргументів, який є тим самим списком, який заповнюється при запуску Vim з однією або декількома іменами файлів як аргументами.

Після заповнення списку аргументів ви можете переміщатися по ньому за допомогою :nextта :previous. Ви також можете перейти до першого та останнього пункту за допомогою команд :firstта :last.


1
Ніцца :) :args */.git/configнасправді також заповнює список буферів, тож :bnextпрацює також. Це здається дивним? (Vim 7.4.52 та Neovim)
Джастін М.

1
Також нагадування іншим, ]aцикли :argsсписок , якщо github.com/tpope/vim-unimpaired встановлений.
Джастін М. Кіз

Також :argadd file*може зробити.
kenorb

Щоб використовувати шаблони глобуса ( **), вам потрібно globstarвстановити, див.: Збігайте всі файли в усіх вкладених каталогах з обшивкою оболонок .
kenorb

@ JustinM.Keyes Список буфера - це набір списку аргументів, тому це очікується.
Jamessan

3

Щоб відкрити відповідні файли на окремих вкладках…

:n */.git/config | tab all

Пояснення: :n ( :next) встановлює список наступних файлів для всіх збігів. tab allвідкриває всі файли у списку наступних файлів на нових вкладках.

… Або…

for f in glob("*.py", 0, 1) | exe "tabe" f | endfor

Пояснення: В glob(…)значенні 0 означає включення всіх відповідних файлів, навіть якщо вони в іншому випадку будуть ігноровані через налаштування suffixesабо wildignorecase. 1 означає повернути список замість рядка. exe "tabe" fє короткою формою execute "tabedit" fта означає відкрити файл, вказаний змінною, fна новій вкладці.


1
Виглядає як :n */.git/config | bufferтвори.
Mateen Ulhaq

2

У командному рядку Vim: я очікував :find */.git/configзробити щось подібне (тобто відкрити всі файли, що відповідають виразу glob), але натомість він скаржиться E77: Too many file names.

Не чекайте нічого перед тим, як прочитати документацію.

Окрім відповіді Тома, ви можете безпосередньо використовувати :nextяк альтернативу :args.


0

Відкриття файлів vim */.git/configнапевно повинно працювати. Якщо це не так, слід оновити свій Vim до 7.4 (попередня версія була більш глючною).

Крім того, спробуйте одне з наступного (в редакторі):

:n `find .git/ -name config`
:args `find . -name config`

Ви уважно не читали мого запитання. І вже згадується прийнята відповідь :args.
Джастін М. Кіз

@ JustinM.Keyes Дякуємо за ваші бали Wildcard повинен працювати за замовчуванням, і це єдина відповідь, яка говорить про те, що він повинен працювати в 7.4 (так як я мав абсолютно таку ж помилку перед оновленням). Використання args- це лише обхідне рішення, але ще більше воно показує, як використовувати розширення оболонки в vim it-self на випадок, якщо інші користувачі захочуть використовувати її для складніших рішень, використовуючи find, наприклад, цей . Тож я думаю, що це надає додаткового значення вашому питанню. Тож сподіваюся, що з тобою все добре.
kenorb

У мене ніколи не було проблем vim */foo, і немає способу, який би міг бути пов’язаний з версією Vim, тому що це особливість оболонки .
Джастін М. Кеїс

0

Очевидно, але не перераховано вище - наприклад, знайдіть всі sql файли, що мають ім'я create_table у своєму імені

:args **/*create_table*sql

і перевірити їх

:ls

і відкрити перший

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