Ein Einzeiler
Ich habe einen einfachen regulären Ausdruck als Ersatz gefunden (vorausgesetzt, 'magic' ist gesetzt):
:s/ \([a-zA-Z]\)/\u\1/g
Dies entspricht einem einzelnen Buchstaben nach einem Leerzeichen und speichert den Buchstaben. Anschließend wird es für jede Übereinstimmung in der Zeile durch den gespeicherten Großbuchstaben ( \u
= Großbuchstaben, \1
= erste gespeicherte Übereinstimmung) ersetzt.
Bewerben Sie sich über die gesamte Datei, indem Sie ein %
zwischen :
und setzen s
.
Der Nachteil dieser Lösung ist, dass sie zeilenweise ist (was für Ihre Beispiele funktioniert), aber zu kurz greifen würde, wenn Sie nur ein paar Wörter aus vielen innerhalb einer Zeile herausfinden möchten.
Eine umfassendere Lösung
map <leader>g~ :set opfunc=MyCamelCase<CR>g@
function! MyCamelCase(type, ...)
let searchsave=@/
silent s/\%>'\[ \([a-zA-Z]\)\%<']/\u\1/g
let @/=searchsave
endfunction
Dadurch wird ein neuer Bediener erstellt, der eine Bewegung ausführen kann. Wenn Sie <leader>
als haben \
, dann geben Sie den folgenden Text ein (mit |
als Cursor):
This is some |example text to work with.
Tippen \g~3w
gibt
This is some exampleTextTo work with.
Das heißt, wir haben 3 Wörter in Kamelhüllen geschrieben.
Beschreibung dieser Ersetzung:
s/
Startet die Substitution.
\%>'\[
ist ein bisschen schmerzhaft. Das \%>'m
sagt, um rechts von einer Marke zu passen. Wir wollen Zeichen [
, aber das muss auch in diesem Muster ausgeblendet werden. Dies startet also das Spiel nach der Bewegung, die der Bediener erhalten hat.
\([a-zA-Z\)
ist das gleiche wie ab dem Einzeiler oben.
\%<']
Dies ist das andere Ende, das vor dem Ende der Bewegung übereinstimmt.
/\u\1/g
ist der Ersatz vom oben genannten Einzeiler.
Als Alternative verwende ich das Vim-Abolish- Plugin, das eine Zwangsfunktion bietet:
quelle
Sie können ein rekursives Makro erstellen, das dies für eine einzelne Zeile mit den folgenden Tastenanschlägen ausführt:
(Beachten Sie, dass das Leerzeichen zwischen dem
f
und demx
ein Tippen auf die Leertaste und keine Pause ist.)Im Detail:
Löschen Sie das q-Register. Dies ist notwendig, da wir ein rekursives Makro erstellen. (Siehe Schritt 5.):
qqq
Starten Sie die Aufzeichnung eines Makros in Register q:
qq
Sie können die
w
Bewegung hier nicht verwenden , da das Makro am Ende der Zeile abgebrochen werden soll, anstatt zur nächsten Zeile zu springen. Springen Sie stattdessen zum nächsten Leerzeichen in der Zeile, indem Sie dief
Taste gefolgt von der Leertaste drücken :f<space>
Löschen Sie das Leerzeichen und schreiben Sie den folgenden Buchstaben in Großbuchstaben:
xgUl
Recurse. Da wir das
q
Register in Schritt 1 geleert haben, ist noch nichts darin, und dies wird nichts bewirken:@q
Speichern Sie das Makro:
q
Sie können dieses Makro dann auf mehrere Zeilen anwenden, indem Sie einen Bereich verwenden:
Wenden Sie das Makro auf jede Zeile in der Datei an:
Wenden Sie das Makro auf die Zeilen 2 bis 5 an:
Treffen Sie eine visuelle Auswahl, und geben Sie dann ein
:normal @q
. Dadurch wird die Befehlszeile vorab ausgefüllt, wenn Sie die:
Taste drücken. Dies führt zu einem Befehl, der das Makro auf jede Zeile in der Auswahl anwendet:quelle
q
Register zu löschen,qq
genau wie dies, bevor mit der Aufzeichnung von Tastenanschlägen begonnen wird. Genau deshalbqqq
funktioniert das Löschen desq
Registers :)q
Register (dh das VerwendenqQ
) erfordert, ist es wahrscheinlich erforderlich, es zuerst zu löschen .vim -u NONE
). Die vorhandenen Inhalte werden nur dann gelöscht, wenn Sie speichern das Register, das in Schritt 6 Clearing aus dem Register , bevor Sie damit beginnen , ist notwendig , wenn Sie rekursiv möchten.Siehe http://vim.wikia.com/wiki/Changing_case_with_regular_expressions Hier werden die \ U, \ L, \ u, \ l-Modifikatoren ganz klar und prägnant erklärt!
Sein Wesen ist das Folgende:
In manchen Fällen möchten Sie möglicherweise eine Datei durchgehen und die Groß- und Kleinschreibung von Zeichen ändern, die bestimmten Kriterien entsprechen. Wenn Sie reguläre Ausdrücke gut verstehen, können Sie dies ziemlich einfach tun.
Es ist so einfach, \ U oder \ L vor die Rückverweise zu setzen, deren Groß- / Kleinschreibung Sie ändern möchten, und \ E am Ende. Vim schreibt den Text in Groß- oder Kleinbuchstaben. Verwenden Sie \ u und \ l (ohne das \ E am Ende), um nur die Groß- und Kleinschreibung des allerersten Zeichens in der Rückbeziehung zu ändern.
(Ein "Rückverweis" ist ein Teil eines regulären Ausdrucks, der sich auf einen vorherigen Teil eines regulären Ausdrucks bezieht. Die häufigsten Rückverweise sind &, \ 1, \ 2, \ 3, ..., \ 9).
Einige Beispiele, die die Leistungsfähigkeit dieser Technik demonstrieren:
Kleinschreibung der gesamten Datei
(& ist eine praktische Rückreferenz, die sich auf den vollständigen Text der Übereinstimmung bezieht.)
Großschreibung aller Wörter, denen ein <vorangestellt ist (dh HTML-Tag-Namen öffnen):
Beachten Sie auch die Befehle gu und gU.
Zum Beispiel wird mit ggguG die gesamte Datei in Kleinbuchstaben geschrieben. (gg = nach oben gehen, gu = Kleinbuchstaben, G = nach EOF gehen).
Indem Sie das \ 0-General-Backref anstelle der Namen-Backref (\ 1, \ 2 usw.) verwenden, können Sie einige Eingaben für die Ersetzungszeilengruppe des regulären Ausdrucks speichern.
Diese Regex-Großbuchstaben bestehen aus einer expliziten Menge von Wörtern, die in einer Datei in Großbuchstaben geschrieben werden:
Keine Raketenwissenschaft, aber sonst müsstest du Folgendes tun:
quelle