É uma coisa de fuga. Use sempre \|
em vez de \|
ou tente
autocmd FileType gitrebase vnoremap <buffer> <localleader>p :s/\v^(pick\|reword\|edit\|squash\|fixup\|exec\|drop)/pick/<cr>
Estou tentando configurar os mapeamentos do modo visual para editar rapidamente a lista de rebase gerada pelo git ao fazer o rebase interativo (por exemplo, git rebase --interactive upstream/master
). Em tal você é apresentado com um arquivo de texto que se parece com isso:
pick 12345678 commit message 1
pick 23456789 commit message 2
pick 34567890 commit message 3
O que eu gostaria de fazer é <c-v>
e selecionar as linhas que gostaria de passar para outro método de rebase, por exemplo use <localleader>f
para alterar de pick
para fixup
na primeira palavra da linha. Eu gostaria de fazer isso um pouco tolerante a falhas, por isso não faz isso para outras linhas, como comentários e linhas vazias.
O que eu tentei fazer foi fazer um :substitute
com um grupo regexp para apenas pegar palavras válidas: (pick|reword|edit|squash|fixup|exec|drop)
. Aqui está o que eu 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, os regexes não correspondem a nada. Eu tentei adicionar um \=
no final do padrão para corresponder a 0 ou 1 de qualquer palavra no grupo e adiciona a substituição antes da palavra que deveria substituir.
O que estou fazendo de errado?