Helm: ค้นหาภายในคุณสมบัติบัฟเฟอร์?


11

คำถามหางเสือพื้นฐานที่สวย หน้าต่าง / คำสั่ง / คุณสมบัติ Helm คืออะไรที่ช่วยให้เราค้นหาข้อความ (ควรใช้regexp) ภายในบัฟเฟอร์ประเภทใด ๆ (เช่นรวมถึงอ่านอย่างเดียวเช่นw3m)

กล่าวอีกนัยหนึ่งฉันกำลังมองหาคำสั่งดั้งเดิมของ Emacs ที่เทียบเท่ากับ Helm สำหรับisearch-forward( C-s) / isearch-backward( C-r)

หากต้องการแสดงตัวอย่าง: หลังจากเรียกใช้หนึ่งในisearchคำสั่งพื้นฐาน ( C-sหรือC-r) เราสามารถออกจากโหมดค้นหาได้สองวิธี:

  1. เราสามารถออกและกลับสู่จุดเริ่มต้น (ผ่านC-g) หรือ

  2. เราสามารถออกและเรียกดูบัฟเฟอร์ต่อจากจุดปัจจุบันเช่นจากข้อความที่จับคู่RETในปัจจุบัน

ฉันกำลังมองหาตัวเลือกที่สองของทั้งสองตัวเลือก


นี่คือสิ่งที่ฉันได้ลองมา:

  • helm-regexp: นี่เป็นสิ่งที่ใกล้เคียงที่สุดกับสิ่งที่ฉันกำลังมองหา แต่มันจะทำงานได้เทียบเท่ากับC-s/ C-r+ C-g(เช่นมันจะพาเรากลับไปที่จุดเดิมไม่มีตัวเลือกสำหรับการยกเลิกการค้นหาและเรียกดูบัฟเฟอร์จากการจับคู่ในปัจจุบัน จุด).

  • helm-do-grep: ดูเหมือนว่านี่เป็นเพียงการค้นหาข้อความภายในไฟล์ (เช่นไม่ทำงานบน w3m)

  • helm-buffer-run-grep/ -zgrep: การรันคำสั่ง / ฟังก์ชันนี้ส่งผลให้เกิดข้อผิดพลาดใน mini-buffer:Running helm command outside of context

  • เมื่อhelm-modeเปิดใช้งานเรียกใช้C-sหรือC-rแสดงisearchคุณสมบัติดั้งเดิมของ Emacs (ไม่ได้ถูกแทนที่ด้วยส่วนต่อประสานของ Helm) (อาจมีการตั้งค่าที่เราสามารถเปลี่ยนได้เพื่อให้ Helm สามารถควบคุมคำสั่งนี้ได้เช่นว่าคล้ายกับวิธีที่ Helm ใช้คำสั่ง native สำหรับwrite-file( C-x C-w) ซึ่งสามารถใช้เพื่อเปลี่ยนชื่อไฟล์ในบัฟเฟอร์ที่เปิดอยู่เพียงระดมสมอง)


1
คุณต้องการhelm-occurด้วยการfollow-modeเปิดใช้งาน
nispio

คำตอบ:


16

คุณสามารถใช้ helm-formed เป็นเครื่องมือที่มาพร้อมกับโมดูล helm พื้นฐานสำหรับสิ่งนี้ แต่กับผมซึ่งเป็นหนึ่งในเครื่องมือที่ดีที่สุดตามหางเสือเพื่อการค้นหาบัฟเฟอร์ชิงโกะฟูหางเสือถลา คุณสามารถรับได้จาก GitHub และผ่าน MELPA มันมีฟังก์ชั่นการใช้งานที่จำเป็นของคุณในการวางตำแหน่งของการแข่งขัน (ซึ่งอาจเป็น regexp) แต่คุณยังสามารถใช้ Cg เพื่อให้เคอร์เซอร์กลับมาที่จุดเริ่มต้น

ในหน้า github helm-swoop คุณจะได้พบกับฟังก์ชั่นที่มีประโยชน์อื่น ๆ ทั้งหมดที่แพ็คเกจนี้มี (รวมถึงการค้นหาแบบหลายบัฟเฟอร์โดย helm-multi-swoop และความสามารถในการแก้ไขบรรทัดของผลลัพธ์เพื่อให้การเปลี่ยนแปลงนั้น นำไปใช้กับบัฟเฟอร์พื้นฐาน)


ฉันเห็นด้วย. มันเป็นรุ่นปรับปรุงของhelm-swoop helm-occur
Tu Do

ดังนั้นฉันจะช้าไปจนถึงด้านหน้านี้ ฉันพยายามhelm-swoop... และฉันจะไม่กลับไป! ขอบคุณ
iceman

ท่านผู้ดีถือหางเสือถือไม่ใช่สิ่งที่มาจากโลกนี้
Leo Ufimtsev

5

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

ฉันต้องการเปิดใช้งานhelm-follow-modeเมื่อฉันใช้helm-occurเพื่อให้หน้าต่างแหล่งที่มาแสดงบริบทของการจับคู่ที่เลือกไว้ในปัจจุบันเสมอ คุณสามารถเปิดใช้งานโหมดติดตามโดยอัตโนมัติดังนี้:

(require 'helm-config)

(defvar my-helm-follow-sources ()
  "List of sources for which helm-follow-mode should be enabled")

;; Use helm-follow-mode for the following sources:
(add-to-list 'my-helm-follow-sources 'helm-source-occur)

(defun my-helm-set-follow ()
  "Enable helm-follow-mode for the sources specified in the list
variable `my-helm-follow-sources'. This function is meant to
be run during `helm-initialize' and should be added to the hook
`helm-before-initialize-hook'."
  (mapc (lambda (source)
          (when (memq source my-helm-follow-sources)
            (helm-attrset 'follow 1 (symbol-value source))))
        helm-sources))

;; Add hook to enable helm-follow mode for specified helm 
(add-hook 'helm-before-initialize-hook 'my-helm-set-follow)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.