2017-11-14 4 views
1

Was wäre der schnellste Weg für mich, ein einzelnes Leerzeichen vor einer linken Klammer einzufügen, wenn es noch keins gibt?VIM - Füge ein Leerzeichen vor linkem Zeichen ein, wenn vorher kein Leerzeichen vorhanden ist

Beispiele:

hello() -> hello() 
world() -> world() 
hello(world()) -> hello (world()) 

Es für einen Style Guide erforderlich ist, bin ich für die Klasse folgen soll, und ich kann es einfach nicht automatisch tun, so wie kann ich vim haben dies tun für mich.

+2

überprüfen Sie http://vim.wikia.com/wiki/Search_and_replace. für deinen Fall ':% s/^ \ s (/ \ s (/ g'. – Ibrahim

Antwort

1

Wie über eine Zuordnung:

function! SpaceBeforeLeftParen() 
    :silent! s/\v \(/(/g 
    :silent! s/\v\(/ (/g 
endfunction 
nnoremap c(:call SpaceBeforeLeftParen()<CR> 

Drücken Sie einfach c( auf einer Linie, wo Sie den Raum hinzugefügt werden möchten oder Sie die Funktion direkt aufrufen können. :call SpaceBeforeLeftParen()

- -

Einige andere Ansätze für die Substitution:

  • s/\(\s\+\)\@<!(/ (/
  • s/\v([^ ])(\()/\1 (/g

-

Möglicherweise ist die beste vollständige Antwort, abgeleitet von @ Marth Kommentar wäre:

function! SpaceBeforeLeftParen() 
    :silent! %s/\(\s\+\)\@<!(/ (/ 
endfunction 

..., die der Griff ganze Datei in einem Schuss. Rufen Sie mit :call SpaceBeforeLeftParen()

+0

) Dies wird ein Leerzeichen vor '(' auch wenn es bereits einen gab) hinzufügen. Auch ich vermute den 'verbose mode' (' \ v') ist ein Reflex, aber es ist irgendwie kontraproduktiv hier :) – Marth

+0

Was ist '\ v' Ich sehe das nicht auf dem vim wiki? – HSchmale

+0

@HSchmale es ist" sehr magischen Modus ", die Sie im Grunde verwenden können Perl-Stil Regex.Weitere Informationen finden Sie hier: http://vim.wikia.com/wiki/Simplifying_regular_expressions_using_magic_and_no-magic –

Verwandte Themen