Estoy intentando configurar asignaciones de modo visual para editar rápidamente la lista de rebase generada por git cuando hago un rebase interactivo (por ejemplo git rebase --interactive upstream/master
). En tal caso, se le presenta un archivo de texto similar a este:
pick 12345678 commit message 1
pick 23456789 commit message 2
pick 34567890 commit message 3
Lo que me gustaría hacer es <c-v>
seleccionar las líneas que me gustaría cambiar a otro método de rebase, por ejemplo, usar <localleader>f
para cambiar de pick
a fixup
en la primera palabra de la línea. Me gustaría hacer esto un poco tolerante a fallas, para que no haga esto con otras líneas, como comentarios y líneas vacías.
Lo que he intentado hacer es hacerlo :substitute
con un grupo de expresiones regulares para detectar solo palabras válidas: (pick|reword|edit|squash|fixup|exec|drop)
. Esto es lo que tengo actualmente .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>
Lamentablemente, las expresiones regulares no coinciden con nada. Intenté agregar un \=
al final del patrón para que coincida con 0 o 1 de cualquier palabra del grupo y agrega el reemplazo antes de la palabra que se supone que debe sustituir.
¿Qué estoy haciendo mal?
Respuesta1
Es una cuestión de escapar. Utilice siempre \\|
en lugar de \|
o pruebe
autocmd FileType gitrebase vnoremap <buffer> <localleader>p :s/\v^(pick\|reword\|edit\|squash\|fixup\|exec\|drop)/pick/<cr>