vim使用cmap简化搜索并替换正则表达式

时间:2015-07-07 01:49:02

标签: regex vim

我需要手动缩放C ++ switch语句中的case和default两个空格。 所以我将这一行添加到我的vimrc文件中:

cmap >c %s/\(\ case\ \|\ default:\)/\ \ \1/g

但是,当我在vim中输入:> c时,会产生:

       :%s/\(\ case\ |\ default:\)/\ \ \1/g

\ |预期而不是|,

有人能告诉我cmap中有什么问题吗?谢谢!

2 个答案:

答案 0 :(得分:0)

目前vim在|之前理解反斜杠,试图逃避它,因此行为,尝试再添加一个反斜杠:

cmap >c %s/\(\ case\ \\|\ default:\)/\ \ \1/g

答案 1 :(得分:0)

| caracter分离为命令。在这种情况下,最好使用|转义<bar>

我认为命令比映射更合适,尤其是cmap

command! -range=% CaseFix <line1>,<line2>s/\(\ case\ \<bar>\ default:\)/\ \ \1/g

如果您确实需要映射,我建议使用<leader>进行常规模式映射。

nnoremap <leader>cf :%s/\(\ case\ \<bar>\ default:\)/\ \ \1/g<cr>

或者我认为您可能最好调整缩进规则并使用=重新缩进代码。例如gg=G C / C ++缩进规则通常由'cindent''cinkeys''cinoptions'管理。

有关详细信息,请参阅:

:h key-notation
:h :command
:h =
:h 'cindent'
:h 'cinkeys'
:h 'cinoptions'