我正在尝试设置可视模式映射,以便在进行交互式变基(例如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
从 更改为pick
。fixup
我想让它具有一定的容错能力,因此它不会对其他行(例如注释和空行)执行此操作。
我尝试做的是使用: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>