ฉันจะค้นหาข้อความข้ามบัฟเฟอร์ที่เปิดอยู่จำนวนมากได้อย่างไร


36

ให้บอกว่าฉันเปิด 10 บัฟเฟอร์และฉันต้องการค้นหาสิ่งที่เกิดขึ้นblahใน 10 บัฟเฟอร์ทั้งหมด ฉันจะทำสิ่งนี้ได้อย่างไร

คำตอบ:


31

การผสานกับคำสั่ง Emacs ในตัวคุณสามารถใช้multi-occurหรือmulti-occur-in-matching-buffers( M-x multi-occur- TAB RET) multi-occurให้การควบคุมที่ดียิ่งขึ้นโดยการให้แต่ละบัฟเฟอร์ใช้ แต่มันน่าเบื่อ multi-occur-in-matching-buffersช่วยให้คุณป้อน regexp เพื่อจับคู่ชื่อไฟล์ (ค้นหาเฉพาะในบัฟเฟอร์ที่กำลังเยี่ยมชมไฟล์); ป้อน.เป็นไฟล์ regexp เพื่อค้นหาในบัฟเฟอร์ทั้งหมดที่กำลังเยี่ยมชมไฟล์

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

grepค้นหาในไฟล์ทั้งหมดในไดเรกทอรีหรือไฟล์ตรงกับรูปแบบบางอย่างไม่ว่าจะเปิดหรือไม่คุณสามารถใช้ มีตัวแปรrgrepและgrep-findเพื่อค้นหาไดเรกทอรีย่อยซ้ำ


5
+1 สำหรับการกล่าวถึงนั่น.เป็นนิพจน์ปกติที่จะจับคู่ไฟล์ทั้งหมด
2699

12

นอกจากสิ่งที่คนอื่นพูดถึง - นี่คือทรัพยากรสองอย่างสำหรับสิ่งนี้

  1. M-x multi-isearch-buffersหรือM-x multi-isearch-buffers-regexp(วานิลลา Emacs) - การค้นหาที่เพิ่มขึ้นในหลาย ๆ บัฟเฟอร์

  2. หากคุณใช้Iciclesคุณสามารถใช้icicle-search(หรือicicle-occurหรือจำนวนicicle-searchเฉพาะทางอื่น ๆ) เพื่อค้นหาไฟล์หรือบัฟเฟอร์หลาย ๆ ไฟล์

(นอกเหนือจากการค้นหาและแทนที่ข้ามบัฟเฟอร์แบบกำหนดเองแล้วยังมีคำสั่งแน่นอนที่ทำข้ามไฟล์หลาย ๆไฟล์ตัวอย่างอื่น ๆ ได้กล่าวถึงgrepและมีแน่นอนAใน Dired แต่คุณไม่ได้ถามเกี่ยวกับการค้นหาไฟล์)


10

ซึ่งสามารถทำได้ด้วยหางเสือhelm-multi-occurผ่านคำสั่ง คุณสามารถติดตั้งหางเสือจากmelpaแล้วเรียกคำสั่งดังต่อไปนี้:

M-x helm-multi-occur RET M-a RET

สิ่งนี้จะเปิดขึ้นhelm-multi-occurจากนั้นเลือกบัฟเฟอร์ทั้งหมด แทนที่จะใช้M-aเพื่อทำเครื่องหมายบัฟเฟอร์ทั้งหมดคุณสามารถเลือกบัฟเฟอร์ที่สนใจครั้งละหนึ่งตัวเลือก นำทางไปขึ้นและลงรายการที่มีC-nและและบัฟเฟอร์เครื่องหมายด้วยC-p C-SPCเมื่อทำเครื่องหมายบัฟเฟอร์ทั้งหมดแล้วให้กดRETเพื่อยอมรับบัฟเฟอร์ที่ทำเครื่องหมายไว้และเริ่มค้นหา

หากคุณเพิ่มสิ่งต่อไปนี้ในไฟล์ init ของคุณ:

(require 'helm-regexp)
(eval-after-load "helm-regexp"
  '(setq helm-source-moccur
    (helm-make-source "Moccur" 'helm-source-multi-occur :follow 1)))

;; (source: http://stackoverflow.com/q/14726601)
(defun my-helm-multi-occur-buffers ()
  "multi-occur in all buffers backed by files."
  (interactive)
  (helm-multi-occur
   (delq nil
     (mapcar (lambda (b)
           (when (buffer-file-name b) (buffer-name b)))
         (buffer-list)))))

จากนั้นคุณสามารถผูกคำสั่งmy-helm-multi-occur-buffersเพื่อทำหลายค่าในบัฟเฟอร์ทั้งหมดที่สำรองข้อมูลโดยไฟล์


3
คุณอาจต้องการดูhelm-swoopแพ็คเกจใน MELPA มันมีฟังก์ชั่นนี้และอนุญาตให้แก้ไขผลลัพธ์ได้อย่างรวดเร็วเช่นกัน
Vamsi


6

คุณสามารถใช้ibufferโหมดเพื่อทำเครื่องหมายบัฟเฟอร์ที่คุณต้องการค้นหา โทรibuffer-do-isearch(ผูกM-s a C-sโดยค่าเริ่มต้น) เพื่อค้นหาข้อความหรือibuffer-do-isearch-regexpถ้าคุณต้องการค้นหานิพจน์ทั่วไป

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


1

M-x helm-mini M-a C-s blahนี่คือวิธีที่มีหางเสืออื่น: หลังจากที่กล่าวอ้างhelm-mini, M-aจะทำเครื่องหมายบัฟเฟอร์เปิดทั้งหมดแล้วC-s blahจะทำหลายเกิดขึ้นในบัฟเฟอร์ทำเครื่องหมาย


0

helm-swoopนอกจากนี้ยังมีวิธีการแก้ปัญหาโดยใช้หางเสือโหมดอยู่กับ

ใช้

M-x helm-swoop RET

จากนั้นสำหรับการค้นหาในบัฟเฟอร์ที่เปิดอยู่ให้พิมพ์

M-i

จากนั้นเพียงพิมพ์blahเพื่อค้นหาในบัฟเฟอร์ทั้งหมด ในหน้าต่างอื่นจะแสดงเหตุการณ์ทั้งหมด

หรือคุณสามารถพิมพ์

M-x helm-multi-swoop

แล้วทำเครื่องหมายบัฟเฟอร์ทั้งหมดที่คุณต้องการค้นหาด้วยM-SPCหรือC-SPCกดและการค้นหาสำหรับRETblah

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.