в vim, как установить аргументы для результата grep -l?

Чтобы проиллюстрировать, вот как это сделать из командной строки:

vim `grep "hello" * -Rl`

Это открывает vim со всеми файлами, в которых есть «hello» (-l дает только имена файлов). Я хочу сделать то же самое, но из vim. Концептуально что-то вроде этого (что не работает):

:args !grep "hello" * -Rl

Я открыт для совершенно разных подходов к достижению этой цели; Я просто хотел бы, чтобы это было в одной строке (чтобы его было легко редактировать и повторять).


Ответ состоит в том, чтобы просто использовать обратные кавычки, но с ключевым условием! Нижеследующее не работает для меня из-за кавычек вокруг hello:

:args `grep "hello" * -Rl`

Но это работает, если я удалю их или уберу кавычки:

:args `grep hello * -Rl`
:args `grep \"hello\" * -Rl`

(это было похоронено в комментариях после ответа хаоса - я добавил их сюда, чтобы сделать их более заметными, на случай, если у кого-то еще возникнет эта проблема)


person 13ren    schedule 23.06.2009    source источник


Ответы (2)


Ну, это работает для меня:

:args `grep -Rl "hello" *`

Работает вим 7.0.305.

person chaos    schedule 23.06.2009
comment
спасибо, я пытался использовать обратные кавычки, но vim их не распознал — вместо этого он интерпретировал `grep как имя файла. У вас есть свой ответ, чтобы работать на вас? Если да, то мне интересно, почему это не работает для меня. - person 13ren; 23.06.2009
comment
Да, у меня работало нормально. Возможно дело в версии. Я использую 7.0.305. - person chaos; 23.06.2009
comment
хммм, :version дает мне: VIM - Vi IMproved 7.0 (2006 7 мая, скомпилировано 31 января 2007 18:15:57) Включены исправления: 1-122 - person 13ren; 23.06.2009
comment
Хорошо, я обновился до версии 7.1.314, но та же проблема. Я вырезаю и вставляю ваш код, так что это не опечатка. Может быть, это опция компилятора или настройка. Но их так много, что было бы трудно понять, какой именно. - person 13ren; 23.06.2009
comment
Я не нахожу ничего, связывающего расширение обратной кавычки с параметрами компиляции. Есть что-то в расширении с обратной кавычкой, которое не работает в ограниченном режиме (опция -Z при запуске), но я не знаю, почему вы будете работать в этом режиме. - person chaos; 23.06.2009
comment
Ограниченный режим в любом случае не дает тех же результатов, что и вы; выдает недопустимую ошибку. - person chaos; 23.06.2009
comment
Я думаю, нужно задать вопрос: вы уверены, что отправляете обратные кавычки? Может ли ваш клиент обманывать вас, отправляя что-то еще — эти неприятные Microsoft-любимые левые кавычки или что-то в этом роде? - person chaos; 23.06.2009
comment
спасибо за эту проверку - очень признателен! :-). Немного поэкспериментировав, кажется, что это могут быть кавычки вокруг приветствия. Это работает: :args grep -Rl hello * --- хотя оказывается, что это лучше не делать из своего домашнего каталога (что с этим -R :-) - person 13ren; 23.06.2009
comment
ДА. Экранирование кавычек также работает: :args grep -Rl \"hello\" * так что я думаю, что это определенно была проблема. Yay, большое спасибо, это действительно круто, чтобы заставить это работать :D - person 13ren; 23.06.2009
comment
начинает комментарий в Vimscript, что делает его использование в командах Vim немного сложным... - person ephemient; 24.06.2009
comment
Ах, интересно. Интересно, почему у 13ren это портится, а у меня нет. - person chaos; 24.06.2009
comment
Я использовал обратные кавычки для `ack -l keywords`, и это сработало отлично, но когда я заменил ack на ag, все это просто превратилось в имя файла. Иметь `ag -l keywords` в качестве имени файла — это плохо, так как при попытке rm он ищет файлы, а затем удаляет их. Я очень смущен. Любая другая команда, которую я помещаю в обратные кавычки, работает нормально. - person isaacsloan; 21.09.2013

Попробуйте команду args:

:ar[gs] `grep -Rl "hello" .`

Если обратные кавычки у вас не работают, вы используете текущую версию vim?

:version
person Bill Karwin    schedule 23.06.2009
comment
Это версия 7, но не самая последняя. Сейчас проверяю новую версию. - person 13ren; 23.06.2009
comment
Я только что обновился до версии 7.1.314, но та же проблема. Интересно, в чем проблема? - person 13ren; 23.06.2009
comment
Привет еще раз, кажется, это были кавычки вокруг приветствия - он отлично работает без них или если они экранированы. :-) - person 13ren; 23.06.2009
comment
Хорошо, я рад, что вы нашли проблему! Ваше здоровье. - person Bill Karwin; 23.06.2009