如何替换 git rebase 文件中的单词

如何替换 git rebase 文件中的单词

我正在尝试设置可视模式映射,以便在进行交互式变基(例如git rebase --interactive upstream/master)时快速编辑 git 生成的变基列表。在这种情况下,您将看到一个如下所示的文本文件:

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

我想做的是选择<c-v>我想要切换到另一种变基方法的行,例如,使用该行的第一个单词<localleader>f从 更改为pickfixup我想让它具有一定的容错能力,因此它不会对其他行(例如注释和空行)执行此操作。

我尝试做的是使用:substitute正则表达式组执行 a 来仅拾取有效单词:(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>

相关内容