总指南《保姆级教程!将 Vim 打造一个 IDE (Python 篇)》 系统:Linux version 5.4.0-198-generic (buildd@lcy02-amd64-109) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2))
安装 vim 9.1 安装python3.8及以上的python YouCompleteMe插件必须要python3.8+编译的vim
1 2 3 sudo add-apt-repository ppa:deadsnakes/ppa sudo apt-get update sudo apt-get install python3.8
安装vim9.1 YouCompleteMe插件必须要最新的vim版本才能支持,网上的添加非官方库add-apt-repository ppa:jonathonf/vim
的方法也只能装9.0版本的,因此需要手动编译The Vim repository at GitHub How To Install Vim with Python3 Support
1 2 3 4 5 6 7 8 sudo apt install -y python3-distutils python3-dev sudo apt install libncurses-dev ./configure --enable-python3interp \ --with-python3-config-dir=/usr/lib/python3.8/config-* \ --with-python3-command=/usr/bin/python3 \ --without-x make sudo make install
安装插件 安装插件管理工具vim-plug 1 2 curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
插件配置 在.vimrc中添加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 " 插件开始的位置 call plug#begin('~/.vim/plugged') " 代码自动完成,安装完插件还需要额外配置才可以使用 Plug 'ycm-core/YouCompleteMe' " 用来提供一个导航目录的侧边栏 Plug 'scrooloose/nerdtree' " 设置NerdTree map <F3> :NERDTreeMirror<CR> map <F3> :NERDTreeToggle<CR> " 可以使 nerdtree 的 tab 更加友好些 Plug 'jistr/vim-nerdtree-tabs' " 可以在导航目录中看到 git 版本信息 " Plug 'Xuyuanp/nerdtree-git-plugin' " 查看当前代码文件中的变量和函数列表的插件, " 可以切换和跳转到代码中对应的变量和函数的位置 " 大纲式导航, Go 需要 https://github.com/jstemmer/gotags 支持 Plug 'preservim/tagbar' nmap <F9> :TagbarToggle<CR> " 自动补全括号的插件,包括小括号,中括号,以及花括号 Plug 'jiangmiao/auto-pairs' " Vim状态栏插件,包括显示行号,列号,文件类型,文件名,以及Git状态 Plug 'vim-airline/vim-airline' " Shorthand notation; fetches https://github.com/junegunn/vim-easy-align " 可以快速对齐的插件 Plug 'junegunn/vim-easy-align' " 可以在文档中显示 git 信息 Plug 'airblade/vim-gitgutter' " markdown 插件 Plug 'iamcco/mathjax-support-for-mkdp' Plug 'iamcco/markdown-preview.vim' " 下面两个插件要配合使用,可以自动生成代码块 Plug 'SirVer/ultisnips' Plug 'honza/vim-snippets' " go 主要插件 Plug 'fatih/vim-go', { 'tag': '*' } " go 中的代码追踪,输入 gd 就可以自动跳转 Plug 'dgryski/vim-godef' " 可以在 vim 中使用 tab 补全 "Plug 'vim-scripts/SuperTab' " 可以在 vim 中自动完成 "Plug 'Shougo/neocomplete.vim' " 插件结束的位置,插件全部放在此行上面 call plug#end()
安装插件 打开 vim 输入 :PlugInstall
安装YouCompleteMe YouCompleteMe需要单独安装
1 2 cd ~/.vim/plugged/YouCompleteMe python3 install.py
tagbar需要单独安装ctags
插件使用 切换窗口 CTRL-w j 光标切换到下一个窗口。 CTRL-w k 光标切换到上一个窗口。 CTRL-w h 光标切换到左边窗口。如果左边没有窗口,保持在当前窗口不变。 CTRL-w l 光标切换到右边窗口。 CTRL-w w 在各个窗口之间来回切换。每输入一次,切换一个窗口。不停输入,可以遍历所有窗口。在只有两个窗口时很方便来回切换。
YouComplete 代码自动补全 自动补全代码,使用方法和普通IDE一样
NerdTree 文件目录 在.vimrc
中添加
1 2 map <F3> :NERDTreeMirror<CR> map <F3> :NERDTreeToggle<CR>
设置F3为打开文件目录的快捷键
基本操作快捷键:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ?: 快速帮助文档 o: 打开一个目录或者打开文件,创建的是buffer,也可以用来打开书签 go: 打开一个文件,但是光标仍然留在NERDTree,创建的是buffer t: 打开一个文件,创建的是Tab,对书签同样生效 T: 打开一个文件,但是光标仍然留在NERDTree,创建的是Tab,对书签同样生效 i: 水平分割创建文件的窗口,创建的是buffer gi: 水平分割创建文件的窗口,但是光标仍然留在NERDTree s: 垂直分割创建文件的窗口,创建的是buffer gs: 和gi,go类似 x: 收起当前打开的目录 X: 收起所有打开的目录 e: 以文件管理的方式打开选中的目录 D: 删除书签 P: 大写,跳转到当前根路径 p: 小写,跳转到光标所在的上一级路径 K: 跳转到第一个子路径 J: 跳转到最后一个子路径 <C-j>和<C-k>: 在同级目录和文件间移动,忽略子目录和子文件 C: 将根路径设置为光标所在的目录 u: 设置上级目录为根路径 U: 设置上级目录为跟路径,但是维持原来目录打开的状态 r: 刷新光标所在的目录 R: 刷新当前根路径 I: 显示或者不显示隐藏文件 f: 打开和关闭文件过滤器 q: 关闭NERDTree A: 全屏显示NERDTree,或者关闭全屏
tagbar 大纲式导航 在.vimrc
中添加nmap <F9> :TagbarToggle<CR>
绑定F9为打开关闭的快捷键 上下移动(jk), 选中回车后会跳转
vimgrep 文件内查找 在 Vim 命令行模式下输入 :h vimgrep 可以看到 vimgrep 的使用文档
命令
1 2 :vim[grep][!] /{pattern}/[g][j] {file} ... :vim[grep][!] {pattern} {file} ...
含义
vim 可作为 vimgrep 的缩写
! 可紧随 vimgrep 之后,表示强制执行该命令
索引的关键字 pattern 放在了两个 “/” 中间,并且支持正则表达式
g, j 可选。 如果添加 g,将显示重复行, 如果添加 j,vim 将不会自动跳转到第一个匹配的行(可能是别的文件)
file 可以是正则文件名,也可以是多个确定的文件名
使用:vimgrep /user/g **
使用该命令可以查找当前目录下所有文件中包含 user 字符串的文件,并跳转到第一个匹配的文件, 同时所有搜索结果会显示在 Quickfix 中,使用 :cw, :copen 可以打开该列表
更多命令
1 2 3 4 5 :cnext, :cn # 当前页下一个结果 :cprevious, :cp # 当前页上一个结果 :clist, :cl # 使用 more 打开 Quickfix 窗口 :copen, :cope, :cw # 打开 Quickfix 窗口,列出所有结果 :ccl[ose] # 关闭 Quickfix 窗口。