Редактирование нескольких файлов в vi с помощью символов подстановки - PullRequest
27 голосов
/ 15 мая 2010

При использовании текстового редактора vi для программистов я часто использую поиск по шаблону, чтобы лениться в файле, который я хочу отредактировать

vi ThisIsAReallLongFi*.txt

Когда это соответствует одному файлу, он прекрасно работает. Однако, если он совпадает с несколькими файлами, vi делает что-то странное.

Сначала открывается первый файл для редактирования

Во-вторых, когда я: wq из файла, я получаю сообщение в нижней части терминала, которое выглядит следующим образом

E173: 4 more files to edit
Hit ENTER or type command to continue

Когда я нажимаю Enter, возвращает меня в режим редактирования в файле, в котором я был только в . Я ожидаю, что в этом случае vi перейдет к следующему файлу для редактирования.

Итак,

  1. Какова логика поведения vi здесь

  2. Есть ли способ перейти и отредактировать следующий сопоставленный файл?

И да, я знаю о завершении табуляции, этот вопрос основан на любопытстве и желании лучше понять оболочку.

Ответы [ 2 ]

40 голосов
/ 15 мая 2010

vi поддерживает наличие нескольких файлов, доступных для редактирования. :n переходит к следующему файлу, :N переходит к предыдущему. Используйте :h arglist для получения дополнительной информации.

7 голосов
/ 28 августа 2011

ОТВЕТЬ НА ТЕКУЩИЙ ВОПРОС

Вы можете написать: vim -p myfile*, и vim откроет все совпадения для myfile* в текущем каталоге на нескольких вкладках. Затем вы можете редактировать все файлы по одному. Перейдите с помощью gt для перехода на следующую вкладку и gT для перехода на предыдущую вкладку. Чтобы сохранить и закрыть все файлы за один раз, просто напишите :wqa внутри vim.

ОТВЕТЬ НА ПОХОЖУЮ ПРОБЛЕМУ

Я столкнулся с подобной проблемой. У меня был файл с именем «myfile *» в нескольких подкаталогах моего текущего каталога. Я хотел отредактировать небольшое изменение во всех них, не открывая их по одному. Итак, в командной строке я написал это:

$find . -type f -name "myfile*" -exec vim -f {} \;

Таким образом, find запускает vim для каждого файла. Как только я закрываю экземпляр vim, find автоматически запускает другой со следующим файлом, пока все они не будут выполнены. Хотя я согласен, что было бы лучше, если бы все файлы можно было открывать в виде вкладок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...