Wie kann ich in Vim nach ausgewähltem Text suchen?


61

Mir ist bewusst, dass ich /einen Regex verwenden kann, um nach etwas zu suchen. Und ich kann ?damit rückwärts suchen. Und ich kann nund verwenden N, um die Suche vorwärts und rückwärts zu wiederholen.

Es gibt auch zwei nette Abkürzungen: *oder #sucht nach dem Wort unter dem Cursor (vorwärts / rückwärts). Das ist sehr nützlich! (es gibt auch g*und g#varianten)

Aber ... Wie kann ich Vim bitten, nach genau diesem Text zu suchen, nachdem ich Text im visuellen Modus ( v) ausgewählt habe ? Ein kurzer Blick auf :help... hat mir nicht geholfen.



Danke für die Tipps mit *und #! Wäre nett wenn deine Frage auch erklären würde was g*und was machen g#würde;)
winklerrr 25.10.18

Antworten:


22

Die folgende Sequenz macht, was Sie wollen, wenn ein Textblock bereits ausgewählt ist:

  • y(Den ausgewählten Text in das "Register ziehen)
  • / (Suchmodus aufrufen)
  • ( \ V) (optional, "keine Magie" -Modus aktivieren *)
  • Ctrl+ r "(Text aus dem "Register einfügen )
  • Enter (Engagieren!)

(*) Im Modus "Sehr keine Magie" wird der folgende Text als einfacher Text anstatt als regulärer Text interpretiert. Beachten Sie jedoch, dass \und /immer noch etwas Besonderes sind und auf andere Weise behandelt werden müssen. Wenn der Text keine Sonderzeichen enthält, können Sie diesen Schritt überspringen.

Quelle: Vim Tips Wiki


1
Danke! Dies ist viel verständlicher als das "How-To" auf der vim.wikia- Seite
winklerrr

64

Sie können den hervorgehobenen Text zuerst ziehen. Dann

  • /

  • Ctrlr

  • "

Welches wird einfügen, was Sie nach dem gezerrt haben /.


7
Gute Idee ... nur dass der eingefügte Text als Regex interpretiert wird, was nicht erwünscht ist. :-(
Denilson Sá Maia

4
Wenn dies für Sie fast gut genug ist, können Sie es /\V<C-r>"stattdessen tun . Indem Sie \VIhre Suchanfrage voranstellen , weisen Sie vim an, "keine Zauberei" zu verwenden. Backslashes können immer noch Probleme verursachen. Siehe:help \V
idbrii

3
Es kann hilfreich sein, zu erklären, Ctrl+Rwie Sie auf ein Register zugreifen, und es *ist einfach das System-Zwischenablage-Register. Sie können beispielsweise auch yawFolgendes tun: Ein Wort in das Register "(das Standardregister) ziehen und dann /<C-r>"nach dieser Zeichenfolge suchen.
Ben Davis

5
@ DenilsonSá - Sie können diese Lösung verwenden, aber anstatt /Ihre Suche durchzuführen, verwenden Sie ?stattdessen, da umgekehrte Suchen standardmäßig Schrägstriche ersetzen. Dann können Sie drücken N, um die Suche in Vorwärtsrichtung fortzusetzen.
Brad Parks

7

Ich hatte nie das Bedürfnis nach einer solchen Funktion, aber wenn man bedenkt, dass in Vim eine Funktion benötigt wird, sollte dies meiner Meinung nach helfen:

Suchen Sie nach visuell ausgewähltem Text

Ich habe es nicht getestet, aber angesichts des Codes scheint es genau das zu sein, wonach Sie suchen.


4

Eine Methode zum Erstellen dieses Verhaltens finden Sie hier im VIM-Wiki .


Schön, ich fand die Version, um den Schrägstrichen zu entkommen, hilfreich. vnoremap // y/\V<C-r>=escape(@",'/\')<CR><CR>
Handwerk

1

Mit dieser Lösung können Sie visuell ausgewählte Kontexte auch mit mehrzeiligen und Escape-Zeichen durchsuchen.

Fügen Sie den folgenden Code in Sie ein .vimrcund durchsuchen Sie Ihren visuell ausgewählten Inhalt nach //. Sie können den ausgewählten Inhalt auch global durch ersetzen /s. Oder Ersetzen Sie den ausgewählten Kontext lokal durch //und wählen Sie dann visuell eine Region und aus :'<,'>s//{new_text}.

set incsearch
set hlsearch
set ignorecase
function GetVisualSelection()
  let raw_search = @"
  let @/=substitute(escape(raw_search, '\/.*$^~[]'), "\n", '\\n', "g")
endfunction
xnoremap // ""y:call GetVisualSelection()<bar>:set hls<cr>
if has('nvim')
  set inccommand=nosplit
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s/
else
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s//
endif

Bei der obigen Konfiguration geht es nur um die Suche. Alle meine vim-Konfigurationen finden Sie unter .vimrc


0

Wenn ich in meinen Konfigurationen auf zwei separaten Computern Text auswähle und dann drücke /, wird automatisch nach dem ausgewählten Text gesucht.


Das ist nicht das Standardverhalten. Wenn ich hier / drücke (im visuellen Modus), wird nur eine leere Regex-Eingabeaufforderung angezeigt, die darauf wartet, dass ich etwas eingebe.
Denilson Sá Maia

Seltsam, weil ich nie etwas getan habe, um es zu ermöglichen.
Nathan Fellman

3
Viele Distributionen liefern standardmäßig eine nicht standardmäßige VIM-Konfiguration aus (wahrscheinlich, weil die standardmäßige VIM-Konfiguration viele nützliche Funktionen deaktiviert, hauptsächlich aus Gründen der Vi-Kompatibilität).
sleske
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.