首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >留存vim配置

留存vim配置

原创
作者头像
他们说下雨了
发布2025-12-11 10:26:34
发布2025-12-11 10:26:34
920
举报

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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档