Como substituir palavras no arquivo git rebase

Como substituir palavras no arquivo git rebase

Estou tentando configurar mapeamentos de modo visual para editar rapidamente a lista de rebase gerada pelo git ao fazer rebase interativo (por exemplo git rebase --interactive upstream/master). Nesse caso, você verá um arquivo de texto parecido com este:

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

O que eu gostaria de fazer é selecionar <c-v>as linhas que gostaria de mudar para outro método de rebase, por exemplo, usar <localleader>fpara mudar de pickpara fixupna primeira palavra da linha. Eu gostaria de tornar isso um pouco tolerante a falhas, para que não aconteça com outras linhas, como comentários e linhas vazias.

O que tentei fazer foi fazer um :substitutecom um grupo regexp para pegar apenas palavras válidas: (pick|reword|edit|squash|fixup|exec|drop). Aqui está o que tenho atualmente em .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>

Infelizmente, as regexes não correspondem a nada. Tentei adicionar um \=no final do padrão para corresponder a 0 ou 1 de qualquer palavra do grupo e ele adiciona a substituição antes da palavra que deveria substituir.

O que estou fazendo de errado?

Responder1

É uma coisa que escapa. Sempre use \\|em vez de \|ou tente

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

informação relacionada