ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Vim的插件配置和一些使用小技巧

Vim的插件配置和一些使用小技巧 近段时间里面我使用vim时遇到了很多问题, 然后逐一查着解决了,作为前面最基本教程最简洁的vim教程的补充:下面是我的vim 版本:文章目录前言一.vim配置----无脑复制部分二.使用vim管理商店安装部分安装vim管理器vim管理器的用法Vim配置---基于vim-plug管理器的部分我的配置(用于写C)三.其他一些小技巧键入特殊字符(11/28/2025)(Ctrl R) and u------反撤销和撤销set relativenumber-----快速定位鼠标所在位置 (~/.vimrc)在vim编辑器中如何注释特定行?vim 替换replace 文本?如何排序所选择的文本?在 Quickfix 窗口内的操作Ctrl w w 切换各种窗口bn 和 bp设置用于自定义和永久启用 Vim 状态栏怎么使用vim向左缩进?折叠代码怎么展开前言之前配置的时候不懂Plug那部分插件的部分, 今天遇到需要安装coc.vim智能补全代码的功能,所以学会了怎么安装了.11.9.2025, 补充了vim插件配置的前置知识(vim-plug管理器的安装), 有了这个就可以参考复制后面的vim配置了.一.vim配置----无脑复制部分摘自TheCW的vim1摘自TheCW的vim2注意:这部分是vim本身可以设置的, 所以可以无脑安装, 但会出现因为版本问题而有的命令使用不了, 所以可以复制上慢慢测试~/.vimrc------------------------------------vim(自带)------------------------------------------- 设置空格为Leader键letmapleader 基本设置 syntax on 开启语法高亮setnumber 显示行号 set norelativenumber 不显示相对行号setcursorline 高亮当前行 set wrap 自动换行setshowcmd 显示命令 set wildmenu 命令行补全 搜索设置 set hlsearch 高亮搜索结果execnohlsearch 启动时不高亮上次搜索 set incsearch 实时搜索setignorecase 忽略大小写 set smartcase 智能大小写 文件类型设置 set nocompatible 不兼容Vi filetype on 开启文件类型检测 filetype indent on 开启缩进 filetype plugin on 开启插件 filetype plugin indent on 开启插件缩进 其他设置 set mousea 启用鼠标setencodingutf-8 设置编码 let t_ut 终端背景色设置setexpandtab 将Tab转换为空格 set tabstop2 Tab宽度为2setshiftwidth2 自动缩进宽度 set softtabstop2 退格键删除缩进setlist 显示不可见字符 set listcharstab:▸\ ,trail:▫ 设置不可见字符显示setscrolloff5 上下滚动保留5行 set tw0 文本宽度0为不限制setindentexpr 缩进表达式 set backspaceindent,eol,start 退格键行为setfoldmethodindent 折叠方式 set foldlevel99 默认折叠级别setlaststatus2 总是显示状态栏 set autochdir 自动切换工作目录 恢复上次光标位置 au BufReadPost * if line(\) 1 line(\) line($) | exe normal!g\ | endif 光标形状设置终端lett_SI\Esc]50;CursorShape1\x7 插入模式 let t_SR \Esc]50;CursorShape2\x7 替换模式lett_EI\Esc]50;CursorShape0\x7 普通模式 导航映射 noremapnzz 下一个搜索结果并居中 noremap - Nzz 上一个搜索结果并居中 noremapLEADERCR:nohlsearchCR 清除搜索高亮 HJKL重映射Colemak风格 noremap n h 左移 noremap u k 上移 noremap e j 下移 noremap i l 右移 noremap U 5k 上移5行 noremap E 5j 下移5行 noremap N 7h 左移7字符 noremap I 7l 右移7字符 行首行尾映射 noremap C-n 0 到行首 noremapC-i$ 到行尾 编辑模式重映射 noremap k i 插入模式 noremap K I 行首插入 noremap l u 撤销 命令映射 map snop 禁用s键 map S :wCR 保存文件 map Q :qCR 退出 map R :source$MYVIMRCCR 重载配置 map;: 快速进入命令模式 窗口分割映射 map si :set splitrightCR:vsplitCR 右侧垂直分割 map sn :set nosplitrightCR:vsplitCR 左侧垂直分割 mapsu:set nosplitbelowCR:splitCR 上方水平分割 map se :set splitbelowCR:splitCR 下方水平分割 窗口导航 map LEADERi C-wl 右窗口 mapLEADERuC-wk 上窗口 map LEADERn C-wh 左窗口 mapLEADEReC-wj 下窗口 窗口大小调整 mapup:res 5CR 增加高度 map down :res -5CR 减少高度 mapleft:vertical resize-5CR 减少宽度 map right :vertical resize5CR 增加宽度 标签页操作 map tu :tabeCR 新建标签页 map tn :-tabnextCR 上一个标签页 map ti :tabnextCR 下一个标签页 窗口布局调整 map sv C-wtC-wH 垂直分割转水平 mapshC-wtC-wK 水平分割转垂直二.使用vim管理商店安装部分这一步首先使用vim管理器vim-plug,什么是vim-plug?管理应用的叫应用商店, 管理vim插件的叫vim管理器.为什么它会出现?因为有些插件不像Ayncrun.vim一样那样简单只有一个vim, 像coc.nvim代码补全的插件,其下有很多子模块, 而且它们之际相互依赖, 依靠手动一个个安装得累死, 所以需要那种一步到位的管理插件, 而vim管理器就是担任了这个角色.比如coc.nvim, 这个就是复杂插件:coc.nvim/ ├── data/# 运行时数据│ ├── schemas/# JSON schema文件│ └── snippets/# 代码片段├── build/# 构建产物│ └── index.js# 编译后的主文件├── node_modules/# 所有依赖包│ └──...(1000文件)└── autoload/coc/# Vim加载脚本├── util.vim ├── rpc.vim ├── workspace.vim └──...(40个文件)其下的安装是基于vim-plug安装的:安装vim管理器# in bash# 下载 vim-plug 到 Vim 的 autoload 目录curl-fLo~/.vim/autoload/plug.vim --create-dirs\https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim# 以下两个都是检查vim-plug是否安装好了, 是则会显示路径, 选项二会有很多,需要您去找plug.vim.# (选项1)检查文件是否存在ls-la~/.vim/autoload/plug.vim# (选项2)检查文件是否加载plug.vim(在vim里面操作):scriptnamesvim管理器的用法说明:它使用方式是有两个vim管理器识别的语法块,以call plug#begin()开始, 以call plug#end()结束, 中间可以使用Plug命令列举出你想要安装的插件, 然后使用:PlugInstall就可以让vim管理器自自动安装你列表里面的插件了.~/.vimrc例如安装这些插件 启用 vim-plug call plug#begin(~/.vim/plugged) 里面是所安装插件在电脑上的位置 列出您需要安装的插件 Plug junegunn/seoul256.vim 颜色主题 Plug junegunn/vim-easy-align 文本对齐工具 Plug neoclide/coc.nvim, {branch: release} 智能代码补全 Plug junegunn/fzf, { do: { - fzf#install() } } 模糊文件查找 Plug junegunn/fzf.vim fzf 的 Vim 集成 Plug preservim/nerdtree 文件树浏览器 Plug vim-scripts/cpp_doxygen Doxygen 注释模板 Plug preservim/nerdcommenter 取消/注释代码 Leadercc注释 Leadercu取消 call plug#end()注意:Plug命令中单引号里面的是真实的vim插件地址, 比如这个文本对齐插件的github地址是 ‘https://github.com/junegunn/vim-easy-align.git’, 我们可以在vim管理器里面简写为Plug ‘junegunn/vim-easy-align’. 它们是一样的.重新加载文件或重启 Vim然后就可以了.:PlugInstall安装插件 :PlugUpdate安装或更新插件 :PlugDiff查看上次更新以来的更改 :PlugClean移除列表中不再存在的插件。Vim配置—基于vim-plug管理器的部分---------------------------------分割线(插件部分)------------------------------------ 插件管理器初始化 call plug#begin(~/.vim/plugged) 界面增强 Plug vim-airline/vim-airline 状态栏 Plugconnorholyday/vim-snazzy 主题 文件导航 Plugscrooloose/nerdtree,{on:NERDTreeToggle} 文件树 Plug Xuyuanp/nerdtree-git-plugin 文件树Git状态 代码标签 Plug majutsushi/tagbar, { on: TagbarOpenAutoClose } 标签栏 错误检查 Plug w0rp/ale 语法检查 自动补全 Plug Valloric/YouCompleteMe 代码补全 撤销历史 Plug mbbill/undotree/ 撤销树 视觉增强 Plug nathanaelkane/vim-indent-guides 缩进指南 Plugitchyny/vim-cursorword 高亮当前词 Git集成 Plugrhysd/conflict-marker.vim 冲突标记 Plug tpope/vim-fugitive Git命令 Plugmhinz/vim-signify Git状态提示 Plug gisphm/vim-gitignore, { for: [gitignore, vim-plug] } 语言支持 Plugelzr/vim-json JSON支持 Plug hail2u/vim-css3-syntax CSS3语法 Plugspf13/PIV,{for:[php,vim-plug]} PHP支持 Plug gko/vim-coloresque, { for: [vim-plug, php, html, javascript, css, less] } Plug pangloss/vim-javascript, { for :[javascript, vim-plug] } Plug mattn/emmet-vim HTML快速编写 Python支持 Plug vim-scripts/indentpython.vim Python缩进 Markdown支持 Plug iamcco/markdown-preview.nvim, { do: { - mkdp#util#install_sync() }, for :[markdown, vim-plug] } Plug dhruvasagar/vim-table-mode, { on: TableModeToggle } 表格模式 Plugvimwiki/vimwiki Wiki功能 书签管理 Plugkshenoy/vim-signature 书签标记 实用工具 Plugterryma/vim-multiple-cursors 多光标编辑 Plug junegunn/goyo.vim 专注写作模式 Plugtpope/vim-surround 环绕编辑 Plug godlygeek/tabular 文本对齐 Pluggcmt/wildfire.vim 快速选择文本对象 Plug scrooloose/nerdcommenter 代码注释 依赖插件 Plug MarcWeber/vim-addon-mw-utils Plug kana/vim-textobj-user Plug fadein/vim-FIGlet ASCII艺术字 call plug#end() 主题设置 let g:SnazzyTransparent 1 color snazzy NERDTree 文件树设置 map tt :NERDTreeToggleCR 切换文件树 let NERDTreeMapOpenExpl 禁用默认映射 let NERDTreeMapUpdir letNERDTreeMapUpdirKeepOpenl 向上目录保持打开 let NERDTreeMapOpenSplit letNERDTreeOpenVSplitletNERDTreeMapActivateNodei 激活节点 let NERDTreeMapOpenInTab o 在标签页打开letNERDTreeMapPreviewletNERDTreeMapCloseDirn 关闭目录 let NERDTreeMapChangeRoot y 更改根目录 NERDTree-git Git状态图标 let g:NERDTreeIndicatorMapCustom { \ Modified : ✹, 已修改\Staged:✚, 已暂存 \ Untracked : ✭, 未跟踪\Renamed:➜, 已重命名 \ Unmerged : ═, 冲突未解决\Deleted:✖, 已删除 \ Dirty : ✗, 脏状态\Clean:✔︎, 干净状态 \ Unknown : ? 未知状态\} You Complete ME 代码补全设置 nnoremap gd :YcmCompleter GoToDefinitionElseDeclarationCR 跳转到定义 nnoremap g/ :YcmCompleter GetDocCR 获取文档 nnoremap gt :YcmCompleter GetTypeCR 获取类型 nnoremap gr :YcmCompleter GoToReferencesCR 跳转到引用 let g:ycm_autoclose_preview_window_after_completion0 补全后不自动关闭预览窗口letg:ycm_autoclose_preview_window_after_insertion1 插入后自动关闭预览窗口 let g:ycm_use_clangd 0 不使用clangdletg:ycm_python_interpreter_path/bin/python3 Python解释器路径 let g:ycm_python_binary_path /bin/python3 Python二进制路径 ale 语法检查设置 let b:ale_linters [pylint] Python检查器letb:ale_fixers[autopep8,yapf] Python格式化工具 Taglist 标签栏设置 mapsilentT :TagbarOpenAutoCloseCR 切换标签栏 MarkdownPreview Markdown预览设置 letg:mkdp_auto_start0 不自动启动 let g:mkdp_auto_close 1 自动关闭letg:mkdp_refresh_slow0 快速刷新 let g:mkdp_command_for_global 0 不全局启用letg:mkdp_open_to_the_world0 不对外开放 let g:mkdp_open_ip IP地址letg:mkdp_browserchromium 浏览器 let g:mkdp_echo_preview_url 0 不显示预览URLletg:mkdp_browserfunc 浏览器函数 let g:mkdp_preview_options { \ mkit: {}, \ katex: {}, \ uml: {}, \ maid: {}, \ disable_sync_scroll: 0, 启用同步滚动\sync_scroll_type:middle, 同步滚动类型 \ hide_yaml_meta: 1 隐藏YAML元数据\}letg:mkdp_markdown_css Markdown CSS let g:mkdp_highlight_css 高亮 CSSletg:mkdp_port 端口 let g:mkdp_page_title 「${name}」 页面标题 vim-table-mode 表格模式设置 map LEADERtm :TableModeToggleCR 切换表格模式 Python-syntax Python语法高亮 let g:python_highlight_all 1 启用所有Python高亮 let g:python_slow_sync 0 禁用慢速同步 vim-indent-guide 缩进指南设置 let g:indent_guides_guide_size 1 指南大小letg:indent_guides_start_level2 开始级别 let g:indent_guides_enable_on_vim_startup 1 启动时启用letg:indent_guides_color_change_percent1 颜色变化百分比 silent! unmap LEADERig 取消默认映射 autocmd WinEnter * silent!unmapLEADERig 窗口进入时取消映射 Goyo 专注模式设置 mapLEADERgy :GoyoCR 进入专注模式 vim-signiture 书签设置 letg:SignatureMap{\Leader:m, Leader键 \ PlaceNextMark : m,, 放置下一个标记\ToggleMarkAtLine:m., 切换行标记 \ PurgeMarksAtLine : dm-, 清除行标记\DeleteMark:dm, 删除标记 \ PurgeMarks : dm/, 清除所有标记\PurgeMarkers:dm?, 清除所有标记器 \ GotoNextLineAlpha : mLEADER, 跳转到下一个字母标记行\GotoPrevLineAlpha:, 跳转到上一个字母标记行 \ GotoNextSpotAlpha : mLEADER, 跳转到下一个字母标记点\GotoPrevSpotAlpha:, 跳转到上一个字母标记点 \ GotoNextLineByPos : , 按位置跳转到下一行 \ GotoPrevLineByPos : , 按位置跳转到上一行 \ GotoNextSpotByPos : mn, 按位置跳转到下一个点\GotoPrevSpotByPos:mp, 按位置跳转到上一个点 \ GotoNextMarker : , 跳转到下一个标记器 \ GotoPrevMarker : , 跳转到上一个标记器 \ GotoNextMarkerAny : , 跳转到任意下一个标记器 \ GotoPrevMarkerAny : , 跳转到任意上一个标记器 \ ListLocalMarks : m/, 列出本地标记\ListLocalMarkers:m? 列出本地标记器 \ } Undotree 撤销树设置 letg:undotree_DiffAutoOpen0 不自动打开差异窗口 map L :UndotreeToggleCR 切换撤销树我的配置(用于写C)插件部分的快捷键我还没有设置, 等熟悉一下这些插件内置的快捷键和遇到需求以及快捷键之间冲突了再设置目录~/ ├── .vimrc# Vim 主配置文件├── .vim/# Vim 配置目录│ ├── tasks.ini# AsyncTask 任务定义│ └── plugin/# Vim 正式插件目录(不允许vim-plug管理器的文件放在这里)│ ├── asyncrun.vim# 异步运行插件│ └── asynctasks.vim# 异步任务插件│ └── autoload/# Vim管理器的路径│ └── plug.vim# vim-plug插件│ └── plugged/# Vim管理器下载插件的路径│ └── coc.nvim# 代码补全│ ├──#下面fzf和fzf.vim是一起的, 它的作用是:超快的通用命令行模糊查找器│ ├── fzf# fzf 是引擎是核心命令行工具│ └── fzf.vim# 是给 Vim 这个“汽车”装上的专用方向盘、中控台和仪表盘让你能在 Vim 里方便地使用这个引擎。│ ├── nerdtree# 目录树│ ├── seoul256.vim# vim颜色│ ├──...# 其他插件│ └── vim-easy-align# 对齐├── cpp/# C 项目主目录│ ├── Fraction.h# 分数类头文件│ ├── Fraction.cpp# 分数类实现│ └── main.cpp# 主程序文件└── README.md# 项目说明文档tasks.ini[project-debug]command:cppclang-stdc23-g-Wall-Weffc-Wextra-Wconversion-Wsign-conversion -fuse-ldlld *.cpp-oa.out-lm-msse3lldb a.out command:cclang-stdc17-g-Wall-Weffc-Wextra-Wconversion-Wsign-conversion -fuse-ldlld *.c-oa.out-lmlldb a.outoutputterminalcwd$(VIM_FILEDIR)save2[project-build]command:cppclang-stdc23-O2-Wall-Weffc-Wextra-Wconversion-Wsign-conversion -fuse-ldlld *.cpp-oa.out-lm-msse3command:cclang-stdc17-O2-Wall-Weffc-Wextra-Wconversion-Wsign-conversion *.c-oa.out-lmcommand:makemake-f$(VIM_FILEPATH)errorformat%f:%l:%c: %moutputquickfixcwd$(VIM_FILEDIR)save2[project-run]command./a.outoutputquickfixcwd$(VIM_FILEDIR)save2[file-build]command:cppclang-stdc23-O2-Wall-Weffc-Wextra-Wconversion-Wsign-conversion-fsanitizeaddress$(VIM_FILEPATH)-o$(VIM_PATHNOEXT)-lm-msse3command:cclang-stdc17-O2-Wall-Weffc-Wextra-Wconversion-Wsign-conversion$(VIM_FILEPATH)-o$(VIM_PATHNOEXT)-lmcommand:makemake-f$(VIM_FILEPATH)outputquickfixerrorformatcwd$(VIM_FILEDIR)save2[file-run]command$(VIM_FILEPATH)command:c,cpp$(VIM_PATHNOEXT)outputquickfixerrorformatcwd$(VIM_FILEDIR)save2~/.vimrcletmapleader syntax onsettabstop4setshiftwidth4setsofttabstop4setnopastesetsmartindentsetautoindentsetrelativenumbersetcursorlinesetshowcmdsetwildmenusethlsearchsetincsearchsetignorecasesetsmartcase noremapLEADERCR:nohlsearchCRnoremap n nzz noremap N Nzz nnoremap sk :set nosplitbelowCR:splitCRnnoremap sj :set splitbelowCR:splitCRnnoremapsh:set nosplitrightCR:vsplitCRnnoremap sl :set splitrightCR:vsplitCRmapLEADERkC-wk mapLEADERjC-wj mapLEADERhC-wh mapLEADERlC-wlsetlaststatus2setstatusline%n:\%%F%m%r\%{strftime(\%H:%M\%a\%b\%d\%Y\)}\%\%l/%L:%c\%p%% filetype on filetype plugin on filetype indent on filetype plugin indent on noremapsilentf6:AsyncTask project-debugcrnoremapsilentf7:AsyncTask project-buildcrnoremapsilentf8:AsyncTask project-runcrnoremapsilentf9:AsyncTask file-buildcrnoremapsilentf10:AsyncTask file-runcr vim-plug call plug#begin(~/.vim/plugged) Plug junegunn/seoul256.vim Plug junegunn/vim-easy-align Plug neoclide/coc.nvim, {branch: release} Plug junegunn/fzf, { do: { - fzf#install() } } Plug junegunn/fzf.vim Plug preservim/nerdtree Plug vim-scripts/cpp_doxygen Plug preservim/nerdcommenter Plug tpope/vim-surround Plug voldikss/vim-translator call plug#end() NERDTree noremap ff :NERDTreeToggleCR vim-translator nnoremapsilentLeadert viw:TranslateCRCoc里面搭配coc-clangd coc-snippets更好:CocInstall coc-clangd coc-snippets常用快捷键简述三.其他一些小技巧这个是关于vim原有的技巧, 无需配置.键入特殊字符(11/28/2025)在vim命令模式下:digraphs, 可以发现vim管理的特殊字符.如何使用这些字符串, 比如我们插入上面圆圈里面的’c这个字符, 使用的快捷键是Co. 在插入模式下, 按下Ctrl-k触发输入这些字符串(会显示?), 然后输入Co就可了.(Ctrl R) and u------反撤销和撤销比如我们写代码时, 会使用u撤销后, 我们的代码没了, 又得重写, 所以这时候需要一个反向撤销的命令Ctrl R它用于重做被撤销的更改。它是 u撤销命令的反向操作。set relativenumber-----快速定位鼠标所在位置 (~/.vimrc)当我们使用命令行后需要确定鼠标的光标所在的位置, 但是它的可见度很低, 没有那么明显, 尤其是加背景后, 这时候需要找好一会儿, 所以可以使用set relatvenumber这个设置, 0行所在便是光标所在位置.设置前:设置后:0行所在位置会根据你的操作移动, 其他行相对的以它为中心依次上下增大, 识别度非常高.在vim编辑器中如何注释特定行?vim 替换replace 文本?如何排序所选择的文本?在 Quickfix 窗口内的操作Ctrl w w 切换各种窗口比如下面打开的test.cpp, main.cpp 和Quickfix三个窗口, 可以使用Ctrlww在它们之间来回切换bn 和 bp比如我们vim 同时打开两个文件: vim main.cpp test.cpp , 怎么在这两个文件之间切换呢? 只需要按下bn(buffer next的简称)就可以, 其实它们之间是循环的, 其中一个命令就可以来回切换一圈, 而bn两个键在一起方便, 因此推荐它.命令模式下:bn 然后Enter确认一下设置用于自定义和永久启用 Vim 状态栏;in~/.vimrcsetlaststatus2setstatusline%n:\%%F%m%r\%{strftime(\%H:%M\%a\%b\%d\)}\%\%l/%L:%c\%p%%怎么使用vim向左缩进?按下V键进入visual mode , j(or h) 选中所选择的区域, 然后按下shif 所在键)不要按措:注意按下v进入 visual 按下shif v 进入 visual line; 按下Ctrlv 进入visual block折叠代码怎么展开目前就这么多, 遇到问题了再积累一些了写.
返回列表