
vim 的配置
window版本
AI辅助+人工修正 生成
" ======================
" 本配置常用快捷键(含插件快捷键)
" ======================
" 基础操作
" 空格 + w:保存
" 空格 + q:退出
" 空格 + Q:强制退出
" 空格 + x:保存并退出
" 空格 + h:取消搜索高亮
" 空格 + n:切换行号显示
" 序列插入(选中行后使用)
" 空格 + 1:添加数字序号
" 空格 + 01:添加两位数字序号
" 空格 + a:添加小写字母序号
" 空格 + A:添加大写字母序号
" 系统剪贴板
" 空格 + y:复制到系统剪贴板
" 空格 + p:从系统剪贴板粘贴
" 空格 + P:从系统剪贴板粘贴(光标前)
" 空格 + X:剪切到系统剪贴板
" 窗口操作
" Ctrl+h/j/k/l:切换窗口
" 空格 + sv:垂直分屏
" 空格 + sh:水平分屏
" 插件专属快捷键
" 空格 + e:打开/关闭目录树(NERDTree)
" Ctrl+p:打开文件搜索(CtrlP)
" F3:开启/关闭语法检查(ALE)
" gcc:注释/取消注释当前行(commentary 原生)
" gcip:注释/取消注释当前段落(commentary 原生)
" <C-y>,:Emmet 缩写展开(HTML/CSS 快速编写)
" ======================
" vim-plug 插件配置
" ======================
" 开始插件定义(必须以 call plug#begin() 开头)
" call plug#begin('~/.vim/plugged') " Linux/Mac 插件安装目录
call plug#begin('$HOME/vimfiles/plugged') " Windows 路径
Plug 'preservim/nerdtree', {'url': 'https://hub.fastgit.xyz/preservim/nerdtree.git'} " 目录树插件
Plug 'tpope/vim-surround', {'url': 'https://hub.fastgit.xyz/tpope/vim-surround.git'} " 括号/引号包裹插件
Plug 'vim-airline/vim-airline', {'url': 'https://hub.fastgit.xyz/vim-airline/vim-airline.git'} " 状态栏美化
Plug 'ctrlpvim/ctrlp.vim', {'url': 'https://hub.fastgit.xyz/ctrlpvim/ctrlp.vim.git'} " 文件搜索
Plug 'mattn/emmet-vim', {'url': 'https://hub.fastgit.xyz/mattn/emmet-vim.git'} " HTML/CSS 快速编写
Plug 'dense-analysis/ale', {'url': 'https://hub.fastgit.xyz/dense-analysis/ale.git'} " 代码语法检查
Plug 'morhetz/gruvbox', {'url': 'https://hub.fastgit.xyz/morhetz/gruvbox.git'} " 经典配色方案
" 结束插件定义(必须以 plug#end() 结尾)
call plug#end()
" ======================
" 插件专属配置(优化体验)
" ======================
" NERDTree 目录树配置
let g:NERDTreeShowHidden = 1 " 显示隐藏文件
let g:NERDTreeAutoDeleteBuffer = 1 " 关闭目录树时自动删除缓冲区
let g:NERDTreeQuitOnOpen = 1 " 打开文件后自动关闭目录树(单文件场景)
" ALE 语法检查配置
let g:ale_fix_on_save = 1 " 保存文件时自动修复语法错误
let g:ale_linters = {'python': ['pylint'], 'javascript': ['eslint'], 'html': ['tidy'], 'css': ['stylelint']} " 按语言配置检查工具
let g:ale_sign_error = '✗' " 错误标记
let g:ale_sign_warning = '⚠' " 警告标记
" CtrlP 文件搜索配置
let g:ctrlp_map = '<C-p>' " 绑定快捷键(默认也是 Ctrl+p,明确配置更清晰)
let g:ctrlp_working_path_mode = 'r' " 搜索范围为当前项目根目录
let g:ctrlp_max_files = 1000 " 最大搜索文件数
let g:ctrlp_cache_dir = $HOME . '/vimfiles/ctrlp_cache' " 缓存目录
" gruvbox 配色配置
set background=dark " 使用深色模式(护眼)
colorscheme gruvbox " 启用 gruvbox 配色
let g:gruvbox_contrast_dark = 'hard' " 增强深色模式对比度
" vim-airline 状态栏配置
let g:airline_powerline_fonts = 1 " 支持电力线字体(配合 Nerd Fonts 更佳)
let g:airline_theme = 'gruvbox' " 状态栏主题与配色一致
let g:airline_section_b = '%{gitbranch#name()}' " 显示 Git 分支(需安装 git 并在项目目录)
" ======================
" 基础设置
" ======================
" 启用语法高亮
syntax on
" 显示行号(默认关闭相对行号,可通过快捷键切换)
set number
set norelativenumber
" 缩进设置
set tabstop=4 " Tab宽度为4个空格
set shiftwidth=4 " 自动缩进宽度为4个空格
set expandtab " 将Tab转换为空格
set autoindent " 自动缩进
set smartindent " 智能缩进
set smarttab " Tab键智能对齐
set shiftround " 缩进值为shiftwidth的整数倍
" 启用文件类型检测和插件
filetype plugin indent on
" 其他实用设置
set showmatch " 显示匹配的括号
set matchtime=2 " 匹配括号高亮时间(秒)
set ignorecase " 搜索时忽略大小写
set smartcase " 当搜索包含大写字母时区分大小写
set hlsearch " 高亮搜索结果
set incsearch " 实时搜索
set magic " 启用正则表达式魔法
set scrolloff=5 " 光标上下保留5行上下文
set sidescrolloff=5 " 光标左右保留5列上下文
" ======================
" 跨平台基础设置
" ======================
" 设置backspace键行为(全平台通用)
set backspace=indent,eol,start
" 文件编码设置(优化编码优先级)
set encoding=utf-8
set fileencodings=utf-8,gbk,gb2312,big5,latin1
set fileencoding=utf-8
set termencoding=utf-8
" 文件格式(自动检测,优先unix)
set fileformats=unix,dos,mac
set formatoptions+=j " 删除注释时合并行
" ======================
" 自定义命令和函数
" ======================
" 清空所有寄存器(跨平台兼容)
command! WipeReg call s:WipeRegisters()
function! s:WipeRegisters()
" 标准寄存器列表
let regs = ['"', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
\ '-', '*', '+', ':', '/', 'a', 'b', 'c', 'd', 'e', 'f',
\ 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q',
\ 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
for reg in regs
try
call setreg(reg, '')
catch
" 忽略不存在的寄存器错误
endtry
endfor
" 清空系统剪贴板
if has('clipboard')
try
let @* = ''
let @+ = ''
catch
endtry
endif
echo "寄存器已清空"
endfunction
" 数字序列插入
function! s:SimpleDigit() range
let i = 1
for line in range(a:firstline, a:lastline)
let num = printf("%d", i)
call setline(line, num . ". " . getline(line))
let i += 1
endfor
endfunction
" 两位数字序列插入
function! s:SimpleTwoDigit() range
let i = 1
for line in range(a:firstline, a:lastline)
let num = printf("%02d", i)
call setline(line, num . ". " . getline(line))
let i += 1
endfor
endfunction
" 小写字母序列插入
function! s:SimpleLowercase() range
let i = 0
for line in range(a:firstline, a:lastline)
if i < 26
let letter = nr2char(97 + i) " a-z 的 ASCII 码
call setline(line, letter . ". " . getline(line))
else
call setline(line, "[" . (i+1) . "]. " . getline(line))
endif
let i += 1
endfor
endfunction
" 大写字母序列插入
function! s:SimpleUppercase() range
let i = 0
for line in range(a:firstline, a:lastline)
if i < 26
let letter = nr2char(65 + i) " A-Z 的 ASCII 码
call setline(line, letter . ". " . getline(line))
else
call setline(line, "[" . (i+1) . "]. " . getline(line))
endif
let i += 1
endfor
endfunction
" ======================
" 快捷键映射(含插件)
" ======================
" 使用空格作为leader键
let mapleader = " "
let maplocalleader = "\\"
" 快速保存/退出
nnoremap <silent> <Leader>w :w<CR>
nnoremap <silent> <Leader>q :q<CR>
nnoremap <silent> <Leader>x :wq<CR>
nnoremap <silent> <Leader>Q :q!<CR>
" 取消搜索高亮
nnoremap <silent> <Leader>h :nohlsearch<CR>
" 切换行号显示
nnoremap <silent> <Leader>n :set number! relativenumber!<CR>
" 序列插入
vnoremap <silent> <leader>1 :call <SID>SimpleDigit()<CR>
vnoremap <silent> <leader>01 :call <SID>SimpleTwoDigit()<CR>
vnoremap <silent> <leader>a :call <SID>SimpleLowercase()<CR>
vnoremap <silent> <leader>A :call <SID>SimpleUppercase()<CR>
" 剪贴板映射
if has('clipboard')
" 复制到系统剪贴板
vnoremap <silent> <Leader>y "+y
nnoremap <silent> <Leader>y "+yy
" 从系统剪贴板粘贴
nnoremap <silent> <Leader>p "+p
nnoremap <silent> <Leader>P "+P
" 剪切到系统剪贴板
vnoremap <silent> <Leader>X "+x
nnoremap <silent> <Leader>X "+dd
endif
" 窗口操作快捷键
nnoremap <silent> <Leader>sv :vsplit<CR>
nnoremap <silent> <Leader>sh :split<CR>
nnoremap <silent> <C-h> <C-w>h
nnoremap <silent> <C-j> <C-w>j
nnoremap <silent> <C-k> <C-w>k
nnoremap <silent> <C-l> <C-w>l
" 插件快捷键映射
" NERDTree 目录树(空格+e 快速开关)
nnoremap <silent> <Leader>e :NERDTreeToggle<CR>
" ALE 语法检查开关(F3 快速控制)
nnoremap <silent> <F3> :ALEToggle<CR>
" CtrlP 已在插件配置中绑定 Ctrl+p,此处无需重复映射
" ======================
" 文件类型特定设置
" ======================
" 统一管理文件类型设置
augroup filetype_specific
autocmd!
" Python文件
autocmd FileType python setlocal tabstop=4 shiftwidth=4 expandtab softtabstop=4
autocmd FileType python setlocal foldmethod=indent
" Markdown文件
autocmd FileType markdown setlocal tabstop=2 shiftwidth=2 expandtab softtabstop=2
autocmd FileType markdown setlocal wrap linebreak
" JSON文件
autocmd FileType json setlocal tabstop=2 shiftwidth=2 expandtab softtabstop=2
autocmd FileType json setlocal foldmethod=syntax
" Shell脚本
autocmd FileType sh setlocal tabstop=2 shiftwidth=2 expandtab softtabstop=2
" HTML/XML
autocmd FileType html,xml setlocal tabstop=2 shiftwidth=2 expandtab softtabstop=2
" JavaScript/TypeScript
autocmd FileType javascript,typescript setlocal tabstop=2 shiftwidth=2 expandtab softtabstop=2
augroup END
" ======================
" 跨平台路径和备份设置
" ======================
" 定义基础目录
if has('win32') || has('win64')
let s:vim_dir = $HOME . '/vimfiles'
else
let s:vim_dir = expand('~/.vim')
endif
" 创建必要的目录
for dir in ['backup', 'swap', 'undo', 'ctrlp_cache'] " 新增 CtrlP 缓存目录
let s:full_dir = s:vim_dir . '/' . dir
if !isdirectory(s:full_dir)
silent! call mkdir(s:full_dir, 'p', 0700)
endif
endfor
" 设置目录路径
let s:backup_dir = s:vim_dir . '/backup//'
let s:swap_dir = s:vim_dir . '/swap//'
let s:undo_dir = s:vim_dir . '/undo//'
set backupdir=//
execute 'set backupdir+=' . s:backup_dir
set directory=//
execute 'set directory+=' . s:swap_dir
set undodir=//
execute 'set undodir+=' . s:undo_dir
" 备份和撤销设置
set undofile " 启用持久化撤销
set undolevels=1000 " 撤销层级
set backupcopy=yes " 备份方式
set writebackup " 写入备份
set nobackup " 关闭实时备份
set noswapfile " 关闭交换文件(如需开启,改为 set swapfile)
" ======================
" GUI设置(如果使用gVim)
" ======================
if has('gui_running')
" 设置GUI字体(跨平台)
if has('win32') || has('win64')
set guifont=Consolas:h11:cANSI
elseif has('mac')
set guifont=Menlo:h14
else
set guifont=Monospace:h12
endif
" 优化GUI显示
set guioptions-=T " 隐藏工具栏
set guioptions-=m " 隐藏菜单栏
set guioptions-=r " 隐藏右侧滚动条
set guioptions-=L " 隐藏左侧滚动条
set guioptions+=a " 自动调整窗口
set guioptions+=e " 使用GUI对话框
" 设置窗口大小
set lines=40
set columns=120
" 启用真彩色(适配 gruvbox 配色)
set termguicolors
endif
" ======================
" 实用函数
" ======================
" 创建不存在的目录(保存文件时自动创建)
function! s:MkdirIfNotExists(dir)
if !isdirectory(a:dir)
call mkdir(a:dir, 'p', 0700)
endif
endfunction
" 保存时自动创建目录
autocmd BufWritePre * call s:MkdirIfNotExists(expand('<afile>:p:h'))
" 自动切换工作目录(方便 CtrlP 搜索项目文件)
autocmd BufEnter * silent! lcd %:p:h
" ======================
" 杂项设置
" ======================
" 鼠标支持(插入模式也启用)
set mouse=a
set mousemodel=extend
" 界面优化
set cmdheight=2 " 命令行高度
set history=1000 " 历史记录条数
set updatetime=300 " 更新间隔(毫秒)
set timeoutlen=500 " 快捷键超时时间
set ttimeoutlen=10 " 终端键超时时间
set lazyredraw " 宏执行时延迟重绘
set showmode " 显示当前模式
set showcmd " 显示输入的命令
set hidden " 允许隐藏未保存的缓冲区
" 长行处理(优化)
set wrap " 换行显示
set linebreak " 按单词换行
set textwidth=0 " 不自动换行
set wrapmargin=0 " 换行边距
set display+=lastline " 显示长行的最后部分
" 搜索优化
set gdefault " 替换默认全局生效
set incsearch " 增量搜索
set hlsearch " 高亮搜索结果
" 性能优化
set nobomb " 不添加BOM
set nojoinspaces " 连接字符串时不添加空格
set shortmess+=c " 减少提示信息
" 修复编码设置冲突
set nobomb " 最终确定不添加BOM
set encoding=utf-8 " 确保编码设置正确
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。