2012-04-13 2 views
0

Ich versuche, eine Operator-ausstehende Zuordnung zu definieren (mit onoremap), um allen Text zwischen dem vorherigen { und dem nächsten } zu entsprechen. Dies ist für die Verwendung in einer css Datei, so dass ich einfach Regeln löschen, ändern oder kopieren kann mit ir.Wie entferne ich die Hervorhebung von einer Suche in einem `operator-pending`-Mapping in vim?

Ich habe die Syntax verwendet in "Learn vimscript den harten Weg", die eine Kombination von execute und normal ist. Was ich nicht tun konnte, ist das Highlight Suche nach meiner letzten Suche. Nach der Verwendung des Mappings werden alle } in der Datei hervorgehoben.

Bisher ist hier, was ich habe:

au Filetype css noremap <buffer> ir :<C-U>execute "normal! ?{\rjV/}\rk"<CR> 

Ich weiß, ich brauche :nohlsearch zu nennen, aber ich weiß nicht, wie das in dem Mapping passen. Das Mapping führt dazu, dass ein Text visuell ausgewählt wird. Wenn :nohlsearch aufgerufen wird, wird es auf die Auswahl angewendet, was nicht funktioniert.

brauche ich einen Weg, um den '<,'> Marker zu löschen, aber ich konnte nicht finden, wie <C-U> im normal Befehl zu schreiben, um es richtig ausgeführt wird. Eine weitere Möglichkeit könnte seine visuellen Modus zu verlassen, führen Sie die :nohlsearch und dann erneut den letzten ausgewählten Text mit gv, aber auch für, dass ich nicht finden kann, wie <Esc> in meine normal Erklärung zu schreiben.

+0

funktioniert 'viB' nicht für Ihren Anwendungsfall? –

+0

Ja, viB funktioniert und es ist tatsächlich, was ich schließlich in meinem vimrc, aber als ich mit dem Highlight-Problem konfrontiert wurde, habe ich dies als ein Beispiel für meine Frage verwendet. – pixelastic

Antwort

3

In diesem speziellen Fall ist es wahrscheinlich einfacher, wie etwas zu verwenden:

au Filetype css noremap <buffer> ir :<C-U>call search('{', 'Wb')\|call search('}', 'Ws')\|normal! v''<CR> 

Beachten Sie, dass dies tut, was Ihr Beispiel der Fall ist, nicht das Richtige. Verschachtelte Klammern werden beispielsweise nicht korrekt behandelt.

Wenn Sie die Suchfunktion ohne das Flag 's' aufrufen, werden keine Markierungen gesetzt oder das Suchregister geändert, sodass Sie nichts zurücksetzen müssen.

Beachten Sie, dass dies nicht wirklich der beste Weg ist, um das zu erreichen, was Sie wollen - wahrscheinlich möchten Sie stattdessen das iB oder i{ (sie sind die gleichen) Textobjekt.

+0

Ich kannte den Suchbefehl nicht. Ich werde lesen: Hilfe und versuchen Sie Ihre Lösung. Ich werde zurückkommen, um es zu akzeptieren, wenn es funktioniert (auch wenn ich denke, dass ich iB am Ende benutzen werde). – pixelastic

Verwandte Themen