Vim
如何替換 git rebase 文件中的單詞
我正在嘗試設置可視模式映射,以便在執行互動式 rebase(例如
git rebase --interactive upstream/master
)時快速編輯 git 生成的 rebase 列表。在這種情況下,您會看到一個如下所示的文本文件:pick 12345678 commit message 1 pick 23456789 commit message 2 pick 34567890 commit message 3
我想做的是做
<c-v>
並選擇我想切換到另一種變基方法的行,例如在行的第一個單詞中使用<localleader>f
to change frompick
tofixup
。我想讓這有點容錯,所以它不會對其他行執行此操作,例如註釋和空行。我嘗試做的是
: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,並在它應該替換的單詞之前添加替換。我究竟做錯了什麼?
這是逃避的事情。要麼總是使用
\\|
,\|
要麼嘗試autocmd FileType gitrebase vnoremap <buffer> <localleader>p :s/\v^(pick\|reword\|edit\|squash\|fixup\|exec\|drop)/pick/<cr>