══════════════════════════════════════════════════════════════════ Leader 键 ══════════════════════════════════════════════════════════════════ let mapleader \Space let g:mapleader \Space ══════════════════════════════════════════════════════════════════ 插件管理vim-plug 1报错就需要先安装plug curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim 2 ubuntu安装nodeapt-get install -y nodejs 3执行:PlugInstall 进行安装插件 ══════════════════════════════════════════════════════════════════ call plug#begin(~/.vim/plugged) Plug easymotion/vim-easymotion 快速跳转 Plug tpope/vim-fugitive Git 核心操作 Plug scrooloose/nerdtree 文件树 Plug majutsushi/tagbar 标签栏 Plug luochen1990/rainbow 括号彩色配对 Plug airblade/vim-gitgutter Git 差异指示 Plug wincent/command-t 模糊查找 Plug junegunn/fzf 安装fzf git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf ~/.fzf/install Plug junegunn/fzf.vim FZF 集成 Plug neoclide/coc.nvim, {branch: release} LSP / 补全 call plug#end() ══════════════════════════════════════════════════════════════════ 基础编辑设置 ══════════════════════════════════════════════════════════════════ syntax on filetype plugin indent on 检测类型 加载插件 自动缩进三合一 set number 显示行号 set relativenumber 相对行号按需开启 set cursorline 高亮当前行 set ruler 状态栏显示光标位置 set showmode 显示当前模式 set scrolloff3 光标距边缘保留 3 行 set tabstop4 Tab 显示宽度 set softtabstop4 编辑时 Tab 宽度 set shiftwidth4 自动缩进宽度 set expandtab Tab 转空格 set autoindent set smartindent set cindent set hlsearch 搜索结果高亮 set incsearch 增量搜索 set ignorecase 搜索忽略大小写 set smartcase 有大写字母时区分大小写 set encodingutf-8 set fileencodingutf-8 set fileencodingsutf-8,gb2312,gb18030,latin1 set termencodingutf-8 set nobackup 禁止备份文件 set noswapfile 禁止交换文件 set laststatus2 始终显示状态栏 set statusline%f\ %m\ %r\ %h %f: 相对路径下的文件名, %m: 修改标记 ( 表示已修改) , %r: 只读标记 (RO 表示只读) , %h: 帮助文件标记 (h 表示是帮助文件) , \ : 空格转义 set wildmenu 命令行补全菜单 set backspaceindent,eol,start 让 Backspace 行为正常 系统剪切板互通y/d/x/p 与 Ctrl-C/V 共用 set clipboardunnamed iTerm2 插入模式光标变为细线 if $TERM_PROGRAM ~ iTerm let t_SI \Esc]50;CursorShape1\x7 let t_EI \Esc]50;CursorShape0\x7 endif ══════════════════════════════════════════════════════════════════ 快捷键 —— 通用 ══════════════════════════════════════════════════════════════════ jj / jk / kk 退出插入模式 inoremap jj Esc inoremap jk Esc inoremap kk Esc 重做 是u的反操作 nnoremap Leaderu S-:redoCR 翻页并居中 nnoremap Leaderk S-hzz nnoremap Leaderj S-lzz 寄存器 a 操作配合标记 o/p 实现单词替换工作流 Leadery 复制当前单词到系统剪切板 寄存器 a标记位置 o nnoremap Leadery moyiwayiw Leaderx 剪切当前单词到系统剪切板 寄存器 a标记位置 o nnoremap Leaderx moyiwayiwdiw Leaderv 用寄存器 a 替换光标处单词并在 o/p 之间来回跳转 nnoremap Leaderv mpviwapop ══════════════════════════════════════════════════════════════════ CoCLSP / 补全 ══════════════════════════════════════════════════════════════════ set updatetime1000 悬停诊断延迟ms Tab / S-Tab 选补全项Enter 确认 inoremap silentexpr TAB coc#pum#visible() ? coc#pum#next(1) : \TAB inoremap expr S-TAB coc#pum#visible() ? coc#pum#prev(1) : \C-h inoremap silentexpr CR coc#pum#visible() ? coc#pum#confirm() : \CR LSP 导航 nmap silent gd Plug(coc-definition) nmap silent gr Plug(coc-references) nmap silent gy Plug(coc-type-definition) nmap silent gi Plug(coc-implementation) nmap silent K :call CocActionAsync(doHover)CR 重构 nmap silent Leaderrn Plug(coc-rename) nmap silent Leaderca Plug(coc-codeaction-cursor) nmap silent Leaderoi :CocCommand java.action.organizeImportsCR 诊断跳转 nmap silent [g Plug(coc-diagnostic-prev) nmap silent ]g Plug(coc-diagnostic-next) nmap silent Leaderd :CocList diagnosticsCR 状态栏显示错误/警告 set statusline^%{coc#status()}%{get(b:,coc_current_function,)} 光标停留后自动弹出诊断信息 autocmd CursorHold * silent call CocActionAsync(diagnosticInfo) ══════════════════════════════════════════════════════════════════ NERDTree文件树 ══════════════════════════════════════════════════════════════════ map F2 :NERDTreeToggleCR let g:NERDTreeWinSize 25 let g:NERDTreeShowLineNumbers 1 let g:NERDTreeHidden 0 let NERDTreeShowBookmarks 1 let NERDTreeMinimalUI 1 let NERDTreeDirArrows 1 let g:NERDTreeDirArrowExpandable ▸ let g:NERDTreeDirArrowCollapsible ▾ let NERDTreeIgnore [\.pyc$] C 定义当前文件路径为根路径 autocmd VimEnter * NERDTree 启动时自动打开 autocmd VimEnter * if !argc() | NERDTree | endif 无文件时打开 autocmd VimEnter * wincmd w 焦点跳到编辑窗口 仅剩 NERDTree 时自动退出 autocmd BufEnter * if winnr($) 1 exists(b:NERDTree) b:NERDTree.isTabTree() | q | endif ══════════════════════════════════════════════════════════════════ Tagbar标签栏 ══════════════════════════════════════════════════════════════════ map F8 :TagbarToggleCR let g:tagbar_ctags_bin ctags let g:tagbar_width 20 let g:tagbar_autofocus 1 ══════════════════════════════════════════════════════════════════ EasyMotion快速跳转 ══════════════════════════════════════════════════════════════════ 示例将 easymotion 的 s 键映射限制在非 NERDTree 缓冲区 let g:EasyMotion_do_mapping 0 禁用默认映射 let g:EasyMotion_smartcase 1 智能大小写 autocmd FileType * if ft ! nerdtree | nmap buffer s Plug(easymotion-s) ══════════════════════════════════════════════════════════════════ Rainbow彩色括号 ══════════════════════════════════════════════════════════════════ let g:rainbow_active 1 let g:rainbow_conf { guifgs : [royalblue3, darkorange3, seagreen3, firebrick], ctermfgs : [lightblue, lightyellow, lightcyan, lightmagenta], operators : _,\|\|-_, parentheses: [start/(/ end/)/ fold, start/\[/ end/\]/ fold, start/{/ end/}/ fold], separately : { * : {}, tex: { parentheses: [start/(/ end/)/, start/\[/ end/\]/] }, css: 0, } } ══════════════════════════════════════════════════════════════════ FZF模糊查找 ══════════════════════════════════════════════════════════════════ 搜索当前目录文件 nnoremap Leaderf :FilesCR 搜索所有 Buffer 内容 nnoremap Leaderb :LinesCR 搜索当前 Buffer 内容 nnoremap Leader/ :BLinesCR 搜索历史打开文件MRU nnoremap Leadere :HistoryCR ══════════════════════════════════════════════════════════════════ 打开历史编辑文件 空格 e 创建新的tab栏 :tab split 新打开一个tab nnoremap Leadergy :tab splitCR gt 切换tab :tabnew 新建标签页 :tabs 显示已打开标签页的列表 :tabc 关闭当前标签页 nnoremap Leadergd :tabcCR :tabn 移动到下一个标签页 nnoremap Leadergh :tabnCR :tabp 移动到上一个标签页 nnoremap Leadergl :tabpCR :tabfirst 移动到第一个标签页 :tablast 移动到最后一个标签页 2.在窗格间切换的方法 Ctrlw方向键——切换到前下上后一个窗格 Ctrlwh/j/k/l ——同上 nnoremap Leaderwh C-wh nnoremap Leaderwk C-wk nnoremap Leaderwj C-wj nnoremap Leaderwl C-wl nnoremap Leaderww C-ww Ctrlww——依次向后切换到下一个窗格中 3.同时显示多个文件 :sp //水平切分窗口 :vsp //垂直切分窗口 在NERDTree操作区的一些基本操作 nerdtree切换标签 Ctrl w h:切换到左边树状目录标签 Ctrl w l :Bookmark[name书签名]给当前选中的路径创建一个书签书签名可以随意不能有空格 :ClearBookmarks[bookmarks]清除书签 :ClearAllBookmarks清除所有书签 ?: 快速帮助文档 o: 打开一个目录或者打开文件创建的是buffer也可以用来打开书签 go: 打开一个文件但是光标仍然留在NERDTree创建的是buffer t: 打开一个文件创建的是Tab对书签同样生效 T: 打开一个文件但是光标仍然留在NERDTree创建的是Tab对书签同样生效 i: 水平分割创建文件的窗口创建的是buffer gi: 水平分割创建文件的窗口但是光标仍然留在NERDTree s: 垂直分割创建文件的窗口创建的是buffer gs: 和gigo类似 x: 收起当前打开的目录 X: 收起所有打开的目录 e: 以文件管理的方式打开选中的目录 D: 删除书签 P: 大写跳转到当前根路径 p: 小写跳转到光标所在的上一级路径 K: 跳转到第一个子路径 J: 跳转到最后一个子路径 C-j和C-k: 在同级目录和文件间移动忽略子目录和子文件 C: 将根路径设置为光标所在的目录 u: 设置上级目录为根路径 U: 设置上级目录为跟路径但是维持原来目录打开的状态 r: 刷新光标所在的目录 R: 刷新当前根路径 I: 显示或者不显示隐藏文件 f: 打开和关闭文件过滤器 q: 关闭NERDTree A: 全屏显示NERDTree或者关闭全屏