7 Stimmen

Suchen Sie "off the record" in Vim oder entfernen Sie das Suchmuster aus der Suchhistorie?

Ich habe in meiner .vrimrc niedliche kleine Makros, die C++-Style-Kommentare aus dem Code hinzufügen/entfernen:

" Entferne C++-Style-Kommentar
nmap _ :s/^[ \t]*\/\///==:nohls
" Kommentiere Zeile, C++-Style
nmap - :s/^[ \t]*/\/\/ /==:nohls

Diese funktionieren, indem sie das Muster am Anfang der Zeile durch ein anderes ersetzen. In einem Fall wird // hinzugefügt und in einem anderen werden die Schrägstriche entfernt (wenn sie gefunden werden).

Das Problem, auf das ich stoße, ist, dass diese Makros Suchen-und-Ersetzen verwenden. Dadurch werden unerwünschte Suchmuster in die Suchhistorie von vim gespeichert und diese überladen.

Betrachten Sie die Sequenz:

  1. Nach 'hello' gesucht
  2. Verwenden des Makros, um eine Zeile zu kommentieren
  3. Erneutes Suchen (durch Eingabe von 'n' oder /,Loslassen der Taste, Enter)
  4. Ergebnis: Die Suche sucht nicht nach 'hello', weil das Suchmuster auf das gesetzt ist, was das Makro verwendet hat, nämlich ^[ \t]*

Wie kann dieses Makro modifiziert werden, um keine unerwünschten Muster in die Suchhistorie einzufügen?

10voto

Christian Brabandt Punkte 7625

Neuere Versionen von Vim haben den :keeppattern Modifier, der verhindert, dass das Muster dem Verlauf hinzugefügt wird.

9voto

romainl Punkte 171412
  1. Speichern Sie das aktuelle Suchregister mit let old = @/,
  2. machen Sie Ihre Sache,
  3. löschen Sie die letzte Suche aus dem Verlauf mit call histdel('/', -1),
  4. stellen Sie das Suchregister wieder her mit let @/ = old.

So:

" Entfernen Sie Kommentare im c++-Stil
nnoremap  _ :let old = @/s/^[ \t]*\/\///==:nohlscall histdel('/', -1)let @/ = old
" Kommentieren Sie die Zeile im c++-Stil
nnoremap  - :let old = @/s/^[ \t]*/\/\/ /==:nohlscall histdel('/', -1)let @/ = old

Oder verwenden Sie Tim Pope's Commentary.

2voto

Bohr Punkte 1436

Außerdem gibt es eine search()-Funktion, die den Suchverlauf nicht berührt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X