Wenn ich C-s
suchen kann. Wie soll ich eine Funktion ausführen, an C-r
die ich mich beispielsweise binden kann , um in den Ergebnissen einer vordefinierten Suchabfrage zu suchen?
Wie der Inhalt des Fensters wäre:
function xyz(a, b)
return a + b
end
Ich kann C-M-s
mit function.*
als Abfrage und das Ergebnis wird sein function xyz(a, b)
.
Ich möchte eine Funktion haben, mit der ich eine Abfrage eingeben und in diesen Ergebnissen suchen kann (die automatisch hinter meinen Augen generiert werden).
AKTUALISIEREN
Vielen Dank für die Lösungen. occur
, helm-occur
Funktioniert auch sehr gut, aber ich habe Antwort Jordon Biondo akzeptiert , weil er den Code zur Verfügung gestellt brauchte ich meine Frage vollständig zu beantworten.
helm-swoop
, aber Ihre Frage (und insbesondere der Titel) ist diesbezüglich nicht sehr klar. Vielleicht habe ich Ihre Frage einfach nicht verstanden, weil ich mit dem Ruder nicht vertraut bin.imenu
hat super für mich funktioniert! Außer ich suche nach einer generischen Lösung für meine FrageAntworten:
Der einfache Ansatz wäre, nur rgrep zu verwenden.
Verwenden M-x
rgrep
und spezifizieren Sie die Suche nach "Funktion" in der aktuellen Datei im aktuellen Verzeichnis. Sie können dies in einem Befehl zusammenfassen, damit Sie die Optionen nicht jedes Mal wie folgt angeben müssen:Dies ergibt einen durchsuchbaren Puffer mit den Funktionssignaturen und Sie können zu den Definitionen springen, wenn Sie möchten.
quelle
grep
,rgrep
,occur
Und dergleichen Suche nur Zeile für Zeile . Das heißt, die Suchkontexte sind einzelne Zeilen. Ich dachte, das OP würde nach Funktionsdefinitionen suchen. Aber da diese Antwort akzeptiert wurde, ist die gestellte Frage wohl nicht wirklich das, was gewünscht wurde.function xyz(a, b)
diese haben möchte , wenn Ihre Lua richtig formatiert ist, genau das, was Sie bekommen.function xyz(a, b)
.Würde
occur
für dich arbeiten?M-x
occur
oderM-s o
dann Ihre Abfrage eingeben werden Sie mit einer Liste von Linien bieten diese regexp übereinstimmen. Sie können dannC-s
innerhalb des Occur-Puffers suchen, um Ihre Suche innerhalb der übereinstimmenden Zeilen zu verfeinern.quelle
Emacs hat einen Befehl namens
occur
, der für diese Art von Aufgabe sehr gut geeignet ist. Wenn Sie Helm installiert haben, können Siehelm-occur
stattdessen verwenden.Auftreten
Der
occur
Befehl ist Teil von Vanilla Emacs undM-s o
standardmäßig gebunden . Occur fordert Sie zur Eingabe eines regulären Ausdrucks auf, nach dem gesucht werden soll, und öffnet dann ein neues Fenster, in dem alle Zeilen im aktuellen Puffer angezeigt werden, die eine Übereinstimmung enthalten. Der resultierende*Occur*
Puffer kann mitisearch
(C-s
) durchsucht werden .M-s o function RET
um alle Zeilen anzuzeigen, die mit "Funktion" übereinstimmenC-x o
um den Fokus auf den*Occur*
Puffer zu verschiebenC-s
um eine Suche in den Suchergebnissen zu startenHelm auftreten
Wenn Sie einen Helm installiert haben, können
helm-occur
Sie etwas Ähnliches tun. In diesem Fall kann der*Helm Occur*
Puffer nicht direkt mit durchsucht werdenC-s
. In Helm können Sie nach mehreren Suchbegriffen suchen, indem Sie sie durch ein Leerzeichen trennen.M-x helm-occur RET
um ein Helm Occur-Fenster zu öffnenfunction
um alle Zeilen anzuzeigen, die "Funktion" enthaltenSPC foo
um die Ergebnisse auf Zeilen zu beschränken, die auch foo enthaltenWenn Sie in einem dieser Modi die Übereinstimmung im aufgetretenen Puffer auswählen und die Eingabetaste drücken, gelangen Sie zu dieser Zeile im Code.
quelle
Wenn Sie Bibliothek Eiszapfen verwenden , können Sie so etwas leicht tun. Was Sie verlangen (wenn ich es richtig verstehe), ist, nur in bestimmten Suchkontexten zu suchen .
Wie in diesem Fall möchten Sie beispielsweise nur innerhalb von Funktionsdefinitionen suchen - die Suchkontexte sind Funktionsdefinitionen. In Lisp wären dies Dinge wie
defun
s.Icicles verfügt über mehrere vordefinierte Icicles- Suchbefehle für die Suche nach Definitionen wie diesen. Diese werden gemeinsam als Icicles Imenu-Befehle bezeichnet .
Um nur Befehlsdefinitionen zu durchsuchen, können Sie den Befehl verwenden
icicle-imenu-command-full
. Verwenden Sie den Befehl, um nur nicht interaktive Funktionsdefinitionen zu durchsuchenicicle-imenu-non-interactive-function-full
.Über die Suche nach Definitionen hinaus können Sie problemlos alle Arten von zu durchsuchenden Kontexten definieren. Der einfachste Weg ist die Bereitstellung eines regulären Ausdrucks. Der Befehl
icicle-search
fordert Sie zur Eingabe des regexp definierenden regulären Ausdrucks auf. Alternativ können Sie eine Funktion verwenden, um die Suchkontexte zu definieren.Andere Möglichkeiten sind:
Durchsuchen des Textes verschiedener Arten von DINGEN (z. B. Sexps, Sätze, Listen, Zeichenfolgen, Kommentare, XML-Elemente usw.), dh Ignorieren anderer Texte außerhalb der DINGE.
Durchsuchen von Textzonen, die Text- oder Überlagerungseigenschaften zugewiesen haben, dh Ignorieren von anderem Text.
HINWEIS:
Andere hier erwähnte Antworten
occur
und ähnliches (helm-occur
) bieten eine begrenzte Art der Kontextsuche: Die Suchkontexte sind nur die Zeilen eines Puffers.Das ist viel begrenzter als beispielsweise das Suchen innerhalb ganzer Funktionsdefinitionen, was Sie meiner Meinung nach verlangen. Mit Icicles können Sie mit Befehl
icicle-occur
(gebunden anC-c '
) innerhalb von Zeilen als Suchkontexte suchen.quelle
Mit Isearch + :
C-M-s .+function.+
, um nach ganzen Zeilen zu suchen, die enthaltenfunction
.C-z .
gefolgt von einem regulären Ausdruck für etwas, nach dem Sie in den enthaltenen Zeilen suchen möchtenfunction
.(Optional) Wiederholen Sie # 2 mit anderen Mustern (regulären Ausdrücken), um in derselben Zeile übereinzustimmen. Die Übereinstimmungen können in beliebiger Reihenfolge innerhalb der Linie erfolgen.
Anstelle von Schritt 1 können Sie mit beginnen
C-M-s .+ C-z . function
. Der Punkt ist, nach ganzen Linien zu suchen, diefunction
zusammen mit anderen Mustern enthalten, die Sie mögen.So
C-z .
funktioniert es: Sie werden aufgefordert, ein passendes Inline-Muster anzugeben (zfunction
. B. ). Es umhüllt das mit.*
auf jeder Seite, um ein Volllinienmuster zu erhalten (z.*function.*
. B. ). Es wird ein Filterprädikat hinzugefügt, das erfordert, dass Ihre aktuelle Suchzeichenfolge (.+
) auch mit diesem Muster übereinstimmt (z.*function.*
. B. ).Weitere Informationen finden Sie unter Dynamische Suchfilterung .
quelle