Vim

如何替換 git rebase 文件中的單詞

  • May 24, 2017

我正在嘗試設置可視模式映射,以便在執行互動式 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>fto change from pickto 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,並在它應該替換的單詞之前添加替換。

我究竟做錯了什麼?

這是逃避的事情。要麼總是使用\\|\|要麼嘗試

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

引用自:https://unix.stackexchange.com/questions/366934