Làm cách nào để tìm kiếm trong kết quả tìm kiếm


8

Khi tôi C-scó thể tìm kiếm. Làm thế nào tôi có thể thực hiện một chức năng mà tôi có thể liên kết ví dụ để C-rcho phép tôi tìm kiếm trong kết quả của một số truy vấn tìm kiếm được xác định trước?

Giống như nội dung của cửa sổ sẽ là:

function xyz(a, b)
  return a + b
end

Tôi có thể C-M-svới function.*một truy vấn và kết quả sẽ được function xyz(a, b).

Tôi muốn có một chức năng nơi tôi có thể nhập truy vấn và tìm kiếm trong các kết quả đó (sẽ được tạo tự động sau mắt tôi).

CẬP NHẬT

Cảm ơn tất cả các giải pháp. occur, helm-occurcũng hoạt động rất tốt, nhưng tôi đã chấp nhận câu trả lời của Jordon Biondo vì anh ấy đã cung cấp mã tôi cần để trả lời câu hỏi của tôi đầy đủ.


Tôi hơi bối rối về mục tiêu của bạn: có vẻ như bạn muốn triển khai một số tính năng dành riêng cho Lua helm-swoop, nhưng câu hỏi của bạn (và đặc biệt là tiêu đề) không rõ ràng về điều này. Có lẽ tôi không nhận được câu hỏi của bạn vì tôi không quen với helm.
ớt bột

@paprika xem câu hỏi cập nhật :)
lukas.pukenis

Đây không phải là chính xác những gì helm-swoop đã làm?
Jordon Biondo

@JordonBiondo Tôi có thể thấy chức năng trong danh sách helm-swoop. Nhưng imenulàm việc tuyệt vời cho tôi! Ngoại trừ tôi tìm kiếm một giải pháp chung cho câu hỏi của mình
lukas.pukenis

Chỉ cần tự hỏi nếu bạn đã xem "Cx c i" chạy lệnh "helm-semantic-or-imothy", vì bạn đã sử dụng helm.
rimero

Câu trả lời:


5

Cách tiếp cận đơn giản sẽ chỉ là sử dụng rgrep.

sử dụng M-xrgrepvà chỉ định tìm kiếm "hàm" trong tệp hiện tại trong thư mục hiện tại. Bạn có thể gói nó trong một lệnh để bạn không phải chỉ định các tùy chọn mỗi lần như thế này:

(defun rgrep-lua-functions ()
  "run `rgrep` searching for 'function' in the current file."
  (interactive)
  (rgrep "function" (file-name-nondirectory (buffer-file-name)) "."))

Điều này sẽ mang lại một bộ đệm có thể tìm kiếm với các chữ ký hàm và bạn có thể chuyển đến các định nghĩa nếu bạn muốn.


grep, rgrep, occur, Và những thứ tương tự tìm kiếm chỉ từng dòng . Đó là, bối cảnh tìm kiếm là các dòng đơn. Tôi nghĩ rằng OP đã yêu cầu tìm kiếm các định nghĩa chức năng. Nhưng vì câu trả lời này đã được chấp nhận, tôi đoán câu hỏi được đặt ra không thực sự là điều mong muốn.
vẽ

trong câu hỏi, anh ta xác định rằng anh ta muốn các dòng như thế function xyz(a, b), nếu lua của bạn được định dạng chính xác là chính xác những gì bạn sẽ nhận được.
Jordon Biondo

Nó không rõ ràng với tôi. Vâng, anh ta nói anh ta sẽ hài lòng nếu tìm thấy những dòng như vậy, để được tìm kiếm. Nhưng trong ví dụ của mình, anh ta cho thấy toàn bộ định nghĩa hàm là " nội dung của cửa sổ " mà anh ta muốn có thể tìm kiếm. Các bối cảnh một dòng không hiển thị cho bạn nội dung như vậy để được tìm kiếm (cho dù trong "cửa sổ" hay cách khác). Họ chỉ giới thiệu bạn với một dòng : function xyz(a, b).
vẽ

7

Sẽ occurlàm việc cho bạn?

M-x occurhoặc M-s osau đó nhập truy vấn của bạn sẽ cung cấp cho bạn một danh sách các dòng khớp với biểu thức chính. Sau đó, bạn có thể sử dụng C-sđể tìm kiếm trong bộ đệm Xảy ra để tinh chỉnh tìm kiếm của bạn trong các dòng khớp.


Giáo sư. Tôi đã dành quá nhiều thời gian để viết lên câu trả lời của mình đến nỗi tôi không nhận thấy ai đó đánh tôi tới cú đấm.
nispio

4

Emacs có một lệnh được gọi occurlà rất phù hợp với loại nhiệm vụ này. Nếu bạn đã cài đặt Helm, thì bạn có thể sử dụng helm-occurthay thế.


Xảy ra

Các occurlệnh là một phần của emacs vani, và chắc chắn sẽ M-s otheo mặc định. Xảy ra sẽ nhắc bạn một regrec để tìm kiếm, và sau đó nó sẽ mở một cửa sổ mới hiển thị tất cả các dòng trong bộ đệm hiện tại có chứa một kết quả khớp. Bộ *Occur*đệm kết quả có thể tìm kiếm được bằng cách sử dụng isearch( C-s).

  • M-s o function RET để hiển thị tất cả các dòng khớp với "chức năng"
  • C-x ođể di chuyển tập trung vào *Occur*bộ đệm
  • C-s để bắt đầu tìm kiếm trong kết quả tìm kiếm

Xảy ra

Nếu bạn đã cài đặt helm, bạn có thể sử dụng helm-occurđể làm một cái gì đó tương tự. Trong trường hợp này, *Helm Occur*bộ đệm sẽ không thể tìm kiếm trực tiếp với C-s. Trong Helm, bạn có thể tìm kiếm nhiều cụm từ tìm kiếm chỉ bằng cách tách chúng với một khoảng trắng.

  • M-x helm-occur RET để mở cửa sổ Helm Occur
  • function để hiển thị tất cả các dòng chứa "hàm"
  • SPC foo để thu hẹp kết quả vào các dòng cũng chứa foo

Trong một trong các chế độ này, chọn khớp trong bộ đệm xảy ra và nhấn enter sẽ đưa bạn đến dòng đó trong mã.


3

Nếu bạn sử dụng thư viện Icicles thì bạn có thể dễ dàng làm điều này. Những gì bạn đang yêu cầu (nếu tôi hiểu chính xác), là chỉ tìm kiếm trong các bối cảnh tìm kiếm nhất định .

Ví dụ, như trong trường hợp này, bạn có thể chỉ muốn tìm kiếm trong các định nghĩa hàm - bối cảnh tìm kiếm là các định nghĩa hàm. Trong Lisp, đây sẽ là những thứ như defuns.

Icicles có một số lệnh tìm kiếm Icicles được xác định trước để tìm kiếm các định nghĩa như thế này. Chúng được gọi chung là các lệnh Icicles Imothy .

Để chỉ tìm kiếm các định nghĩa lệnh, bạn có thể sử dụng lệnh icicle-imenu-command-full. Để chỉ tìm kiếm các định nghĩa hàm không tương tác, sử dụng lệnh icicle-imenu-non-interactive-function-full.

Ngoài các định nghĩa tìm kiếm, bạn có thể dễ dàng xác định bất kỳ loại bối cảnh nào cần tìm kiếm. Cách đơn giản nhất là cung cấp một biểu thức chính quy. Lệnh icicle-searchnhắc bạn cho regex xác định bối cảnh tìm kiếm. Bạn có thể sử dụng một chức năng để xác định bối cảnh tìm kiếm.

Các khả năng khác bao gồm:

  • Tìm kiếm văn bản của các loại THING khác nhau (ví dụ: sexps, câu, danh sách, chuỗi, nhận xét, các yếu tố XML, ...), tức là bỏ qua văn bản khác bên ngoài THINGs.

  • Tìm kiếm các vùng văn bản đã cho các thuộc tính văn bản hoặc lớp phủ, nghĩa là bỏ qua văn bản khác.


GHI CHÚ:

Các câu trả lời khác ở đây có đề cập occurvà tương tự ( helm-occur) cung cấp một loại tìm kiếm ngữ cảnh hạn chế: bối cảnh tìm kiếm chỉ là các dòng của bộ đệm.

Điều đó hạn chế hơn nhiều, giả sử, tìm kiếm trong toàn bộ định nghĩa hàm, đó là điều tôi nghĩ bạn đang yêu cầu. Với Icicles , lệnh icicle-occur(ràng buộc C-c ') cho phép bạn tìm kiếm trong các dòng dưới dạng bối cảnh tìm kiếm.


1

Với Isearch + :

  1. C-M-s .+function.+, để tìm kiếm toàn bộ dòng có chứa function.

  2. C-z .theo sau là một biểu thức chính quy cho một cái gì đó bạn muốn tìm kiếm trong các dòng có chứa function.

(Tùy chọn) Lặp lại # 2 với các mẫu khác (biểu thức chính) để khớp trong cùng một dòng. Các trận đấu có thể theo thứ tự bất kỳ trong dòng.

Thay vì bước # 1, bạn có thể bắt đầu với C-M-s .+ C-z . function. Vấn đề là tìm kiếm toàn bộ các dòng có chứa functionbất kỳ mẫu nào khác mà bạn thích.

Cách thức C-z .hoạt động: Nó nhắc bạn cho một mẫu nội tuyến phù hợp (ví dụ function). Nó kết thúc tốt đẹp với .*mỗi bên, để có được một mẫu đầy đủ (ví dụ .*function.*). Nó thêm một biến vị ngữ bộ lọc yêu cầu chuỗi tìm kiếm hiện tại của bạn ( .+) cũng khớp với mẫu đó (ví dụ .*function.*).

Xem Lọc động tìm kiếm để biết thêm thông tin.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.