在 Vim 编辑器中,注释代码是日常开发中的常见操作,掌握高效的注释命令能显著提升编程效率,Vim 本身没有内置的“通用注释命令”,但结合其强大的模式切换和自定义功能,可以通过多种方式实现注释操作,包括手动注释、利用插件、映射快捷键等,以下将详细介绍不同场景下的注释方法及实用技巧。

基础注释方法:手动插入注释符
对于简单的单行或多行注释,最直接的方式是手动输入注释符号,不同编程语言的注释符号不同,常见如下:
| 语言类型 | 单行注释符 | 多行注释符(起始/结束) |
|---|---|---|
| C/C++ | // | |
| Java/JavaScript | // | |
| Python | 无(多行用三引号) | |
| HTML/XML | 无(单行即多行) | |
| CSS | // | // |
| Shell/Bash | 无 |
操作步骤:
- 进入普通模式(按
Esc),然后按i或a进入插入模式,手动输入注释符。 - 若需批量注释,可先选中要注释的行(普通模式下按
Shift+V进入可视模式,上下移动选择行),然后按 进入命令行模式,输入normal i//(针对 C/C++ 等语言),按回车即可为选中行添加 前缀。
示例:
对 3-5 行添加 注释:
- 普通模式下,按
3G跳转到第 3 行,Shift+V选择,按j扩展到第 5 行。 - 按 ,输入
normal i//,回车后第 3-5 行每行开头会添加 。
利用 Vim 自定义命令实现高效注释
通过在 .vimrc 配置文件中定义命令,可以创建针对特定语言的注释快捷方式,为 C/C++ 定义注释命令:

" 在 .vimrc 中添加以下内容
function! ToggleComment()
if getline('.') =~ '^\s*//'
" 如果当前行以 // 开头,则删除注释
s/^\s*\/\/\s*//
else
" 否则添加注释
s/^/\/\/ /
endif
endfunction
nnoremap <Leader>c :call ToggleComment()<CR>功能说明:
<Leader>c是自定义快捷键(默认\c),在普通模式下按下后会切换当前行的注释状态(有注释则删除,无则添加)。^\s*//匹配行首的 (允许前面有空格),s/是替换命令。
扩展为多行注释:
若需对多行操作,可修改函数为:
function! ToggleCommentRange()
let l:line_start = line("'<")
let l:line_end = line("'>")
for l:lnum in range(l:line_start, l:line_end)
let l:line = getline(l:lnum)
if l:line =~ '^\s*//'
call setline(l:lnum, substitute(l:line, '^\s*\/\/\s*', '', ''))
else
call setline(l:lnum, substitute(l:line, '^', '// ', ''))
endif
endfor
endfunction
vnoremap <Leader>c :call ToggleCommentRange()<CR>使用方法:
可视模式下选中多行,按 <Leader>c 即可批量切换注释状态。
使用插件实现自动化注释
对于复杂项目,手动定义命令可能不够灵活,此时可借助插件实现智能注释,推荐插件:NERDCommenter 和 vim-commentary。

NERDCommenter
功能丰富,支持多种注释风格,安装后可通过快捷键操作:
| 快捷键 | 功能说明 |
|---|---|
<Leader>cc | 注释当前行或选中行 |
<Leader>cu | 取消注释 |
<Leader>c<space> | 切换注释状态(注释/取消注释) |
<Leader>cs | 以 风格注释(C 系语言) |
<Leader>ci | 智能注释(根据语言选择符号) |
配置示例(.vimrc):
" 让 NERDCommenter 支持空行注释 let NERDCommentEmptyLines = 1 " 注释时保留缩进 let NERDDefaultAlign = 'left'
vim-commentary
轻量级插件,操作更简单,核心命令是 gcc(注释当前行)和 gc(结合 motion 使用)。
| 快捷键 | 功能说明 |
|---|---|
gcc | 切换当前行注释状态 |
5gc | 注释当前行及后续 4 行(共 5 行) |
gcap | 注释当前段落(a=around paragraph) |
安装(通过 vim-plug):
Plug 'tpope/vim-commentary'
不同语言下的注释注意事项
Python:
- 单行注释用 ,多行注释建议用三引号 或 (但需注意,Python 实际不将三引号视为注释,而是字符串字面量)。
- 插件可自动识别 ,但需避免在代码中混用注释风格。
HTML/XML:
- 注释格式为
<!-- -->,插件如 NERDCommenter 会自动适配。 - 需注意注释中不能嵌套 ,否则可能导致解析错误。
- 注释格式为
Shell/Bash:
- 仅支持 注释,多行需逐行添加。
- 在脚本中, 后的代码不会执行,但需避免在字符串中误用。
进阶技巧:结合宏实现批量注释
对于重复性注释任务,可录制宏:
- 普通模式下,按
qa开始录制宏(存储到寄存器a)。 - 对当前行执行注释操作(如
i// <Esc>)。 - 移动到下一行(
j),按q停止录制。 - 输入
@a执行宏, 重复执行最后一次宏。
示例:为 10 行代码添加注释:
- 录制宏:
qa→i// <Esc>→j→q。 - 执行:
10@a(对后续 10 行执行宏)。
相关问答 FAQs
Q1: 如何在 Vim 中为选中的代码块添加多行注释(如 C 语言的 )?
A1: 使用 NERDCommenter 插件,可视模式下选中代码块,按 <Leader>cs 即可自动用 包裹选中内容,若手动实现,可在 .vimrc 中定义函数:
function! CommentBlock()
let l:start = line("'<")
let l:end = line("'>")
call append(l:end, ' */')
call append(l:start-1, '/*')
endfunction
vnoremap <Leader>cb :call CommentBlock()<CR>使用时选中代码块,按 <Leader>cb 即可在选中内容上下添加 和 。
Q2: 使用 vim-commentary 插件时,如何避免注释掉代码中的 URL 或字符串中的特殊字符?
A2: vim-commentary 默认会注释整行,若需精确控制,可在普通模式下使用 gc 结合 motion,gcG 注释到文件尾,或 gc} 注释到段落尾,对于 URL 或字符串,建议手动选择范围(可视模式)后按 gc,或修改插件配置:
" 在 .vimrc 中添加,使注释仅作用于行首/行尾
let g:commentary_delimiters = {
\ 'c': '//',
\ 'cpp': '//',
\ 'python': '#',
\ }这样插件会严格按照指定符号注释,避免误判字符串内容。
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/382587.html<
