![在 Vim 中取消注释的更智能方法](https://linux22.com/image/125491/%E5%9C%A8%20Vim%20%E4%B8%AD%E5%8F%96%E6%B6%88%E6%B3%A8%E9%87%8A%E7%9A%84%E6%9B%B4%E6%99%BA%E8%83%BD%E6%96%B9%E6%B3%95.png)
我认为进行评论的一个好方法是键映射。我需要注释/取消注释 C 风格代码,这是我的映射
nnoremap <leader>c 0<insert>//<Esc>
nnoremap <leader>' 0xx
第二个用于取消注释,它只是将光标移动到行首并删除两次。
我想知道是否有可能在这里写一个 if 语句,我的意思是将光标移动到行首并检查前两个字符是否是反斜杠,如果是,则删除两次,如果不是,则不执行任何操作
谢谢
答案1
我想知道是否有可能在这里写一个 if 语句,我的意思是将光标移动到行首并检查前两个字符是否是反斜杠,如果是,则删除两次,如果不是,则不执行任何操作
这当然是可能的。但是,如果使用简单的正则表达式完成,就会简单得多:
nnoremap <leader>' :s/^\/\/<cr>
值得庆幸的是,我们可以选择使用什么分隔符,因此如果我们更改分隔符,我们就不需要转义斜杠:
nnoremap <leader>' :s;^//<cr>
附带说明一下,如果您在宏中运行它,并且在开头没有注释的行上运行它,它将阻止宏运行。如果你不希望这种情况发生,请添加标志/e
,例如:
nnoremap <leader>' :s;^//;;e<cr>
此外,如果您还想取消注释某些空格后的注释行,例如:
//Remove these comments
//And these ones too
然后我会这样做:
nnoremap <leader>' :s;^\s*//<cr>