Suche nach Auswahl in vim

107

Ich benutze vim und vim Plugins für Visual Studio beim Schreiben von C ++. Oft möchte ich innerhalb einer Funktion nach einer Zeichenfolge suchen, zum Beispiel bei jedem Aufruf von object->public_member.memberfunc().

Ich weiß, dass vim eine bequeme Möglichkeit bietet, durch Drücken von *und nach einem einzelnen Wort zu suchen #, und dass es auch mit dem allgegenwärtigen Schrägstrich nach getippten Zeichenfolgen suchen kann /. Wenn Sie versuchen, nach allen Instanzen einer längeren Zeichenfolge wie der oben genannten zu suchen, dauert es eine Weile, bis Sie sie erneut eingeben /.

Gibt es eine Möglichkeit, nach Auswahl zu suchen? Markieren Sie beispielsweise mit vund kopieren Sie mit y. Gibt es eine Möglichkeit zum Einfügen nach /? Gibt es eine einfachere Verknüpfung?

Marcin
quelle
Mögliches Duplikat von Wie suche ich nach dem ausgewählten Text?
Acm

Antworten:

154

Überprüfen Sie diesen Vim-Tipp: Suchen Sie nach visuell ausgewähltem Text

Oder Sie können den ausgewählten Text einfach mit y ziehen und in den Suchmodus / wechseln . Anschließend können Sie den zuletzt gezogenen Text mit Strg + R 0 einfügen

CMS
quelle
4
@CMS. Vielen Dank. Toller Tipp! Die Verwendung von: reg, um zu sehen, was sich in Ihren Registern befindet, und die Verwendung von cntl-R N, um zu ermitteln, was sich in Register N befindet, ist ausgezeichnet!
Rob Wells
84

Antworten

  1. Ziehen Sie den Text, nach dem Sie suchen möchten
  2. q/p
  3. Enter

Erläuterung

q/funktioniert ähnlich wie die Vanille-Suche, /außer dass Sie sich im Befehlsmodus befinden, palso "einfügen", anstatt das Zeichen einzugeben p. Das obige kopiert also den gesuchten Text und fügt ihn in eine Suche ein.

Für weitere Details geben Sie ein :help q/

Cory Klein
quelle
4
Ich mag dieses, weil ich es so unpraktisch finde, <ctrl-r> zu tippen.
Januar
Ausgezeichnet! Mit Emacs in evil-modefunktioniert dies tatsächlich, während die akzeptierte Antwort kläglich bricht (wahrscheinlich aufgrund der Verwendung des CtrlSchlüssels).
Eestrada
2
Ideal für einfache Zeichenfolgen, entgeht jedoch nicht Regex-Sonderzeichen, wie im Kommentar dieser anderen Antwort angegeben .
Bluu
1
Und Sie müssen es nicht einmal ziehen. Wählen Sie es auf visuell, q/gvpwo gvfür letzte visuelle Auswahl steht ...
1
@nwildner, q/gvpfunktioniert bei mir nicht. Könnten Sie Ihren Vorschlag klarstellen?
Bam
38

Verwenden Sie q / anstelle von nur / . ( Das Gleiche gilt für q : ). Jetzt können Sie VIM-bearbeiten über Ihren Befehl und Suchverlauf! (Versuchen Sie es irgendwann mit Strg-N und Strg-P).


quelle
10

Ich habe gerade (durch das ausgezeichnete Buch Practical Vim ) erfahren, dass es dafür ein Plugin gibt. Sie finden das Plugin auf GitHub .

Mit dem Plugin können Sie mit *und nach einer visuellen Auswahl suchen #.

Cutemachine
quelle
5
Beachten Sie, dass die anderen Antworten nicht entkommen. Mit diesen Methoden werden ausgewählte Metazeichen abhängig von der aktuellen magicEinstellung nicht wörtlich gesucht . Dies kann sogar dazu führen, dass die Suche nach Metazeichen, die ausgeglichen werden müssen, fehlschlägt. Das hier erwähnte Plugin wird ausgeblendet, bevor nach dem ausgewählten Text gesucht wird.
Kurt Hutchinson
1
es funktioniert, aber leider können Sie nicht verwenden n, um zum nächsten gefundenen Gegenstand zu gelangen, während Corys und CMS Ansätze erlauben ..
Ayrat
2

Sie können tatsächlich Text visuell auswählen und * und # drücken, um nach dem nächsten Vorkommen zu suchen ... Es funktioniert genauso, die einzige Einschränkung ist:

Das Leerzeichen in der Auswahl stimmt bei der Suche mit jedem Leerzeichen überein (bei der Suche nach "Hallo Welt" wird auch "Hallo" am Ende einer Zeile und "Welt" am Anfang der nächsten Zeile angezeigt).

http://vim.wikia.com/wiki/Search_for_visually_selected_text

AhHatem
quelle
2
Wenn ich Text visuell auswähle und dann * drücke, wird meine visuelle Auswahl erweitert.
Martin Jakubik
Sie können nicht standardmäßig, es sei denn, Sie setzen die Zuordnung von der Seite in vimrc.
Ayrat