1 คะแนน โดย GN⁺ 2026-01-04 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • สามารถใช้งานได้อย่างมีประสิทธิภาพสำหรับการสำรวจไฟล์ ค้นหา กรอง ตั้งบุ๊กมาร์ก และสลับออปชัน ผ่าน ความสามารถที่หลากหลายและชุดคีย์ลัดของคำสั่ง less
  • สามารถเปิดหลายไฟล์พร้อมกัน และ ย้าย เพิ่ม หรือลบไฟล์ระหว่างกันได้ด้วยคำสั่ง :n, :p, :e, :d
  • สามารถใช้ ความสามารถในการค้นหา (/, ?, n, N) และการกรอง (&, &!) เพื่อค้นหารูปแบบที่ต้องการอย่างรวดเร็วหรือยกเว้นรูปแบบนั้นได้
  • บุ๊กมาร์ก (m, ') และความสามารถจับคู่เครื่องหมายวงเล็บ ช่วยให้การย้ายตำแหน่งในเอกสารยาวหรือไฟล์โค้ดง่ายขึ้น
  • สามารถ สลับออปชันระหว่างใช้งาน (-S, -R, -N เป็นต้น) และรันคำสั่งภายนอก (!) เพื่อปรับสภาพแวดล้อมได้ทันทีโดยไม่ต้องออกจาก less

การจัดการหลายไฟล์

  • less ไม่ได้เป็นแค่เครื่องมือที่ใช้ท้ายไปป์ไลน์เท่านั้น แต่ สามารถเปิดหลายไฟล์โดยส่งเป็นอาร์กิวเมนต์ได้โดยตรง
    • ตัวอย่าง: less file1 file2 file3
  • ระหว่างใช้งานก็สามารถ เพิ่มไฟล์ใหม่ ได้ด้วยคำสั่ง :e file.h
  • ใช้ :n เพื่อไปยัง ไฟล์ถัดไป, :p เพื่อไปยัง ไฟล์ก่อนหน้า, และ :x หรือ :rewind เพื่อ ย้อนกลับไปไฟล์แรก
  • สามารถใช้คำสั่ง :d เพื่อ ลบไฟล์ปัจจุบันออกจากรายการ ได้

ความสามารถในการนำทาง

  • หากพิมพ์ ตัวเลข+G เช่น 3141G จะเป็นการ ย้ายไปยังหมายเลขบรรทัดที่กำหนด
  • ตัวเลข+% เช่น 75% ใช้สำหรับ กระโดดไปยังตำแหน่งตามเปอร์เซ็นต์ของไฟล์
  • ใช้ /แพตเทิร์น เพื่อ ค้นหาไปข้างหน้า, ?แพตเทิร์น เพื่อ ค้นหาย้อนกลับ, และ n/N เพื่อ ไปยังผลลัพธ์ถัดไป/ก่อนหน้า
    • !แพตเทิร์น คือ ค้นหาบรรทัดที่ไม่ตรงกัน, * คือ ค้นหาข้ามหลายไฟล์, @ คือ เริ่มค้นหาจากไฟล์แรก, และ @* คือ ค้นหาทั้งหมดในทุกไฟล์

ความสามารถในการกรอง

  • ใช้ &แพตเทิร์น เพื่อ แสดงเฉพาะบรรทัดที่ตรงกับแพตเทิร์นดังกล่าว โดยทำงานคล้าย grep ภายใน
  • ใช้ &!แพตเทิร์น เพื่อ แสดงเฉพาะบรรทัดที่ไม่ตรงกับแพตเทิร์น ซึ่งมีประโยชน์เมื่อสำรวจไฟล์ล็อก

บุ๊กมาร์กและการจับคู่วงเล็บ

  • ใช้ m + ตัวอักษร เพื่อ ตั้งบุ๊กมาร์ก และใช้ ' + ตัวอักษร เพื่อ ย้ายกลับไปยังตำแหน่งนั้น
    • ตัวอย่าง: ใช้ mo ตั้งบุ๊กมาร์กที่ส่วน OPTIONS และ me ที่ส่วน EXAMPLES จากนั้นใช้ 'o, 'e เพื่อย้ายไปยังตำแหน่งนั้น
  • หากมีวงเล็บอย่าง (, [, { อยู่ที่บรรทัดแรกของหน้าจอ เมื่อกดวงเล็บนั้นจะกระโดดไปยังวงเล็บคู่ที่ตรงกัน
    • ในทางกลับกัน หากวงเล็บปิดอยู่ที่บรรทัดสุดท้าย ก็จะ ย้ายไปยังวงเล็บเปิด
  • สามารถ กำหนดคู่วงเล็บแบบกำหนดเอง ได้ด้วย alt+ctrl+b เป็นต้น

การสลับออปชันและรันคำสั่งภายนอก

  • ระหว่างใช้งานสามารถพิมพ์ - ตามด้วยออปชันเพื่อ เปลี่ยนการตั้งค่าได้ทันที
    • -S: สลับการตัดบรรทัด
    • -G: ไฮไลต์ผลการค้นหา
    • -i/-I: ตั้งค่าการแยกแยะตัวพิมพ์เล็ก-ใหญ่
    • -R: แสดงสี ANSI
    • -N/-n: แสดง/ซ่อนหมายเลขบรรทัด
  • สามารถใช้คำสั่ง ! เพื่อ รันคำสั่งภายนอก ได้ (!date, !bc เป็นต้น)

ตัวแปรสภาพแวดล้อมและความสามารถอื่น ๆ

  • ออปชันที่ใช้บ่อยสามารถเก็บไว้ใน ตัวแปรสภาพแวดล้อม $LESS ได้
    • ตัวอย่าง: LESS="-RNe" → แสดงสี, แสดงหมายเลขบรรทัด, และออกอัตโนมัติเมื่อถึงท้ายไฟล์
  • ใช้คำสั่ง v เพื่อ เปิดไฟล์ปัจจุบันด้วยตัวแก้ไข $VISUAL
  • ใช้คำสั่ง o หรือ O เพื่อ บันทึกเนื้อหาที่อ่านจากมาตรฐานอินพุตลงไฟล์ ได้
  • less รองรับ ความสามารถกระโดดตามแท็ก ที่อิงกับ ctags แต่ไม่ได้ถูกใช้งานบ่อยนัก

1 ความคิดเห็น

 
GN⁺ 2026-01-04
ความคิดเห็นจาก Hacker News
  • น่าแปลกที่บทความลืมพูดถึงฟังก์ชัน follow ไป ตอนแรกมันให้ความรู้สึกเหมือนเป็น UX ที่แปลกๆ แต่พอชินแล้วหลายกรณีก็ดีกว่า tail
    ถ้ารันด้วย less +F มันจะแสดงผลโดยคอยตาม input stream หรือไฟล์แบบเรียลไทม์ กด <C-c> เพื่อหยุดการติดตามแล้วสำรวจต่อแบบ less ปกติได้ และกด F (ตัวพิมพ์ใหญ่) เพื่อกลับไปติดตามอีกครั้ง

    • เวลาติดตาม input จาก pipe (kubectl logs | less +F) ถ้ากด <C-c> process ของ pipe ทั้งชุดจะจบ ทำให้กลับไปติดตามต่อด้วย F ไม่ได้อีก less มีทางเลือกคือใช้ <C-x> เพื่อหยุดการติดตาม แต่ shell ส่วนใหญ่ดักคีย์นี้ไว้
    • ใน tail คุณกด Enter เพื่อเพิ่ม บรรทัดว่าง ไว้ใต้บรรทัดสุดท้ายได้ มันช่วยให้แยกผลลัพธ์จากการรันหลายครั้งได้ดูง่ายขึ้น ฟีเจอร์นี้อย่างเดียวยังทำให้ฉันใช้ tail อยู่
    • แทนที่จะเรียกว่า “แปลกนิดหน่อย” ฉันคิดว่ามันคือ UX ที่แย่ มากกว่า ไม่เห็นจำเป็นต้องบังคับให้สลับโหมดเลย ถ้ามีข้อมูลใหม่ก็ควรรีเฟรชอัตโนมัติ
    • อยากให้มีโหมดที่ output ใหม่ถูกต่อเพิ่มอัตโนมัติไปพร้อมกับเลื่อนสำรวจได้ด้วย เหมือนมีแค่ ตัวสลับ auto-scroll แบบ terminal ก็น่าจะพอ
    • เมื่อก่อนฉันนึกว่า “follow” เป็นฟีเจอร์ซับซ้อนที่เกี่ยวกับการจัดการ file descriptor แบบพิเศษ แต่จริงๆ แล้วมันแค่ poll ต่อหลัง EOF เท่านั้นเอง หมายความว่าระหว่างการเปิดไฟล์ธรรมดากับโหมดติดตามไม่ได้ต่างกันโดยแก่นแท้ และซอฟต์แวร์ก็สลับไปมาได้ง่าย
  • ออปชัน -X หรือ --no-init ทำให้ไม่ล้างหน้าจอเมื่อออกจากโปรแกรม ปกติฉันชอบ คงหน้าจอไว้ เพื่อย้อนดูสิ่งที่แสดงก่อนหน้า หรือคัดลอกและวางได้

    • ถ้าอยากใช้พฤติกรรม -X แค่บางครั้ง ลองดู ทิปในเธรดนี้
    • ถ้าใช้ร่วมกับ -E มันจะออกทันทีเมื่อ output สั้นกว่าขนาดหน้าจอ ฉันมักใช้ออปชันรวมแบบ “less -SEXIER” บ่อยๆ เพราะจำง่าย
  • เวลา debug log ยาวๆ ฉันใช้ & เพื่อกรองเฉพาะส่วนที่อยากอ่าน และใช้ &! เพื่อตัดส่วนที่ไม่ต้องการออก มันรองรับ regex ด้วย บางครั้งช้าบ้างแต่มีประโยชน์มากเวลาต้องกรองแบบเฉพาะหน้า

  • มีสองทิปที่มีประโยชน์
    ออปชัน -L จะข้ามการ preprocess ไฟล์ input ทำให้ไม่ถูกตีความผิดเป็น nroff ในกรณีที่ชื่อไฟล์ log ถูก rotate เช่น logfile.1, logfile.2
    อีกอย่างคือเวลาค้นหา ถ้าใส่ Ctrl-R เป็นตัวแรก จะค้นหาเป็น literal string ไม่ใช่ regex

  • คุณตั้งค่า key binding ได้ด้วยไฟล์ ~/.lesskey ฉัน bind ปุ่ม s ให้เลื่อนถอยหลัง ทำให้ใช้ d กับ s เลื่อนลง/ขึ้นหน้าได้เร็วด้วยมือเดียว
    less ที่มากับ macOS ไม่มีฟีเจอร์นี้ ต้องติดตั้งผ่าน Homebrew (ตัวอย่างการตั้งค่า, คำอธิบายที่เกี่ยวข้อง)

    • ฉันก็ bind N เป็น next-file เหมือนกัน การที่ macOS ไม่มี lesskey นี่น่าหงุดหงิดจริงๆ
  • man บน OpenBSD สามารถส่งแท็กให้ less ได้ ทำให้กระโดดไปยัง section เฉพาะได้ทันที เช่น :t test เป็นฟีเจอร์ที่น่าสนใจ แต่ในทางปฏิบัติฉันแทบไม่ค่อยใช้
    แค่ค้นหาด้วย / ซึ่งเป็น อินเทอร์เฟซที่สม่ำเสมอ ก็ดูตรงไปตรงมามากกว่า
    อนึ่ง ระบบตระกูล BSD ใช้ชุดแมโคร mdoc เพื่อสร้าง เอกสารเชิงความหมาย และ OpenBSD ใช้โปรแกรม mandoc สำหรับเรนเดอร์เอกสารเหล่านี้ (เอกสาร mdoc)

  • สามารถตั้งให้ ^q ออกจาก less โดยไม่ล้างหน้าจอได้ ส่วน q ธรรมดาก็ยังออกแล้วล้างหน้าจอเหมือนเดิม

    echo '^q toggle-option -redraw-screen\nq' >> ~/.config/lesskey
    

    ต้องรัน less โดยไม่ใช้ -X และมีประโยชน์มากโดยเฉพาะเวลาต้องอ้างอิง output ก่อนหน้า เช่น git log

  • less ยังมีความสามารถในการ pipe ไปยังคำสั่งภายนอกด้วย
    ตัวอย่างเช่น ใช้ ma เพื่อกำหนด mark แล้วใช้ |a เพื่อส่งเนื้อหาจากตำแหน่งปัจจุบันไปจนถึง mark นั้นให้คำสั่งภายนอก
    มีประโยชน์เวลาบันทึกบางส่วนของข่าวหรืออีเมล
    อีกอย่างคือออปชัน -j ใช้ปรับว่าผลการค้นหาจะไปแสดงต่ำกว่าด้านบนของหน้าจอกี่บรรทัด

    • ฉันก็ใช้ฟีเจอร์ pipe นี้กับ git log เหมือนกัน เลือก commit แล้วกดคีย์ลัดเพื่อรัน git show หรือทำงาน fixup ได้เลย
      โดยใช้ debug trap ของ bash และ keyd-application-mapper เพื่อตรวจว่าตอนนี้กำลังรันคำสั่งอะไรอยู่ จากนั้นดึง commit hash นั้นมาให้สคริปต์จัดการ
  • เอนจิน regex ของ less(1) ช้ามาก เวลาจัดการไฟล์ใหญ่ๆ ฉันจะค้นหาด้วย grep หรือ ripgrep ก่อน แล้วค่อยส่งผลลัพธ์เข้า less เพื่อดูต่อ

  • ปุ่ม s ใช้บันทึกข้อมูลจาก pipe ลงไฟล์ได้ สะดวกกว่าคัดลอกวางมาก

    • ฉันก็ใช้ฟีเจอร์นี้บ่อย ดู output ของ process ที่ใช้เวลานานผ่าน less แล้วถ้าผลลัพธ์มีประโยชน์ค่อยกด s เพื่อบันทึก
      จะใช้ tee ก็ได้ แต่แบบนั้นจะสร้างไฟล์ทิ้งไว้ตลอด ซึ่งถ้าไม่จำเป็นก็ไม่มีประสิทธิภาพ