Git rebase ファイル内の単語を置換する方法

Git rebase ファイル内の単語を置換する方法

対話型リベース (例 ) を実行するときに、git によって生成されたリベース リストをすばやく編集するためのビジュアル モード マッピングを設定しようとしていますgit rebase --interactive upstream/master。その場合、次のようなテキスト ファイルが表示されます。

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

私がやりたいのは、<c-v>別のリベース方法に切り替えたい行を選択して、 を実行することです。たとえば、行の最初の単語を から に変更するために を使用します。<localleader>fこれを少し耐障害性を持たせたいので、コメントや空行などの他の行ではこれを行いません。pickfixup

私が試したのは、:substitute正規表現グループを使用して を実行し、有効な単語のみを取得することです: (pick|reword|edit|squash|fixup|exec|drop)。現在 にある内容は次のとおりです.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>

残念ながら、正規表現は何も一致しません。\=パターンの最後に を追加して、グループ内の任意の単語の 0 個または 1 個に一致させようとしましたが、置換するはずの単語の前に置換が追加されました。

何が間違っているのでしょうか?

答え1

それは逃げ道です。常に\\|代わりに使用する\|か、

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

関連情報