vimrc语法解析
前言
了解vimrc的语法有助于工作顺利开展,本帖将对vimrc的基本语法做记录。
.vimrc 文件使用的是 Vimscript 语法,这是 Vim 编辑器专门用于编写配置脚本和自定义功能的脚本语言。.vimrc 是一个纯文本文件,按行解析,支持注释、命令、函数等。
注释
以 " 开头的行为注释:
" 这是注释
set number " 行内注释
设置选项(Options)
使用 set 命令配置 Vim 的行为:
布尔选项
- 开启:set 选项名
- 关闭:set no选项名
set number " 显示行号
set nonumber " 关闭行号
set wrap " 自动换行
set nowrap " 不自动换行
数值/字符串选项
使用 = 赋值:
set tabstop=4 " Tab 显示为 4 空格
set shiftwidth=4 " 缩进宽度
set expandtab " 将 Tab 转换为空格
set encoding=utf-8 " 文件编码
查看选项值
- set 选项名?:查看当前值(如 set tabstop?)
- set all:查看所有选项
键映射(Key Mapping)
定义快捷键映射,语法为 map 模式 快捷键 动作。
模式前缀
- nmap:普通模式
- imap:插入模式
- vmap:可视模式
- cmap:命令行模式
- nore:非递归映射(推荐使用,避免循环)
nnoremap <leader>w :w<CR> " 普通模式保存文件(非递归)
inoremap jk <Esc> " 插入模式按 jk 退出
vnoremap <C-c> "+y " 可视模式复制到系统剪贴板
特殊按键
使用 <...> 表示特殊键:
<CR>:回车
<Esc>:Esc 键
<Leader>:默认是 \,可通过 let mapleader = "," 修改
<C-x>:Ctrl + x
<Space>:空格键
自动命令(Autocmd)
在特定事件触发时执行命令,语法为 autocmd [分组] 事件 模式 命令。
常见事件
- BufNewFile:新建文件
- BufRead:读取文件
- FileType:文件类型被检测后
- BufWritePre:保存文件前
示例
" 所有文件保存前移除末尾空格
autocmd BufWritePre * %s/\s\+$//e
" 针对 Python 文件设置缩进
autocmd FileType python setlocal tabstop=4 shiftwidth=4
" 使用分组管理(避免重复定义)
augroup mygroup
autocmd!
autocmd BufEnter *.txt setlocal spell
augroup END
函数与自定义命令
函数定义
函数名必须大写开头或用 # 限定作用域。
使用 function! 覆盖已有函数。
function! ToggleNumber()
if &number
set nonumber
else
set number
endif
endfunction
自定义命令
command! -nargs=0 ToggleNumber call ToggleNumber()
变量与表达式
变量赋值
使用 let 定义变量:
let mapleader = "," " 修改 Leader 键
let g:my_plugin_enabled = 1 " 全局变量
作用域前缀
- g::全局变量
- l::局部变量(默认)
- a::函数参数
- s::脚本作用域
条件与循环
条件语句
if has("gui_running")
set guifont=Monospace\ 12
elseif &term == "xterm"
set t_Co=256
endif
循环
for i in [1, 2, 3]
echo i
endfor
插件管理(示例:vim-plug)
call plug#begin('~/.vim/plugged')
Plug 'preservim/nerdtree' " 文件树插件
Plug 'tpope/vim-fugitive' " Git 集成
call plug#end()
其他常用配置
syntax enable " 启用语法高亮
colorscheme desert " 设置颜色主题
set hlsearch " 高亮搜索结果
set incsearch " 实时搜索
set ignorecase " 忽略大小写
set smartcase " 智能大小写匹配
调试与重载
- 重载配置:在 Vim 中执行 :source $MYVIMRC
- 查看错误:启动时使用 vim -V9logfile 输出日志

浙公网安备 33010602011771号