Я делаю следующее почти каждый день
- Запустить поиск (
find -name somefile.txt
) - Откройте результат в
vim
Проблема в том, что я должен скопировать и вставить результат find
в vim
команду. Есть ли способ избежать этого? Я немного поэкспериментировал ( find -name somefile.txt | vim
), но не нашел ничего, что работает.
заранее спасибо
vim `find -name somefile.txt`
. @StuartPowers В качестве альтернативы, вы можете использовать,vim `!-1`
если вы уже использовали эту находку, была ваша предыдущая командаПопробуй это:
:r!find /<path> -name 'expression'
Результаты должны появиться в vim, когда поиск будет завершен.
Или
Пытаться:
источник
Если вы не против запустить команду еще раз: нажмите Upи добавьте
xargs
команду. Или используйте подстановку истории и запуститеСуществует легкий способ сохранить выходные данные команды, которая работает в ksh и zsh, но не в bash (для этого требуется, чтобы выходная сторона конвейера выполнялась в родительской оболочке). Труба команда в функцию
K
(ЗШ определение ниже), в котором к ЭВЧ свой выходной сигнал в переменной$K
.Автоматическое сохранение результатов каждой команды на самом деле невозможно только с помощью оболочки, вам нужно запустить команду в эмулируемом терминале. Вы можете сделать это, запустив внутри
script
(утилита BSD, но доступная в большинстве устройств, включая Linux и Solaris), которая сохраняет весь вывод вашего сеанса через файл (для надежного обнаружения последнего приглашения в машинописном тексте все еще требуются некоторые усилия) ).источник
Мне нравится использовать тики `(на той же клавише, что и ~)
Обратные тики выполняют команду внутри тиков, и затем команда может использовать выходные данные. Выше будут найдены все файлы somefile.txt, что позволит вам использовать их
:next
для перемещения по всем файлам.Это очень полезно, если вы потратите пару попыток уточнить команду, потому что вы можете затем использовать подстановку истории, чтобы повторить команду для редактора.
источник
Должно быть, я здесь упустил, потому что я бы использовал:
(если бы я знал, что был только один в моем
:echo &path
) или, если бы я хотел их всех:Редактировать: Вау! Хорошо, так что я сделал промах точки - вы хотите найти список, а не сами файлы открыли? Попробуйте (опять же изнутри Vim):
-- моя вина :)
источник
Как отметил @davidmh в комментариях, вы можете использовать
xargs
с флагом,-o
если вы хотите использовать интерактивное приложение.Если вы не используете
-o
, вы, вероятно, испортите состояние терминала после выхода из vim. Если вы сделали это, вы сможете перезагрузить свой терминал с помощью следующей команды:источник
Я написал функцию,
pvim
которая делает то, что вы хотите. Если кpvim
нему передаются несколько строк, игнорируются все, кроме первой, его можно расширить, хотя бы открыть несколько файлов в vim.Используйте это как:
который загрузит первый "foo.txt" в vim так же, как если бы вы набрали:
vim $(find . -name "foo.txt | head -n1")
источник
Вот более простое
xargs
решение, чем те, которые уже упоминались:-p
Опция указывает ,vim
чтобы открыть каждый файл в отдельной вкладке. Я считаю это более удобным, чем использование буферов.источник
Я обнаружил, что открытие файла с помощью
locate
inim очень удобно и намного быстрее, чемfind
.Следующая команда ищет файл, вызванный
app.py
по пути, содержащему каталогMyPythonProject
.источник