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 已经解决了。
我正在尝试在 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 已经解决了。