2010-02-22 8 views
64

Gibt es einen einfachen/schnellen Weg zur „Ruck“ in dem vim „letzte Suche“ Register ("/)Vim - Yank in Such registrieren

Von der Vim-Dokumentation scheint es, dass die Antwort ist nein, aber dass sie über einen „let“ Befehl zugewiesen werden:

It is writable with ":let", you can change it to have 'hlsearch' highlight 
other matches without actually searching. You can't yank or delete into this 
register. 

im Idealfall, was ich würde zu tun ist so etwas wie:

"/5yw 

, die die nächsten 5 Wörter unter dem Cursor & put zerren würde th em in dem letzten Suchpuffer

Alternativ kann, wenn es eine Möglichkeit für den Inhalt eines benannten Registers zu suchen ist, das wäre zu arbeiten. Mit anderen Worten, wenn ich könnte:

"A5yw 

und dann suchen, was in Register A ist, das würde auch funktionieren.

Der nächste, den ich kommen kann, ist in ein benanntes Register & zu reißen, dann kopieren Sie dieses Register in das letzte Suchregister, z.B.

"A5yw 
:let @/[email protected] 

Auf der Gefahr mehr lange Frage zu machen, möchte ich sagen, dass ich es nicht immer 5 Worte möchte „& Suche zerren“ - manchmal ist es 17 Zeichen, manchmal ist es zu Ende die Linie, etc ... so gibt mir ein hartcodiertes Makro nicht die Flexibilität, die ich mir wünschen würde.

Antwort

81

Nachdem Sie / gedrückt haben, um eine Suchzeichenfolge einzugeben, können Sie Ctrl-R verwenden und dann den Buchstaben eingeben, der das zu verwendende Register darstellt.

z.

  • Zuerst "Ayw, um ein Wort in das Register zerren A
  • Dann / ^R A den Inhalt des Registers A in den Suchtext zu setzen.
+0

Dieser funktioniert natürlich geben kann, aber es klingt wie das OP eigentlich nicht wollen Suche, hole einfach die Hervorhebung. Wenn das der Fall ist, wäre ein benutzerdefinierter Operator der richtige Weg. – Cascabel

+0

Super - danke ar ... das ist genau das, was ich brauchte (naja, unter den Zwängen, dass die perfekte Lösung überhaupt nicht möglich ist.) Danke für die prägnante Lösung. – Dan

+0

@Jefromi - danke für deine Antwort (unten) und deine Hilfe. Entschuldigung, ich war vielleicht nicht klar genug in meiner ursprünglichen Frage, aber ich wollte das eigentlich zum Suchen und ich habe die Hervorhebung deaktiviert. Danke für die Eingabe! – Dan

5

Also im Grunde eine erweiterte Version des # und * Befehle, nicht wahr? Es klingt, als ob Sie einen benutzerdefinierten Operator definieren möchten (ein Befehl, der eine Bewegung erwartet). Ich habe eigentlich nie getan, aber ich habe ein plugin finden, wie es aussieht, könnte es einfacher machen, dies zu tun. Es gibt einige Beispiele.

9

Ich verwende folgenden Code dafür:

vnoremap <silent>* <ESC>:call VisualSearch('/')<CR>/<CR> 
vnoremap <silent># <ESC>:call VisualSearch('?')<CR>?<CR> 

    function! VisualSearch(dirrection) 
     let l:[email protected]@ 
     normal! gvy 
     let l:search=escape(@@, '$.*/\[]') 
     if a:dirrection=='/' 
      execute 'normal! /'.l:search 
     else 
      execute 'normal! ?'.l:search 
     endif 
     let @/=l:search 
     normal! gV 
     let @@=l:register 
    endfunction 
+0

zu registrieren. Falls es nicht klar ist, können Sie damit einen Text im visuellen Modus auswählen und mit * oder # nach diesem Text suchen. –

23

Wenn Sie keine Register verwendet haben die zerrte Text vim zu speichern verwendet 0 Register. Sie können für die Suche nach Ctrl-R 0/ eingeben.

Ein komplizierteres Beispiel.Sagen Sie, dass Sie in einem anderen Puffer für den Text in Anführungszeichen suchen möchten, die direkt unter dem Cursor ist jetzt:

  • können Sie tun das mit yi" (yank innere Zitat)
  • Gehen Sie auf die Puffer, wo Sie wollen Suche
  • Typ /Ctrl-R 0
1

Die Suche nach einer Auswahl:

wenn Sie wollen zunächst einen Abschnitt einer Leitung zerren, dann verwenden „v“ und bewegen sich mit Cursor, bis Sie markiert haben, was Sie wollen, drücken Sie y dann für Ruck und jetzt ist die Auswahl im Register 0

Sie dann /Ctrl-R 0