Vim进阶学习
vim的进阶学习分为两部分:自定义配置文件以及插件的使用。
自定义配置文件
在这里我们需要修改.vimrc
文件,稍后我会将我的配置文件发在文章结尾,所有的配置都是参考b站的课程:传送门。
首先就是
" 代码高亮
syntax on
" 设置行号
set number
" 主题使用 OneDark
colorscheme onedark
" 按 F2 进入粘贴模式
set pastetoggle=<F2>
" 高亮搜索
set hlsearch
" 设置折叠方式
set foldmethod=indent
" 一些方便的映射
let mapleader=','
let g:mapleader=','
" 使用 jj 进入 normal 模式
inoremap jj <Esc>`^
" 使用 leader+w 直接保存
inoremap <leader>w <Esc>:w<cr>
noremap <leader>w :w<cr>
" 切换 buffer
nnoremap <silent> [b :bprevious<CR>
nnoremap <silent> [n :bnext<CR>
" use ctrl+h/j/k/l to switch windows
noremap <C-h> <C-w>h
noremap <C-j> <C-w>j
noremap <C-k> <C-w>k
noremap <C-l> <C-w>l
" Sudo to write
" cnoremap w!! w !sudo tee % >/dev/null
" json 格式化
com! FormatJson %!python -m json.tool
插件的使用
这里我们使用vim-plug
来进行插件管理,具体怎么安装插件大家可以根据视频自学,我这里记录一下基础命令。
1.文件目录树:nerdtree
:NERDTREE 打开文件目录
,g 快速打开
,v 快速跳转到文件在目录树对应位置
2.模糊搜索器:CtrlP
ctrl + P 快速查找文件
3.快速定位插件:easymotion
ss 点击亮起的英文字母即可跳转
4.成对编辑插件:Vim-surround
ys iw " 快速给一个单词添加双引号
cs " ' 快速修改双引号为单引号
ds " 快速删除双引号
5.命令行模糊搜索工具:fzf
Files 要搜索的目录路径
:Ag 要搜索的字符串
6.搜索替换插件:far
:Far 要替换的文本 替换后的文本 要替换的目录
Fardo 确定替换
例子:Far foo bar **/*.py
7.python-mode
ctrl + ] 快速查看代码定义
ctrl + xo 代码补全
:PymodeLintAuto 自动代码整理
8.浏览代码插件:tagbar
,t 快速打开标签预览
9.代码补全插件:deoplete
ctrl + xo 快速补全并预览
10.格式化插件:Neoformat
:Neoformat + 回车
11.静态检查插件:ale
自动使用
12.自动注释插件:commentary
gc 注释或者取消注释
13.git插件:Fugitive
Gedit,Gdiff,Gcommit,Gblame
vim-plug插件配置:
" 插件设置,这里使用了 vim-plug
call plug#begin()
" 开始界面
Plug 'mhinz/vim-startify'
" onedark 主题
Plug 'joshdick/onedark.vim'
" hybrid 主题
Plug 'w0ng/vim-hybrid'
" 状态栏插件
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
" 代码缩进线
Plug 'yggdroot/indentline'
" 文件目录树
Plug 'scrooloose/nerdtree'
" 模糊搜索器
Plug 'kien/ctrlp.vim'
" 快速定位
Plug 'easymotion/vim-easymotion'
" 成对编辑 ys/cs/ds 增加/修改/删除
Plug 'tpope/vim-surround'
" 模糊搜索 Ag/Files
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
" 批量替换 :Far foo bar **/*.py :Fardo
Plug 'brooth/far.vim'
" vim-go
Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }
" python-mode
Plug 'python-mode/python-mode', { 'for': 'python', 'branch': 'develop' }
" 快速浏览代码
Plug 'majutsushi/tagbar'
" 高亮单词
Plug 'lfv89/vim-interestingwords'
" 代码补全
if has('nvim')
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
else
Plug 'Shougo/deoplete.nvim'
Plug 'roxma/nvim-yarp'
Plug 'roxma/vim-hug-neovim-rpc'
endif
Plug 'zchee/deoplete-jedi'
" Plug 'deoplete-plugins/deoplete-go', { 'do': 'make'}
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" 代码格式化
Plug 'sbdchd/neoformat'
" 静态检查
Plug 'w0rp/ale'
" 快速注释 gc
Plug 'tpope/vim-commentary'
" git相关
Plug 'tpope/vim-fugitive'
Plug 'airblade/vim-gitgutter'
Plug 'junegunn/gv.vim'
call plug#end()
let g:lightline = {
\ 'colorscheme': 'onedark',
\ }
" NERDTree
nnoremap <leader>v :NERDTreeFind<cr>
nnoremap <leader>g :NERDTreeToggle<cr>
let NERDTreeShowHidden=1
let NERDTreeIgnore = [
\ '\.git$', '\.hg$','\.svn$','\.stversions$','\.pyc$','\.pyo$','\.swp$',
\ '\.DS_Store$','\.sass-cache$','\.__pycache__$','\.egg-info$','\.ropeproject$',
\ ]
" ctrlp
let g:ctrlp_map = '<c-p>'
" easymotion
nmap ss <Plug>(easymotion-s2)
" vim-go
autocmd BufNewFile,BufRead *.go setlocal noexpandtab tabstop=4 shiftwidth=4
" python-mode
let g:pymode_python = 'python3'
let g:pymode_trim_whitespaces = 1
let g:pymode_doc = 1
let g:pymode_doc_bind = 'k'
let g:pymode_rope_goto_definition_bind = "<C-]>"
let g:pymode_lint = 1
let g:pymode_lint_checkers = ['pyflakes', 'pep8', 'mccabe','pylint']
let g:pymode_options_max_line_length = 120
" tagbar
nnoremap <leader>t :TagbarToggle<CR>
" ctrlp,在~/.agignore中添加一行node_modules
set wildignore+=*/tmp/*,*.so,*.swp,*.zip
let g:ctrlp_suatom_ignore = {
\ 'dir': '\v[\/]\.(git|hg|svn)$',
\ 'file': '\v\.(exe|so|dll|swp|pyc|pyo)$',
\ }
let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'
if executable('ag')
set grepprg=ag\ --nogroup\ --nocolor
let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'
else
let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files . -co --exclude-standard','find %s -type f']
endif
" deoplete
set completeopt-=preview
let g:deoplete#enable_at_startup = 1
set updatetime=100