Я пытаюсь настроить отображения визуального режима для быстрого редактирования списка перебазирования, сгенерированного 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>