2013-10-14 5 views
9

Gibt es eine Möglichkeit in Vim das Suchregister in die Befehlszeile einzufügen, aber ohne die umgebenden \< Klammern \>? Ich finde oft, dass ich eine Suche in einem Puffer durchführe und dann das angepasste Muster als Argument für grep (genauer ack.vim) verwenden möchte.Vim: Suchregister in der Befehlszeile ohne Klammern einfügen

Hier ist, was passiert, wenn man für foo suchen und geben Sie dann :Ack '<C-r>/ ‚:

:Ack '\<foo\>' 

Das wird nicht alles zu finden. Was ich will, ist stattdessen:

:Ack 'foo' 

Dies ist natürlich ein simplistic Beispiel. Wo dies wertvoller wäre, ist mit komplexeren Suchergebnissen.

Ich bin bewusst <C-r><C-w> und <C-r><C-a> für das Einfügen des Wortes/WORD unter dem Cursor, und diese oft ausreichen, aber nicht immer.

+1

' /' fügt Ihr Suchmuster ein, während Sie es eingegeben haben. Beachten Sie, dass das * Suchmuster * eingefügt wird, nicht die Übereinstimmung: Wenn Sie nach 'foo \ d' suchen, wird' /'' foo \ d', nicht 'foo9' einfügen. – romainl

+0

Aha! Das macht Sinn. In diesem Fall habe ich Dinge getestet, indem ich '*' verwendet habe, um ein Wort zu markieren, von dem die umgebenden Klammern kommen. Ich habe auch früher mit '/ pattern' versucht, das ich auf'/\ v' gemappt habe und das resultierende '\ v' im Suchregister bekommen habe, aber die Verbindung nicht hergestellt habe. Wenn Sie Ihren Kommentar als Antwort geben möchten, würde ich mich freuen, es zu akzeptieren. –

+0

Auch für Leute, die daran interessiert sind, wird die Verwendung von 'g *' anstelle von '*' das Suchmuster ohne '\ <' Klammern '\>' um es herum erhalten. –

Antwort

8

<C-r>/ fügt Ihr Suchmuster während der Eingabe ein: Wenn Sie /foo getan haben, enthält das Suchregister foo.

Beachten Sie, dass <C-r>/ fügt das Suchmuster, nicht das Spiel: Wenn Sie für foo\d suchen, <C-r>/foo\d einsetzen wird, nicht foo9.

Wie Sie herausgefunden, \< und \> werden hinzugefügt, wenn Sie * oder #, um die Suche auf ganze Wörter zu begrenzen verwendet. Verwenden Sie g* und g# bis nicht ganze Wörter suchen und vermeiden Sie so die \<\>.

Hier ist eine möglicherweise nützliche Mapping:

nnoremap <F6> :Ack '<C-r>=expand("<cword>")<CR>' 
+0

Große Erklärung, macht Sinn .. Ich löste diesen Zweck der Suche der aktuellen markierten Wort mit > let g: ack_use_cword_for_empty_search = 1 in meinem vimrc, jetzt, wenn ich laufen: Ack! ohne irgendwelche Parameter suchen Sie standardmäßig nach dem Wort, das sich im Suchpuffer befindet. –

4

Es sei denn, Sie eine rein wörtliche Suche zu tun, es gibt einen Unterschied zwischen dem Suchmuster (ein regulärer Ausdruck) und der (Liste) entspricht (Zeichenfolgen aus dem Puffer).

Wenn Sie an Letzterem interessiert sind, bietet PatternComplete plugin Insert-Modus Abschluss aller Übereinstimmungen, und es kann auch die erste Übereinstimmung des letzten Suchmusters mit <C-R>& einfügen.

+0

Danke, das sieht gut aus. Gibt es ein GitHub Repo oder irgendetwas, das das Plugin mit all seinen Abhängigkeiten in einem pathogen-kompatiblen Format enthält? Wenn nicht, könnte ich es selbst machen und es auf GitHub aufkleben, wenn es Ihnen nichts ausmacht. –

+0

Das wird von http://vimscripts.org/ zur Verfügung gestellt: [hier] (https://github.com/vim-scripts/PatternComplete) und [die Abhängigkeit] (https://github.com/vim-scripts/ingo -Bibliothek). –

Verwandte Themen