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>f
para mudar de pick
para fixup
na 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 :substitute
com 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>