Just asked a question关于如何在评论中包含一行来产生这个梦幻般的片段:
nnoremap - mzI/* <esc>A */<esc>`z
我想打开另一个帖子,询问如何将其转换为切换。这意味着它首先检查行是否包含在/ * * /中并删除注释或添加注释(如果不存在)。
这必须是一个脚本还是我可以用地图执行此操作?此外,我不想为此使用插件,因为它很简单,我想看看它是如何完成的。
答案 0 :(得分:3)
你走了:
nnoremap <expr> - getline('.') =~ '^\s*/\*.\+\*/$' ? '^3x$daw' : "I/* \<esc>A */\<esc>"
取消评论由^3x$daw
完成,删除映射的开始和结束部分。检测通过当前行getline('.')
上的正则表达式完成。我已经从映射的注释部分删除了z
标记,因为它很难将光标保持在“相同”的位置。
这是一个更好的映射的一个很好的例子。但是有一些事情要考虑:
.
和"
寄存器。.
我强烈推荐一个评论插件。我目前使用Tim Pope的vim-commentary插件。
如需更多帮助,请参阅:
:h :map-<expr>
:h getline(
答案 1 :(得分:2)
RE 我不想为此使用插件,因为它很简单。
直到你大量使用它才会很简单; Peter Rincker的答案已经列出了一些问题。由于您可能依赖(非)评论,这对于经过验证的强大插件来说是一个很好的指示。
让我提出The NERD Commenter的建议;它具有您要求的切换映射,并支持多种语言。除了评论之外,还可以查看tComment。