我试图在Vim上创建一个映射,其行为类似于以下内容:
首先,我在可视模式下选择一个代码块或文本块。 我使用这个映射来替换每一行的第一列,以便'#'有效地评论每一行。
到目前为止,我有以下内容:
vnoremap <Leader>c :normal! :s/^/#/<cr>
但由于某种原因,它无法正常工作。当我在文本块上点击<Leader>c
时没有任何反应。另一方面,如果我有:
vnoremap <Leader>c :normal! s/^/#/<cr>
它将例如替代:
The grey fox.
有关
/^/#/he grey fox.
有关如何解决此问题的任何想法?
答案 0 :(得分:2)
:normal
是一个Ex命令,允许执行普通模式命令(通常来自自定义命令或函数或命令行模式)。您的密钥以:
开始,因此立即从正常(或此处:可视)模式切换到命令行模式。这没有意义。只需像这样定义映射:
vnoremap <Leader>c :s/^/#/<cr>
:
将自动为您插入'<,'>
,这就是您想要的(在所有选定的线路上操作)。您还可以定义适用于当前(或[count]
)行的相关正常模式映射:
nnoremap <Leader>c :s/^/#/<cr>
如果突出显示会扰乱您,请附加:nohlsearch
命令:
nnoremap <Leader>c :s/^/#/<bar>nohlsearch<cr>
答案 1 :(得分:1)
您可以这样做:
vnoremap <leader>c :s/^/#/<cr>
替换命令将在可视模式下自动获取范围'<,'>
。
注意:您可能希望使用xnoremap
代替vnoremap
。
评论是一个常见问题,看似棘手,已由many plugins解决。我宁愿站在巨人的肩膀上并使用插件。我个人使用commentary.vim。