🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

มาเรียนรู้คำสั่งพื้นฐานและฟังก์ชันแสนสะดวกของ Zsh กัน (การเติมคำสั่ง, ประวัติ, globbing)

ในบทความที่แล้ว คุณได้ติดตั้ง Oh My Zsh และน่าจะทำให้สภาพแวดล้อม Zsh ของคุณมีทั้งหน้าตาและฟังก์ชันที่ทรงพลังขึ้นอย่างมาก การปรับแต่งด้วย alias, ธีม, และปลั๊กอินเป็นเสน่ห์อย่างหนึ่งของ Zsh แต่จริงๆ แล้ว Zsh นั้นมีฟังก์ชันที่ทรงพลังและสะดวกสบายมากมายติดตั้งมาในตัวโดยไม่ต้องพึ่งพาเครื่องมือภายนอกเหล่านี้เลย

เหตุผลส่วนใหญ่ที่คนที่ย้ายมาจากเชลล์อื่นอย่าง Bash แล้วหลงรัก Zsh ก็เพราะความฉลาดและความใส่ใจในรายละเอียดของ "ฟังก์ชันมาตรฐาน" เหล่านี้นี่เอง มันให้ความรู้สึกเหมือนมีเลขานุการเก่งๆ คอยอยู่ข้างๆ และคาดเดางานของคุณล่วงหน้าเพื่อคอยช่วยเหลือ

ในบทความนี้ เราจะเน้นไปที่ 3 เสาหลักอันทรงพลังที่ Zsh มีมาแต่กำเนิด ได้แก่ "ฟังก์ชันการเติมคำสั่ง", "ฟังก์ชันประวัติคำสั่ง", และ "Globbing (การขยายชื่อไฟล์)" พร้อมอธิบายวิธีใช้งานอย่างเป็นรูปธรรม หากคุณใช้ฟังก์ชันเหล่านี้จนคล่องแล้ว รับรองได้เลยว่าการทำงานบนคอมมานด์ไลน์ของคุณจะรวดเร็วและสะดวกสบายขึ้นอีกระดับอย่างแน่นอน!


1. ฉลาดระดับเดาคำล่วงหน้า! "ฟังก์ชันการเติมคำสั่ง" ของ Zsh

ถ้าจะพูดถึงฟีเจอร์เด็ดของ Zsh คงหนีไม่พ้น "ฟังก์ชันการเติมคำสั่ง" นี้ เพียงแค่กดปุ่ม Tab มันก็จะให้การสนับสนุนที่ฉลาดอย่างน่าทึ่ง ซึ่งเหนือกว่าแค่การเติมชื่อไฟล์ธรรมดาๆ

การเติมออปชันของคำสั่ง

ไม่ต้องมานั่งค้นหาคู่มืออีกต่อไปเวลาที่คิดว่า "คำสั่งนี้มันมีออปชันอะไรให้ใช้บ้างนะ..." เพียงแค่พิมพ์คำสั่งตามด้วย - แล้วกด Tab มันก็จะแสดงรายการออปชันที่ใช้ได้ขึ้นมาให้ทันที

$ ls -[กด Tab]
--all                             -A --almost-all                 -B --ignore-backups
--author                          -d --directory                  -D --dired
--color                           -F --classify                   -G --no-group
... (และอื่นๆ) ...

ยิ่งไปกว่านั้น คุณยังสามารถใช้ปุ่มลูกศรเพื่อเลือกตัวเลือก และมันยังแสดงคำอธิบายว่าแต่ละออปชันทำหน้าที่อะไรอีกด้วย


อ่านบริบทและสลับตัวเลือกการเติมคำสั่ง

Zsh เข้าใจว่าคำสั่งที่คุณกำลังพิมพ์ต้องการอะไร และจะสลับตัวเลือกการเติมคำสั่งให้อย่างชาญฉลาด

ตัวอย่างเช่น หากคุณกด Tab หลังจากพิมพ์คำสั่ง kill ที่ใช้สำหรับปิดโปรเซส มันจะแสดงรายชื่อโปรเซสที่กำลังทำงานอยู่ขึ้นมาเป็นตัวเลือกแทนที่จะเป็นชื่อไฟล์

$ kill [กด Tab]
101 zsh      102 login    103 top      104 sshd
...

2. "ฟังก์ชันประวัติ" ที่รู้ใจไปถึงไหนๆ

ฟังก์ชันประวัติ (history) ที่ใช้เรียกคำสั่งที่เคยรันไปแล้วกลับมาใช้ใหม่นั้น Zsh ก็ทำได้ฉลาดกว่า Bash มาก

การค้นหาประวัติแบบเพิ่มทีละส่วน

เมื่อคุณคิดว่า "อยากใช้คำสั่ง git ยาวๆ ที่เคยพิมพ์ไปแล้วอีกครั้ง..." ใน Zsh คุณเพียงแค่พิมพ์ส่วนเริ่มต้นของคำสั่ง (เช่น git) แล้วกดปุ่ม ↑ (ลูกศรขึ้น) ดูสิครับ

มันจะทำการค้นหาย้อนหลังเฉพาะประวัติคำสั่งที่ขึ้นต้นด้วย git เท่านั้น ไม่ใช่จากประวัติคำสั่งทั้งหมด ซึ่งช่วยให้คุณค้นหาคำสั่งที่ต้องการได้รวดเร็วกว่าอย่างมาก

รันคำสั่งล่าสุดซ้ำด้วย `!!`

!! เป็น alias พิเศษที่จะขยายเป็นคำสั่งล่าสุดที่เพิ่งรันไป มันจะแสดงความสามารถได้เต็มที่เมื่อคุณลืมใส่ sudo

$ apt update
E: Could not open lock file ... Permission denied
$ sudo !!
sudo apt update
...

เพียงแค่พิมพ์ sudo !! มันก็จะรันคำสั่ง sudo apt update ให้อีกครั้ง ประสิทธิภาพในการประหยัดเวลานี้สุดยอดไปเลยครับ


3. "Globbing" เจ้าแห่งการเลือกไฟล์

Globbing คือฟังก์ชันที่ใช้อักขระตัวแทนอย่าง * เพื่อระบุไฟล์หลายๆ ไฟล์ในคราวเดียว ใน Zsh ฟังก์ชันนี้ถูกขยายความสามารถออกไปอย่างมาก และถูกเรียกว่า "Extended Globbing" (การใช้งานต้องตั้งค่า setopt EXTENDED_GLOB ซึ่งหากใช้ Oh My Zsh ส่วนใหญ่มักจะเปิดใช้งานเป็นค่าเริ่มต้นอยู่แล้ว)

การค้นหาไฟล์แบบวนซ้ำ (**)

การใช้ ** จะทำให้คุณสามารถค้นหาไฟล์ที่อยู่ลึกเข้าไปในไดเรกทอรีย่อยได้ในคำสั่งเดียว

# แสดงรายการไฟล์ .js ทั้งหมดในไดเรกทอรีย่อยทุกชั้น
ls -l **/*.js

การค้นหาแบบ OR (|)

คุณสามารถใช้ | เพื่อระบุไฟล์ตามเงื่อนไข "A หรือ B" ได้

# แสดงรายการไฟล์ .jpg หรือ .png
ls *.(jpg|png)

การค้นหาแบบ NOT (^)

คุณสามารถใช้ ^ เพื่อระบุ "ไฟล์อื่นๆ ที่ไม่ใช่..." ได้

# แสดงรายการทุกอย่างยกเว้นไฟล์ .log
ls ^*.log

การระบุช่วงของตัวเลข (<->)

เหมาะสำหรับใช้ระบุไฟล์ที่มีหมายเลขเรียงกันเฉพาะช่วงที่ต้องการ

# แสดงรายการตั้งแต่ image1.jpg ถึง image10.jpg
ls image<1-10>.jpg

สรุป

ในครั้งนี้ เราได้แนะนำฟังก์ชันอำนวยความสะดวกบางส่วนที่ติดตั้งมาเป็นมาตรฐาน ซึ่งเป็นที่มาของฉายา "สุดยอดเชลล์" ของ Zsh

ฟังก์ชันเหล่านี้อาจดูเหมือนเป็นการปรับปรุงเล็กๆ น้อยๆ แต่เมื่อรวมกันในการทำงานประจำวันแล้ว จะช่วยเพิ่มประสิทธิภาพการทำงานของคุณได้อย่างมาก Zsh ไม่ใช่แค่เครื่องมือสำหรับรันคำสั่ง แต่เป็นเหมือน "คู่หู" ที่คอยสนับสนุนการทำงานของคุณอย่างเต็มที่

สำหรับผู้ที่เริ่มคิดจะย้ายจาก Bash มาใช้ Zsh อย่างจริงจัง ในบทความหน้า เราจะมาสรุปข้อควรระวังเกี่ยวกับความเข้ากันได้เมื่อรันสคริปต์ Bash บน Zsh และจุดตรวจสอบเพื่อให้การย้ายเป็นไปอย่างราบรื่น

รวมจุดตรวจสอบความเข้ากันได้สำหรับผู้ที่ย้ายจาก Bash มา Zsh