Como substituir palavras no arquivo git rebase

0

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?

    
por Spoike 24.05.2017 / 13:25

1 resposta

2

É 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>
    
por 24.05.2017 / 14:13

Tags