.md
พัฒนา & ตั้งค่าเครื่องมือเริ่มต้นได้เลยอัปเดต 2026-09-27

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. 1เปิด Claude Code หรือ Codex CLI ที่โฟลเดอร์ไหนก็ได้ พรอมป์นี้แก้แค่ไฟล์ในเครื่อง (~/.zshrc) ไม่แตะโปรเจกต์
  2. 2กดปุ่มคัดลอกด้านบน แล้ววางพรอมป์ทั้งก้อนลงไป
  3. 3อ่านสรุปตอนที่ AI สำรวจเครื่องเสร็จ ถ้ามันบอกว่ามีของบางอย่างอยู่แล้ว (เช่น oh-my-zsh) มันจะไม่ใส่ซ้ำ
  4. 4พอเสร็จ ปิด Terminal แล้วเปิดใหม่ ลองพิมพ์ต้นคำสั่งแล้วกดลูกศรขึ้น กับลองกด Ctrl+R

ตัวพรอมป์

The prompt · 65 บรรทัด

ให้ AI อ่านเอง: madebytle.com/prompt/zsh-command-history-search-fzf.md

ช่วยตั้งค่า terminal (zsh) ของฉันให้ค้นหาคำสั่งเก่า ๆ ได้ง่ายขึ้น ฉันชอบกดลูกศรขึ้นหาคำสั่งที่เคยพิมพ์ แต่บ่อยครั้งจำได้แค่ลาง ๆ ว่ามีคำอะไรอยู่ในคำสั่ง

ทำ 3 อย่างนี้ให้:

  1. กดลูกศรขึ้นแบบกรอง — พิมพ์ต้นคำสั่ง เช่น git แล้วกด ↑ ต้องเจอแค่คำสั่งที่ขึ้นต้นด้วย git (ถ้าบรรทัดว่าง กด ↑ ก็ไล่ทุกคำสั่งเหมือนเดิม)
  2. ขยายประวัติคำสั่ง เป็น 50,000 คำสั่ง แชร์ประวัติข้ามทุกหน้าต่าง/แท็บ ตัดคำสั่งซ้ำ และคำสั่งที่พิมพ์ช่องว่างนำหน้าไม่ต้องบันทึก (เอาไว้ใช้ตอนพิมพ์คำสั่งที่มีรหัสผ่านหรือ token)
  3. ติดตั้ง 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 ก็ นัดคุยได้เลย