Как заменить слова в файле git rebase

Как заменить слова в файле git rebase

Я пытаюсь настроить отображения визуального режима для быстрого редактирования списка перебазирования, сгенерированного git, при выполнении интерактивного перебазирования (например git rebase --interactive upstream/master). В таком случае вам будет представлен текстовый файл, который выглядит следующим образом:

pick 12345678 commit message 1
pick 23456789 commit message 2
pick 34567890 commit message 3

Что я хотел бы сделать, так это сделать <c-v>и выбрать строки, которые я хотел бы переключить на другой метод перебазирования, например, использовать <localleader>fдля изменения с pickна fixupв первом слове строки. Я хотел бы сделать это немного отказоустойчивым, чтобы это не делалось для других строк, таких как комментарии и пустые строки.

Я попытался сделать это :substituteс группой регулярных выражений, чтобы выбрать только допустимые слова: (pick|reword|edit|squash|fixup|exec|drop). Вот что у меня сейчас есть в .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>

К сожалению, регулярные выражения ничего не соответствуют. Я попробовал добавить a \=в конце шаблона, чтобы сопоставить 0 или 1 любое слово в группе, и он добавляет замену перед словом, которое она должна заменить.

Что я делаю не так?

решение1

Это ускользающая вещь. Либо всегда используйте \\|вместо \|или попробуйте

autocmd FileType gitrebase vnoremap <buffer> <localleader>p :s/\v^(pick\|reword\|edit\|squash\|fixup\|exec\|drop)/pick/<cr>

Связанный контент