Upgrade zsh Command History Search
ค้นคำสั่งเก่าใน Terminal ให้เจอ แม้จำได้แค่ลาง ๆ
พรอมป์ให้ AI ตั้งค่า zsh ให้กดลูกศรขึ้นแบบกรองได้ เก็บประวัติ 50,000 คำสั่ง และกด Ctrl+R ค้นแบบพิมพ์ไม่ครบก็เจอ สำรองไฟล์ให้ก่อนแก้ทุกครั้ง
พรอมป์นี้ทำอะไร
What this prompt does
คนส่วนใหญ่หาคำสั่งเก่าด้วยการกดลูกศรขึ้นทีละครั้ง แล้วยอมแพ้เมื่อคำสั่งที่อยากได้อยู่ลึกไปหลายร้อยบรรทัด พรอมป์นี้ให้ AI สำรวจ zsh ของเครื่องก่อน สำรอง ~/.zshrc แล้วเพิ่มสามอย่างเป็นบล็อกเดียวที่ลบทิ้งได้ง่าย คือลูกศรขึ้นที่กรองตามคำที่พิมพ์ไว้แล้ว ประวัติที่ใหญ่ขึ้นมากและแชร์กันทุกหน้าต่าง และ fzf ที่ทำให้ Ctrl+R กลายเป็นลิสต์ค้นหาแบบพิมพ์ไม่ครบก็เจอ ปิดท้ายด้วยการเช็คว่าปุ่มลัดโหลดจริง แล้วอธิบายวิธีใช้เป็นภาษาคนทั่วไป
Most people scroll through shell history one arrow press at a time and give up when the command they want is a few hundred entries back. This prompt has an AI agent inspect the existing zsh setup first, back up ~/.zshrc, then add three things in one removable block: arrow keys that filter by what you've already typed, a much larger history shared across every terminal window, and fzf so Ctrl+R becomes a fuzzy search list. It ends by verifying the key bindings actually loaded and explaining how to use them in plain language.
ใช้ตอนไหน
- จำได้ลาง ๆ ว่าเคยพิมพ์คำสั่งยาว ๆ ไว้ มีคำว่า deploy หรือ docker อยู่สักที่ แต่ต้องกดลูกศรขึ้นไล่ไปทีละบรรทัด
- พิมพ์คำสั่งในหน้าต่างหนึ่ง แล้วเปิดอีกหน้าต่างกดลูกศรขึ้นหาไม่เจอ
- คำสั่งที่ใช้เมื่อเดือนก่อนหายไปจากประวัติแล้ว เพราะเครื่องเก็บไว้แค่ไม่กี่พันบรรทัด
- เพิ่งเริ่มใช้ Terminal กับ AI coding tool แล้วอยากได้ท่าพื้นฐานที่ใช้ทุกวัน โดยไม่ต้องไปนั่งอ่านคู่มือ zsh เอง
ได้อะไรกลับมา
- พิมพ์ git แล้วกดลูกศรขึ้น จะเจอแค่คำสั่งที่ขึ้นต้นด้วย git
- กด Ctrl+R แล้วขึ้นเป็นลิสต์ พิมพ์ vcl prod ก็เจอ vercel deploy --prod
- ประวัติเก็บได้ 50,000 คำสั่ง ไม่มีตัวซ้ำ และทุกหน้าต่างเห็นประวัติชุดเดียวกัน
- คำสั่งที่พิมพ์ช่องว่างนำหน้าจะไม่ถูกบันทึก ใช้ตอนพิมพ์คำสั่งที่มี token หรือรหัสผ่าน
- ไฟล์สำรอง ~/.zshrc.bak-<วันที่> ถ้าไม่ชอบก็ก๊อปทับกลับได้ทันที
วิธีใช้
How to use
- 1เปิด Claude Code หรือ Codex CLI ที่โฟลเดอร์ไหนก็ได้ พรอมป์นี้แก้แค่ไฟล์ในเครื่อง (~/.zshrc) ไม่แตะโปรเจกต์
- 2กดปุ่มคัดลอกด้านบน แล้ววางพรอมป์ทั้งก้อนลงไป
- 3อ่านสรุปตอนที่ AI สำรวจเครื่องเสร็จ ถ้ามันบอกว่ามีของบางอย่างอยู่แล้ว (เช่น oh-my-zsh) มันจะไม่ใส่ซ้ำ
- 4พอเสร็จ ปิด Terminal แล้วเปิดใหม่ ลองพิมพ์ต้นคำสั่งแล้วกดลูกศรขึ้น กับลองกด Ctrl+R
ตัวพรอมป์
The prompt · 65 บรรทัด
ให้ AI อ่านเอง: madebytle.com/prompt/zsh-command-history-search-fzf.md
Mission: Upgrade zsh command history search
ช่วยตั้งค่า terminal (zsh) ของฉันให้ค้นหาคำสั่งเก่า ๆ ได้ง่ายขึ้น ฉันชอบกดลูกศรขึ้นหาคำสั่งที่เคยพิมพ์ แต่บ่อยครั้งจำได้แค่ลาง ๆ ว่ามีคำอะไรอยู่ในคำสั่ง
ทำ 3 อย่างนี้ให้:
- กดลูกศรขึ้นแบบกรอง — พิมพ์ต้นคำสั่ง เช่น
gitแล้วกด↑ต้องเจอแค่คำสั่งที่ขึ้นต้นด้วยgit(ถ้าบรรทัดว่าง กด↑ก็ไล่ทุกคำสั่งเหมือนเดิม) - ขยายประวัติคำสั่ง เป็น 50,000 คำสั่ง แชร์ประวัติข้ามทุกหน้าต่าง/แท็บ ตัดคำสั่งซ้ำ และคำสั่งที่พิมพ์ช่องว่างนำหน้าไม่ต้องบันทึก (เอาไว้ใช้ตอนพิมพ์คำสั่งที่มีรหัสผ่านหรือ token)
- ติดตั้ง
fzfแล้วผูกกับ zsh ให้Ctrl+Rขึ้นเป็นลิสต์ค้นหาแบบ fuzzy (พิมพ์คำไม่ครบ ไม่เรียงติดกันก็ยังเจอ) และCtrl+Tใช้ค้นไฟล์
กติกา
- สำรวจก่อนแก้ — เช็คว่า shell ที่ใช้คือ zsh จริงไหม (
echo $SHELL), อ่าน~/.zshrcทั้งไฟล์, เช็คว่ามี oh-my-zsh / prezto / fzf / atuin / zsh-autosuggestions อยู่แล้วไหม และค่าHISTSIZE/SAVEHISTตอนนี้เป็นเท่าไหร่ (macOS ตั้งไว้ใน/etc/zshrc) แล้วสรุปให้ฉันฟังสั้น ๆ ก่อนลงมือ - ถ้า shell ไม่ใช่ zsh (เช่น bash) ให้หยุดแล้วบอกฉันก่อน อย่าเอา config ของ zsh ไปใส่ไฟล์ของ bash
- สำรอง
~/.zshrcก่อนแตะ เป็น~/.zshrc.bak-<วันที่วันนี้> - ถ้ามีการตั้งค่าเรื่องเดียวกันอยู่แล้ว (เช่น oh-my-zsh เปิดลูกศรกรองให้แล้ว หรือมีบรรทัดโหลด fzf อยู่แล้ว) อย่าใส่ซ้ำ บอกฉันว่ามีอยู่แล้ว
- เพิ่ม config ใหม่ ต่อท้ายไฟล์เป็นบล็อกเดียว มีหัวข้อ comment ชัด ๆ จะได้หาเจอและลบออกง่ายถ้าไม่ชอบ ห้ามแก้บรรทัดเดิมที่มีอยู่
- ติดตั้ง fzf ด้วยตัวจัดการแพ็กเกจของเครื่อง (macOS ใช้
brew install fzf, Linux ใช้apt/dnf/pacmanตามที่มี) ถ้าไม่มีตัวจัดการแพ็กเกจเลย ให้บอกฉันก่อน อย่าไปโหลดสคริปต์จากเว็บมารันเอง
config ที่ต้องการ (ปรับได้ถ้าเครื่องต่างออกไป)
# --- command history (bigger + shared + searchable) ---
HISTSIZE=50000
SAVEHIST=50000
setopt EXTENDED_HISTORY # record timestamp of each command
setopt SHARE_HISTORY # share history across open terminals/panes
setopt HIST_IGNORE_ALL_DUPS # drop older duplicate entries
setopt HIST_IGNORE_SPACE # commands starting with a space are not saved
setopt HIST_REDUCE_BLANKS
# Up/Down arrows: type a prefix (e.g. "git") then only matching history shows
autoload -U up-line-or-beginning-search down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
bindkey '^[[A' up-line-or-beginning-search
bindkey '^[OA' up-line-or-beginning-search
bindkey '^[[B' down-line-or-beginning-search
bindkey '^[OB' down-line-or-beginning-search
# fzf: Ctrl+R = fuzzy history search list, Ctrl+T = pick a file
source <(fzf --zsh)
fzf --zshใช้ได้กับ fzf เวอร์ชัน 0.48 ขึ้นไป ถ้าเวอร์ชันเก่ากว่านั้น ให้ใช้วิธีผูกตามที่ fzf เวอร์ชันนั้นแนะนำแทน
ตรวจว่าใช้ได้จริง
รันคำสั่งนี้ แล้วต้องเห็น HISTSIZE=50000, ^R ผูกกับ fzf-history-widget และลูกศรขึ้นผูกกับ up-line-or-beginning-search:
zsh -i -c 'echo HISTSIZE=$HISTSIZE SAVEHIST=$SAVEHIST; bindkey "^R"; bindkey "^[[A"'
ถ้าขึ้นเตือน can't change option: zle ไม่ต้องตกใจ เป็นเพราะ zsh -c ไม่ได้เปิดหน้าจอจริง ไม่ใช่ config ผิด
สรุปให้ฉันตอนจบ
ใช้ภาษาง่าย ๆ ฉันไม่ใช่โปรแกรมเมอร์:
- เปลี่ยนอะไรไปบ้าง และไฟล์สำรองอยู่ที่ไหน (วิธีย้อนกลับ)
- ต้องปิด terminal แล้วเปิดใหม่ หรือพิมพ์
source ~/.zshrcก่อนถึงจะใช้ได้ - วิธีใช้แต่ละอย่างแบบสั้น ๆ: ลูกศรขึ้นแบบกรอง,
Ctrl+R(เลือกด้วย↑↓,Enterเอามาใส่บรรทัด,Escยกเลิก),Ctrl+T, การพิมพ์ช่องว่างนำหน้าเพื่อไม่ให้บันทึก - ท่าเสริมที่ไม่ต้องติดตั้งอะไร:
history | grep คำที่จำได้แล้ว!เลขเพื่อรันซ้ำ,!!รันคำสั่งล่าสุด - ถ้าฉันใช้ AI coding tool ที่มีกล่องพิมพ์ของตัวเอง (เช่น Claude Code) ให้บอกด้วยว่า
Ctrl+Rในนั้นเป็นระบบของตัวแอปเอง ไม่ได้ใช้ fzf ตัวนี้
ข้อควรรู้
Notes from using it
ใช้จริงบน MacBook ที่เป็น zsh ค่าเริ่มต้นของ macOS ซึ่งเก็บประวัติไว้แค่ 1,000 คำสั่ง ตอนเช็คผลด้วย zsh -i -c จะมีคำเตือน can't change option: zle โผล่มา ไม่ต้องสนใจ เป็นเพราะคำสั่งเช็คไม่ได้เปิดหน้าจอจริง ถ้าใช้ oh-my-zsh อยู่แล้ว ลูกศรขึ้นแบบกรองมักเปิดไว้ให้แล้ว ที่ได้เพิ่มจริง ๆ จะเหลือแค่ประวัติที่ใหญ่ขึ้นกับ fzf
คำถามที่เจอบ่อย
FAQ
มันจะทับการตั้งค่าเดิมใน ~/.zshrc ไหม?
ไม่ทับ พรอมป์สั่งให้สำรองไฟล์ก่อน แล้วเพิ่มของใหม่เป็นบล็อกเดียวต่อท้ายไฟล์ ห้ามแก้บรรทัดเดิม ถ้ามีการตั้งค่าเรื่องเดียวกันอยู่แล้วก็ให้ข้ามและบอกคุณแทน
ใช้กับ bash ได้ไหม?
ไม่ได้ตรง ๆ config ในพรอมป์เป็นของ zsh พรอมป์เลยสั่งให้หยุดถามก่อนถ้าเจอว่าเครื่องใช้ bash macOS รุ่นใหม่ ๆ ใช้ zsh เป็นค่าเริ่มต้นอยู่แล้ว
ใช้กับ Windows ได้ไหม?
ใช้ได้ถ้ารันใน WSL ที่ใช้ zsh ถ้าเป็น PowerShell หรือ Command Prompt ปกติ ใช้ไม่ได้ เพราะเป็น shell คนละตัว
Ctrl+R ใน Claude Code จะเปลี่ยนตามไหม?
ไม่เปลี่ยน กล่องพิมพ์ของ Claude Code มี Ctrl+R ของตัวเอง ใช้ค้นข้อความที่เคยพิมพ์สั่ง Claude ส่วน fzf มีผลเฉพาะตอนพิมพ์คำสั่งใน Terminal ตรง ๆ
ถ้าไม่ชอบ จะย้อนกลับยังไง?
ก๊อปไฟล์ ~/.zshrc.bak-<วันที่> ทับ ~/.zshrc แล้วเปิด Terminal ใหม่ หรือลบบล็อกที่ขึ้นต้นด้วย # --- command history ออกจากท้ายไฟล์ ส่วน fzf ถ้าจะลบด้วยก็ brew uninstall fzf
พรอมป์นี้ใช้ได้ผลไหม
กดบอกไว้หน่อยครับ ไม่ต้องล็อกอิน — ตัวที่คนกดว่าใช้ไม่ได้ผลจะถูกเอาไปขัดใหม่ก่อน
แก้เองแล้วดีขึ้น อยากส่งเวอร์ชันที่ดีกว่ากลับมา หรืออยากให้ทำพรอมป์เรื่องไหนเพิ่ม — แจ้งที่ GitHub · ไม่มีบัญชี GitHub ก็ นัดคุยได้เลย