从零开始折腾VIM

长期使用VSCode中的Vim插件,发现在linux下避免不了在终端中使用VIM,目的是将现在VSCode Vim中的使用习惯切换到原生VIM中

//从github中获取Vim
git clone https://github.com/vim/vim.git
//配置安装
./configure --with-features=huge \
    --enable-multibyte \
    --enable-rubyinterp=yes \
    --enable-python3interp=yes \
    --with-python-config-dir=/usr/lib/python3.10/config-3.10-x86_64-linux-gnu \ 
    --enable-perlinterp=yes \
    --enable-luainterp=yes \
    --enable-gui=gtk2 \
    --enable-cscope \
    --prefix=/usr/local
make
sudo make install
//安装vundleVim
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

//配置~/.vimrc

Ubuntu VIM不支持“+y及“+p可以使用vim-gtk

" =======================
" vimrc配置
" =======================
" -----------------------
" => 基本
" -----------------------

" 显示行号
set nu
" 高亮关键字
syntax on
" 解决乱码问题
set t_RV=

" 设置leader
let mapleader = "\<space>"
" 使用鼠标
set mouse=a
" 搜索结果高亮显示
set hlsearch

" 一个tab等于4个空格
set tabstop=4
set shiftwidth=4
" 表示Tab自动转换成空格
set expandtab

" 智能对齐
set autoindent
set smartindent
" 解决删除键不生效
set backspace=indent,eol,start

" 行尾结束符, 设置为unix
set fileformat=unix
" 文件编码
" fenc=utf-8
" 配置粘贴不自动换行的快捷键
set pastetoggle=<F9>

" 允许折叠
set foldenable
" 手动折叠
set foldmethod=manual

" 自动保存
set autowrite
" 记录历史的行数
set history=10000

" 设置搜索时忽略大小写
set ignorecase
" 高亮显示光标所在的行和列
" 显示颜色
set t_Co=256
set bg=dark
set cursorline
" set cursorcolumn
" 自定义光标样式
highlight CursorLine cterm=NONE ctermbg=black ctermfg=brown guibg=NONE guifg=NONE
highlight CursorColumn cterm=NONE ctermbg=black ctermfg=brown guibg=NONE guifg=NONE

" 显示tab和空格
set list
" 设置tab和空格样式
set lcs=tab:\|\ ,nbsp:%,trail:·

" 设定行首tab为灰色
highlight LeaderTab guifg=#666666
" 匹配行首tab
match LeaderTab /^\t/

" 输入的命令显示出来
set showcmd
" 启动显示状态行(1),总是显示状态行(2)
set laststatus=2

" -----------------------
" => 安装插件
" -----------------------
" 关闭vi兼容模式
set nocompatible

" 关闭文件类型检测
filetype off
" 运行时路径, 插件
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" 插件管理器
Plugin 'VundleVim/Vundle.vim'
" -----------------------
" => github 仓库中的插件
" -----------------------
" 自动补全
Plugin 'Valloric/YouCompleteMe'
" 底栏和顶栏
Plugin 'vim-airline/vim-airline'
" 侧边栏显示git修改
Plugin 'airblade/vim-gitgutter'
" 目录树显示文件的git修改
Plugin 'Xuyuanp/nerdtree-git-plugin'

Plugin 'altercation/vim-colors-solarized'
Plugin 'preservim/nerdtree'

" -----------------------
" => vim-scripts 中的插件
" -----------------------
" 显示文件中所有的函数和变量
Plugin 'Tagbar'
" 目录树
"Plugin 'The-NERD-tree'
" 显示tab对齐线
Plugin 'indentLine.vim'
" 符号自动补全
Plugin 'delimitMate.vim'
" 标签提取
Plugin 'ctags.vim'
" 颜色主题
Plugin 'desert.vim'
" 显示Python的虚拟环境
Plugin 'virtualenv.vim'

call vundle#end()
filetype plugin indent on


" -----------------------
" => 插件安装完成后的配置
" -----------------------
colorscheme solarized
" -----------------------
" ==> airline 标签栏配置
" -----------------------

" 启用powerline字体
let g:airline_powerline_fonts = 1
" 开启标签栏
let g:airline#extensions#tabline#enabled = 1
" 标签栏路径显示
" let g:airline#extensions#tabline#formatter = "default"
" let g:airline#extensions#tabline#formatter = "jsformatter"
" let g:airline#extensions#tabline#formatter = "unique_tail_improved"
let g:airline#extensions#tabline#formatter = "unique_tail"

" -----------------------
" ==> YouCompleteMe配置
" -----------------------
" YouCompleteMe 默认tab, s-tab和自动补全冲突
let g:ycm_key_list_select_completion=['<c-n>']
let g:ycm_key_list_select_completion = ['<Down>']
let g:ycm_key_list_previous_completion=['<c-p>']
let g:ycm_key_list_previous_completion = ['<Up>']

set completeopt=longest,menu

" 关闭加载.ycm_extra_conf.py提示
let g:ycm_confirm_extra_conf=0
" 在注释输入中也能补全
let g:ycm_complete_in_comments = 1
" 在字符串输入中也能补全
let g:ycm_complete_in_strings = 1
" 直接触发自动补全
let g:ycm_key_invoke_completion = '<C-Space>'

" 显示所有匹配
map <leader>gd :YcmDiags<CR>
" 跳转到申明处
nnoremap <leader>gl :YcmCompleter GoToDeclaration<CR>
" 跳转到定义处
nnoremap <leader>gf :YcmCompleter GoToDefinition<CR>
" 函数定义跳转, 将光标定位到函数, 输入gd 回车
nnoremap <leader>gg :YcmCompleter GoToDefinitionElseDeclaration<CR>

" -----------------------
" ==> Tagbar配置
" -----------------------
" 函数变量窗口, F3开启和关闭
map <leader>v :TagbarToggle<CR>
let tagbar_ctags_bin = 'ctags'
let tagbar_right = 1
let g:tagbar_width = 30
" tagbar一打开, 光标就在tagbar页面内
let g:tagbar_autofocus = 1
" 设置标签不排序,默认排序
let g:tagbar_sort = 0

" -----------------------
" ==> The-NERD-tree配置
" -----------------------
" 目录树, 使用F2开启或关闭
map <leader>d :NERDTreeToggle<CR>
let NERDTreeWinSize=30
" 自动开启
" autocmd vimenter * NERDTree
" 是否显示隐藏文件
let NERDTreeShowHidden=1
" 忽略一下文件的显示
let NERDTreeIgnore=['\.pyc','\~$','\.swp']

" -----------------------
" ==> Xuyuanp/nerdtree-git-plugin配置
" -----------------------
let g:NERDTreeGitStatusIndicatorMapCustom = {
\ "Modified" : "✹",
\ "Staged" : "✚",
\ "Untracked" : "✭",
\ "Renamed" : "➜",
\ "Unmerged" : "═",
\ "Deleted" : "✖",
\ "Dirty" : "✗",
\ "Clean" : "✔︎",
\ 'Ignored' : '☒',
\ "Unknown" : "?"
\ }
" -----------------------
" ==> vim-gitgutter配置
" -----------------------


" -----------------------
" ==> virtualenv.vim
" -----------------------
" 退出虚拟环境
" :VirtualEnvDeactivate
" 显示所有虚拟环境
" :VirtualEnvList
" **虚拟环境
" :VirtualEnvActivate venv
" 可以使用tab选择要**的虚拟环境
" :VirtualEnvActivate <tab>
" 显示帮助
" :help virtualenv

进入VIM安装插件

:PluginInstall

YCM编译安装需要另外的处理

一些定制化的需求后续可以修改