Близько 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
та очікуйте більш обмежений набір функцій.