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

Vimscript - Mapping for commenting visual blocks

我正在尝试在 Vim 上创建映射,其行为如下所示:

首先,我 select 在可视模式下使用了一段代码或文本。 我使用此映射将每一行的第一列替换为“#”,从而有效地注释每一行。

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

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

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

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

它将例如替代:

The grey fox.

对于

/^/#/he grey fox.

知道如何解决这个问题吗?

:normal 是一个 Ex 命令,允许执行 正常模式 命令(从自定义命令或函数,或一般的命令行模式)。您的键以 : 开头,因此请立即从正常(或此处:可视)模式切换到命令行模式。那没有意义。只需像这样定义映射:

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

:会自动为你插入'<,'>,这就是你想要的(对所有选中的行进行操作)。您还可以定义适用于当前(或 [count])行的相关正常模式映射:

nnoremap <Leader>c :s/^/#/<cr>

如果突出显示打扰到您,请附加 :nohlsearch 命令:

nnoremap <Leader>c :s/^/#/<bar>nohlsearch<cr>

你可以简单地做:

vnoremap <leader>c :s/^/#/<cr>

替换命令将在可视模式下自动获取范围,'<,'>

注意:您可能想使用 xnoremap 而不是 vnoremap

有更好的方法

评论是一个常见的问题,看似棘手,many plugins. I prefer to stand on the shoulder's of giants and use a plugin. I personally use commentary.vim 已经解决了。