
インタラクティブなリベース(例:)を実行するgit rebase --interactive upstream/master
ときに、Gitで生成されたリベースのリストをすばやく編集するためにビジュアルモードマップを設定しようとしています。この場合、次のテキストファイルが表示されます。
pick 12345678 commit message 1
pick 23456789 commit message 2
pick 34567890 commit message 3
私がしたいのは、<c-v>
別のリベース方法に切り替えたい行を選択することです。たとえば、行の最初の単語を使用して<localleader>f
fromに変更しますpick
。fixup
私は、コメントや空白行などの他の行に対してこれを行わないように、ある程度フォールトトレランスを持たせたいと思います。
私がやろうとしているのは、: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に一致するようにパターンの末尾にaを追加しようとしましたが、置換したい単語の前に代替項目を追加します。
私は何が間違っていましたか?
答え1
警察アウト日です。常に\\|
代わりに使用または\|
試してください。
autocmd FileType gitrebase vnoremap <buffer> <localleader>p :s/\v^(pick\|reword\|edit\|squash\|fixup\|exec\|drop)/pick/<cr>