Как эффективно использовать вывод команды find для редактирования файлов в vim
В командной строке Linux часто возникают задачи быстрого поиска файлов и их последующего редактирования. Примером может служить поиск конфигурационных файлов docker-compose.yml
и открытие их в редакторе vim в режиме только для чтения (vim -R
). В данной статье рассмотрим несколько способов решения такой задачи, включая использования переменных, пользовательских функций и трюков с терминалом.
Использование команды mkdir и переменной $_
— краткий пример
Часто в оболочке Bash можно видеть трюк с переменной $_
, которая содержит последний аргумент предыдущей команды. Например, при создании папки и переходе в неё:
bash
mkdir somefolder
cd $
Переменная $_
подставляет some_folder
из предыдущей команды. Однако стоит понимать, что этот трюк работает только с аргументами команд, а не с их выводом (stdout).
Невозможность напрямую использовать вывод команды find в последующих командах без переменной
Если вы пытаетесь выполнить команду поиска:
bash
find . -name "docker-compose*"
и затем сразу открыть найденный файл в vim:
bash
vim -R ???
то подставлять напрямую вывод find нельзя без дополнительной обработки. Почему?
- Shell не сохраняет вывод внешней команды как переменную автоматически.
- Последовательность вывода может быть разной по длине и количеству строк.
- Использование
|
(пайпов) илиxargs
усложняет процесс и не всегда подходит, если вы хотите просто быстро скопировать-подставить путь.
Использование переменной для хранения результата поиска
Самый очевидный и простой способ — сохранить результат вывода в переменную:
bash
res=$(find . -name "docker-compose*")
Затем можно посмотреть содержимое переменной:
bash
echo "$res"
и открыть файл в vim, если результат только один:
bash
vim -R "$res"
Если найденных файлов несколько, переменную нужно обрабатывать иначе, чтобы не получить ошибку.
Автоматизация с помощью пользовательской функции в Bash
Чтобы упростить процесс и сделать его более удобным, можно написать функцию, которая:
- Выполняет поиск
- Если найден один файл — автоматически открывает его в vim
- Если файлов несколько — выводит список
Пример функции vimfind
:
bash
vimfind() {
local results=()
while IFS= read -r line; do
results+=("$line")
done < <(find . -name "$1")
if (( ${#results[@]} == 1 )); then
vim -R "${results[0]}"
elif (( ${#results[@]} > 1 )); then
printf ‘%s\n’ "${results[@]}"
else
echo "Ничего не найдено."
fi
}
Использование:
bash
vimfind "docker-compose*"
Эта функция значительно повышает удобство работы и снижает количество ошибок.
Автоматизация вставки последнего вывода команды с помощью tmux и Bash
В терминальном мультиплексоре tmux
можно автоматизировать вставку последней строки вывода команды (например, результата find
) прямо в командную строку.
Пример функции и привязки клавиш:
bash
_paste_last_output() {
local output
output="$(tmux capture-pane -pJ | grep -v ‘^$’ | grep -v ‘^user@.:.$ ‘ | tail -n 1)"
output="${output@Q}"
READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}${output}${READLINE_LINE:$READLINE_POINT:${#READLINE_LINE}}"
READLINE_POINT=$((READLINE_POINT + ${#output}))
}
bind -x ‘"\C-x\C-v":_paste_last_output’
- Замените шаблон
^user@.*:.*$
под вашу командную строку. - После вызова функции сочетанием
<Ctrl+x><Ctrl+v>
последняя строка вывода будет вставлена в текущий ввод. - Это автоматизирует процесс копирования и вставки найденного пути без лишних действий.
Ограничения и нюансы самостоятельного копирования вывода
- Переменная
$_
не хранит вывод команды. - Не всегда можешь подставлять несколько результатов одной командой.
- Автоматизация с tmux требует правильной настройки и понимания текущего окружения.
- При нескольких найденных результатах лучше вывести список и выбрать нужный вручную.
Заключение
Для эффективного поиска и открытия файлов, например, docker-compose.yml
, рекомендуются следующие практики:
- Использование переменных для хранения вывода команды
find
. - Создание пользовательских функций для автоматизации рутины.
- При необходимости использования терминальных мультиплексоров, таких как tmux — можно автоматизировать вставку вывода команд.
- При большом количестве результатов лучше выводить их список и вручную выбирать нужный файл.
Используя описанные методы, вы заметно повысите скорость и удобство работы в терминале при редактировании найденных файлов.
Ключевые слова для SEO:
find, vim, bash, shell, команды linux, переменные bash, редактирование файлов, скрипты bash, tmux, автоматизация терминала, docker-compose, поиск файлов, пользовательские функции bash