Günde yaklaşık 5 kez, "cd" yazarken "vi" yazarım ve vi dizini açıyorum. Bu beni fındık yapıyor. "Vi + dizini" ne zaman yazıp otomatik olarak "cd + dizini" olarak değiştirdiğimde bunu algılamanın bir yolu olmalı gibi görünüyor. Düşünceler?
Günde yaklaşık 5 kez, "cd" yazarken "vi" yazarım ve vi dizini açıyorum. Bu beni fındık yapıyor. "Vi + dizini" ne zaman yazıp otomatik olarak "cd + dizini" olarak değiştirdiğimde bunu algılamanın bir yolu olmalı gibi görünüyor. Düşünceler?
Yanıtlar:
vi
Dizini ile son argüman olarak çağırdığınız varsayımıyla :
vi() {
if [[ -d ${!#} ]]; then
cd "$@"
else
command vi "$@"
fi
}
rm
için rm -i
birçok dağılımları varsayılan olan. Genel olarak sorunları çözmenin en iyi yolunun, etraflarında çalışmak yerine kullanıcıyı çözmek olduğunu düşünüyorum.
rm
için rm -i
... gelecekte çok daha bela seni içeri (edecektir muhtemelen ve) size geçmişte ama kudretiyle bazı sorunlar kurtarmış olabilir
vi
soruyu söyledin ...
${!#}
dolaylı olarak son argümana atıfta bulunur ve command
yalnızca bu durumda fonksiyon özyinelemesini önlemek için gereklidir.
@ChrisDown cevabından ayrı olarak, işte bir başka yaklaşım: dizinleri atlamak
Bu yaklaşımla şunları yapabilirsiniz:
vi ./*
ve alt dizinleri içerse bile, bu alt dizinleri atlayarak mevcut dizindeki tüm dosyalarda vi başlayacaktır.
vi() {
for arg do
[ -d "$arg" ] || set -- "$@" "$arg"
shift
done
[ "$#" -gt 0 ] && command vi "$@"
}
Bu, sadece vi'yi, dizin olmayan herhangi bir argümanla yapar ... Bu nedenle, "cd" için "vi" kullanmayı öğretmeyecektir;)
Ve az önce yaptıysanız vi'yi aramaz: vi bazı dizini (yani cd yerine yanlış yazılmış vi). Ama o zaman otomatik olarak orada cd olmaz, bu yüzden hala cd ^^ yazmanız gerektiğini hatırlıyorsunuz
Argüman listelerini değiştirmek için "uyumlu" bir yöntem kullandım, böylece birçok platforma taşınabilir.
command something
"bir şey" komutunu başlatır (yani, "PATH" kullanılarak "$ PATH kullanılarak bulunan" bir şeyin "ilk oluşumu)," bir şey "olarak adlandırılan herhangi bir diğer ad yerine, yerine \something
sadece takma adı atlar, ancak eğer mevcut olsaydı hala işlevini kullanırdı (ve burada, bu "vi" işlevi kendini ve döngü anlamına gelir) anlamına gelirdi.
Çözümlerden biri cd
tamamen kullanmayı bırakmak . shopt -s autocd
Kendinizinkini .bashrc
veya kimliğinizi setopt autocd
girin .zshrc
. Sonra farklı bir dizine geçmek için herhangi bir komut kullanmadan dizin adını yazın.
vi
Bir dosyayı düzenlemek istiyorsanız yazmayı unutmayın .
Gerçekten bir dizine geçmek veya bir dosyayı düzenlemek için tek bir komut istiyorsanız, onu bir işlev haline getirebilirsiniz:
vi () {
if [ $# -eq 1 ] && [ -d "$1" ]; then
cd -- "$1"
else
command vi "$@"
fi
}
Unix'te takma ad özelliğini kullanın. Bir kere vi yi cd'ye taktığınızda sorun çözülecektir.
vi
oldukça istenmeyen görünen takma adı el ile geçersiz kılmadan kullanamayacağı anlamına gelir .
vim
bunun yerine doğru kullanmayı kullanmayı öğretir .
vim
. Mevcut değilse vi
, daha sınırlı özellik kümesini kullanın ve bekleyin.