Vimscript - 用于注释可视块的映射

时间:2017-10-23 16:06:20

标签: vim vim-plugin

我试图在Vim上创建一个映射,其行为类似于以下内容:

首先,我在可视模式下选择一个代码块或文本块。 我使用这个映射来替换每一行的第一列,以便'#'有效地评论每一行。

到目前为止,我有以下内容:

vnoremap <Leader>c :normal! :s/^/#/<cr>

但由于某种原因,它无法正常工作。当我在文本块上点击<Leader>c时没有任何反应。另一方面,如果我有:

vnoremap <Leader>c :normal! s/^/#/<cr>

它将例如替代:

The grey fox.

有关

/^/#/he grey fox.

有关如何解决此问题的任何想法?

2 个答案:

答案 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