ประมาณ 5 ครั้งต่อวันฉันพิมพ์ "vi" เมื่อฉันหมายถึง "cd" และท้ายที่สุดเปิดไดเรกทอรีใน vi มันทำให้ฉันถั่ว ดูเหมือนว่าควรมีวิธีการตรวจสอบเมื่อฉันพิมพ์ใน "vi + directory" และเปลี่ยนเป็น "cd + directory" โดยอัตโนมัติ คิด?
ประมาณ 5 ครั้งต่อวันฉันพิมพ์ "vi" เมื่อฉันหมายถึง "cd" และท้ายที่สุดเปิดไดเรกทอรีใน vi มันทำให้ฉันถั่ว ดูเหมือนว่าควรมีวิธีการตรวจสอบเมื่อฉันพิมพ์ใน "vi + directory" และเปลี่ยนเป็น "cd + directory" โดยอัตโนมัติ คิด?
คำตอบ:
ด้วยสมมติฐานที่คุณโทรหา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 (เช่น mistyped vi แทนที่จะเป็น cd) แต่มันจะไม่ 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 ถึง vi ปัญหาจะได้รับการแก้ไข
vi
หากไม่มีการแทนที่นามแฝงด้วยตนเองซึ่งดูเหมือนจะไม่เป็นที่ต้องการอย่างมาก
vim
แทน
vim
หากคุณคาดว่าจะใช้คุณสมบัติเป็นกลุ่มใช้ หากไม่มีให้ใช้vi
และคาดว่าจะมีชุดคุณสมบัติที่ จำกัด มากขึ้น