So ersetzen Sie Wörter in einer Git-Rebase-Datei

So ersetzen Sie Wörter in einer Git-Rebase-Datei

Ich versuche, visuelle Moduszuordnungen einzurichten, um die von Git generierte Rebase-Liste schnell bearbeiten zu können, wenn ich beispielsweise ein interaktives Rebase durchführe git rebase --interactive upstream/master. Dabei wird Ihnen eine Textdatei angezeigt, die folgendermaßen aussieht:

pick 12345678 commit message 1
pick 23456789 commit message 2
pick 34567890 commit message 3

Ich möchte <c-v>die Zeilen auswählen, die ich auf eine andere Rebase-Methode umstellen möchte, z. B. „Verwenden“, um im ersten Wort der Zeile von „zu“ <localleader>fzu wechseln . Ich möchte dies etwas fehlertoleranter machen, sodass dies bei anderen Zeilen, wie Kommentaren und leeren Zeilen, nicht passiert.pickfixup

Ich habe versucht, :substitutemit einer Regexp-Gruppe nur gültige Wörter auszuwählen: (pick|reword|edit|squash|fixup|exec|drop). Folgendes habe ich derzeit in .vimrc.

autocmd FileType gitrebase vnoremap <buffer> <localleader>p :s/^\(pick\|reword\|edit\|squash\|fixup\|exec\|drop\)/pick/<cr>
autocmd FileType gitrebase vnoremap <buffer> <localleader>r :s/^\(pick\|reword\|edit\|squash\|fixup\|exec\|drop\)/reword/<cr>
autocmd FileType gitrebase vnoremap <buffer> <localleader>e :s/^\(pick\|reword\|edit\|squash\|fixup\|exec\|drop\)/edit/<cr>
autocmd FileType gitrebase vnoremap <buffer> <localleader>s :s/^\(pick\|reword\|edit\|squash\|fixup\|exec\|drop\)/squash/<cr>
autocmd FileType gitrebase vnoremap <buffer> <localleader>f :s/^\(pick\|reword\|edit\|squash\|fixup\|exec\|drop\)/fixup/<cr>
autocmd FileType gitrebase vnoremap <buffer> <localleader>x :s/^\(pick\|reword\|edit\|squash\|fixup\|exec\|drop\)/exec/<cr>
autocmd FileType gitrebase vnoremap <buffer> <localleader>d :s/^\(pick\|reword\|edit\|squash\|fixup\|exec\|drop\)/drop/<cr>

Leider stimmen die regulären Ausdrücke mit nichts überein. Ich habe versucht, \=am Ende des Musters ein hinzuzufügen, um 0 oder 1 eines beliebigen Wortes in der Gruppe abzugleichen, und es fügt den Ersatz vor dem Wort hinzu, das es ersetzen soll.

Was mache ich falsch?

Antwort1

Es ist eine Fluchtsache. Verwenden Sie entweder immer \\|anstelle von \|oder versuchen Sie

autocmd FileType gitrebase vnoremap <buffer> <localleader>p :s/\v^(pick\|reword\|edit\|squash\|fixup\|exec\|drop)/pick/<cr>

verwandte Informationen