Hallo, Am Mon, 18 Aug 2008, Christian Brabandt schrieb:
On Sun, 17 Aug 2008, David Haller wrote:
Am Son, 17 Aug 2008, Christian Brabandt schrieb:
On Sat, 09 Aug 2008, David Haller wrote: [..] | - sequence of optionally matching atoms: \%[atoms]
Das kapiere ich nicht. Meinen die sowas wie (foo|bar baz)?
Hm, :h /\%[] sagt folgendes:
\%[] A sequence of optionally matched atoms. This always matches. [..] Mir erschließt sich gerade der Sinn nicht. Wenn wir beim Beispiel road bleiben, dann funktioniert ja auch /\<r\(e\|o\)\?a\?d\?\> (vim, \< und \> heißt hier word boundary) Naja, es sieht simpler aus und man versteht es auch schneller, wenn man diese Syntax beherrscht.
Jup.
| - \& (which is to \| what "and" is to "or"; it forces several branches | to match at one spot)
Das kann ich auch nicht nachvollziehen. (foo\&bar) was soll das bringen?
:h /\& 2. A branch is one or more concats, separated by "\&". It matches the last concat, but only if all the preceding concats also match at the same position. Examples: "foobeep\&..." matches "foo" in "foobeep". ".*Peter\&.*Bob" matches in a line containing both "Peter" and "Bob"
Wozu man das braucht, weiß ich aber auch nicht.
Wenn du nicht weißt, ob erst Peter oder Bob in der Zeile steht. Sollte äquivalent zu (Peter.*Bob|Bob.*Peter) sein.
| - matching lines/columns by number: \%5l \%5c \%5v
Das könnte praktisch sein, und das scheint's nicht in perl REs zu geben.
Für einen Editor auf jeden Fall ;)
Zumindest, wenn der die Zeilen-/Spaltennummern auch anzeigt ;)
| - setting the start and end of the match: \zs \ze
Das versteh ich auch wieder nicht ;)
Das ist ziemlich praktisch. Angenommen ich habe eine komplexes Pattern, von dem ich einen Teil ersetzen will, dann kann ich den Match mithilfe von \zs und \ze auf den relevanten Teil einschränken. Zum Beispiel ich habe in einem langen Text mehrmals die Zeile: foo bar baz John foobar Dann kann ich mit :%s/foo bar baz \zsJohn\ze foobar/Alex/g nur den Namen austauschen, ohne im Ersetzungsteil foo bar baz Alex foobar schreiben zu müssen.
s/(foo bar baz )John( foobar)/$1Alex$2/g; Das \zs/\ze erspart einem nur die 4 Klammern, die aber sogar weniger Tipparbeit erfordern und in jedem mir bekanntem RE Mechanismus funktionieren (sed BRE z.B: s/\(foo bar baz \)John\( foobar\)/\1Alex\2/g) [..]
Ich bin durchaus ein Vim Poweruser, aber ich benötige selten diese Advanced Regular Expressions. Ich muß dann auch immer nachschlagen², wie das funktioniert. Wenn man eine Zeitlang auf der Vim Mailingliste mitliest, dann versteht man aber einiges besser.
Glaub ich. Geht mir mit perl und Emacs auch so. Wobei es bei perl inzwischen selten ist.
¹)Erwähnte ich schon, dass die verschiedenen RE Dialekte ziemlich nerven? Ständig nehme ich die falschen und ich muß immer überlegen, ob das aktuelle Tool jetzt dieses Feature kennt oder nicht.
Hm, ich komme mit (POSIX) BRE, ERE (siehe man 7 regex) (samt Emacs-Lisp-Variante) und perlre eigentlich nicht durcheinander. Weitere Dialekte kann ich aber nicht.
²)Wie gesagt, die Doku ist mit das Beste was es beim Vim gibt. Für Reguläre Ausdrücke empfiehlt es sich :h pattern.txt zu überfliegen oder mal im User Manual :h usr_27.txt nachzuschlagen.
perlre (1pm) - Perl regular expressions perlrequick (1pm) - Perl regular expressions quick start perlreref (1pm) - Perl Regular Expressions Reference perlretut (1pm) - Perl regular expressions tutorial Damit kommt man ziemlich weit ;) -dnh, der mit den Modi von vi(m) einfach nicht klarkommt, das wichtigste kann ich aber ;) -- "The internet works because despite the best efforts of the suits the technical people still talk to each other across vendors and try and make sure everything interworks well." -- Alan Cox -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org