Cómo sustituir palabras en el archivo git rebase

Cómo sustituir palabras en el archivo git rebase

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>fpara cambiar de picka fixupen 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 :substitutecon 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>

información relacionada