Близько 5 разів на день я набираю "vi", коли я мав на увазі "cd", і, нарешті, відкриваю каталог у vi. Це змушує мене горіхів. Здається, що має бути спосіб виявити, коли я набираю "vi + каталог" і автоматично змінюю його на "cd + каталог". Думки?
Близько 5 разів на день я набираю "vi", коли я мав на увазі "cd", і, нарешті, відкриваю каталог у vi. Це змушує мене горіхів. Здається, що має бути спосіб виявити, коли я набираю "vi + каталог" і автоматично змінюю його на "cd + каталог". Думки?
Відповіді:
З припущенням, що ви дзвоните viз каталогом як останній аргумент:
vi() {
if [[ -d ${!#} ]]; then
cd "$@"
else
command vi "$@"
fi
}
rmдо rm -i, який за замовчуванням в багатьох дистрибутивах. Я взагалі думаю, що найкращий спосіб вирішити проблеми - це вирішити користувача, а не працювати над ними.
rmщоб rm -iмогло б врятувати вас деякі проблеми в минулому , але може (і , ймовірно , буде) отримати вас в набагато більше проблем у майбутньому ...
viу питанні ...
${!#}опосередковано посилається на остаточний аргумент, і commandце потрібно лише для уникнення рекурсії функції в цьому випадку.
Окрім відповіді @ChrisDown, ще один підхід: обхід каталогів
При такому підході ви можете:
vi ./*
і він запуститься vi на всіх файлах у поточному каталозі, навіть якщо він містить підкаталоги, минаючи ці підкаталоги
vi() {
for arg do
[ -d "$arg" ] || set -- "$@" "$arg"
shift
done
[ "$#" -gt 0 ] && command vi "$@"
}
Це просто робити vi, на будь-якому аргументі, який не є каталогами ... Отже, він не навчить вас використовувати "vi" для "cd";)
І він не зателефонує vi, якщо ви тільки що зробили: vi somedirectory (тобто, вводити помилку vi замість cd). Але він автоматично не буде там, тож ви все ще пам’ятаєте, що вам потрібно набрати cd ^^
Я використовував "сумісний" спосіб зміни списків аргументів, щоб він був переносним для багатьох платформ.
command somethingзапускає команду "щось" (тобто, перше виникнення "чогось", знайденого за допомогою $ PATH) замість будь-якої функції псевдоніму АБО, що називається "щось". \somethingлише обходив би псевдонім, але все-таки функцію, якби вона існувала (і тут, це означало б, що функція "vi" називала б себе і циклом).
Одне рішення - cdвзагалі припинити використання . Покладіть shopt -s autocdу своє .bashrcчи setopt autocdу своє .zshrc. Потім, щоб перейти в інший каталог, введіть ім'я каталогу без жодної команди.
Не забудьте ввести, viякщо ви хочете редагувати файл.
Якщо ви дійсно хочете, щоб одна команда змінила каталог або редагувала файл, ви можете зробити його функцією:
vi () {
if [ $# -eq 1 ] && [ -d "$1" ]; then
cd -- "$1"
else
command vi "$@"
fi
}
Використовуйте функцію псевдоніму в Unix. Як тільки ви отримаєте псевдонім cd to vi, проблема буде вирішена.
viбез зміни вручну псевдоніму, що видається вкрай небажаним.
vim.
vim. Якщо вона недоступна, використовуйте viта очікуйте більш обмежений набір функцій.