Как я могу использовать команду для открытия первого результата поиска с vi?

Каждый раз, когда я должен найти файл и затем открыть его, я должен использовать: найдите, что./-называют ****.properties., затем скопируйте результат, и затем vi "вставляют результат здесь". Если я должен использовать мышь, это может быть немного проблемы. Так есть ли какой-либо лучший способ сделать это?

5
задан 10.11.2010, 11:28

6 ответов

Можно открыть произвольный файл при помощи AWK или sed для печати конкретного номера строки.

vi "$(find ./ -name **.properties | awk 'NR==2')"

или

vi "$(find ./ -name **.properties | awk 'NR==2{print;quit}')"

или

vi "$(find ./ -name **.properties | sed -n '2p')"

или

vi "$(find ./ -name **.properties | sed -n '2{p;q}')"

Версии с quit или q возвратитесь немного более быстрый, если существует большое количество файлов.

2
ответ дан 07.12.2019, 17:07
find . -name \*.properties | xargs -d '\n' vi

откроет все файлы на сингле vi экземпляр. Для открытия просто первого использовать

find . -name \*.properties | head -1 | xargs -d '\n' vi
3
ответ дан 07.12.2019, 17:07

При изменении оболочки на zsh Вам будет нужно find намного менее часто, поскольку zsh позволяет Вам делать большую часть какой find может сделать через globbing. Прежде всего, **/ имеет особое значение: **/foo расширяется до названных файлов foo в текущем каталоге и его подкаталогах рекурсивно, т.е. это соответствует тем же файлам как find . -name foo. Таким образом, можно отредактировать все соответствия с

vi **/*.properties

Начиная с удара 4.0, если Вы помещаете shopt -s globstar в Вашем ~/.bashrc, **/ ведет себя таким же образом.

В zsh у Вас есть намного больше возможностей благодаря спецификаторам шарика (описанный очень кратко около конца zshexpn страница справочника). Принцип должен ограничить соответствия путем добавления одного или нескольких спецификаторов в круглых скобках после соответствия. Например, спецификатор . ограничивает регулярными файлами, в то время как / ограничивает каталогами. Спецификатор [1] сохраняет только первое соответствие; [1,4] сохраняет первые четыре соответствия; и так далее. Например, для редактирования первого (в полном пути лексикографический порядок) регулярное соответствие файла *.properties:

vi **/*.properties(.[1])

Если Вы отредактировали бы последний раз измененный файл соответствия, можно использовать om спецификатор для сортировки соответствий ко времени изменения (в порядке увеличивающегося возраста):

vi **/*.properties(.om[1])
3
ответ дан 07.12.2019, 17:07

Можно хотеть посмотреть на -quit опция для find команда. Следующее могло быть примером того, что Вы хотите выполнить:

find . -name "*.properties" -print -exec vi {} \; -quit

Я должен указать, что, поскольку обнаружил вскоре после того, как я отправил этот ответ, -quit переключатель не существует для версии BSD find команда, что Вы, вероятно, найдете, например, на MacOS.

1
ответ дан 07.12.2019, 17:07

find . -name "*.properties" -exec vi {} \;

Затем используйте ключ прерывания (например, ^C) после редактирования первого файла.

0
ответ дан 07.12.2019, 17:07

Можно поместить результаты find команда в командную строку для vi как это:

vi $(find . -name \*.properties -print)

или как это:

vi $(find -name \*.properties)

с тех пор . и -print подразумеваются, если опущено. Для открытия просто первого результата использовать

vi $(find -name \*.properties | head -1)
0
ответ дан 07.12.2019, 17:07

Теги

Похожие вопросы