前言
由于 vim 的大部分插件都托管在 github 上,因此需要提高 github 的访问速度,减少因 DNS 污染而造成的访问失败,这里提供一些能够稳定访问 github 的 IP 的地址。
- 首先将需要打开 hosts 文件
sudo vim /etc/hosts
- 添加以下内容至 hosts 文件中
# Github Hosts
# Update 20211204
# domain: github.com
140.82.114.4 github.com
140.82.114.10 nodeload.github.com
140.82.114.6 api.github.com
140.82.114.10 codeload.github.com
185.199.108.133 raw.github.com
185.199.108.153 training.github.com
185.199.108.153 assets-cdn.github.com
185.199.108.153 documentcloud.github.com
185.199.108.154 help.github.com
# domain: githubstatus.com
185.199.108.153 githubstatus.com
# domain: fastly.net
199.232.69.194 github.global.ssl.fastly.net
# domain: githubusercontent.com
185.199.108.133 raw.githubusercontent.com
185.199.108.154 pkg-containers.githubusercontent.com
185.199.108.133 cloud.githubusercontent.com
185.199.108.133 gist.githubusercontent.com
185.199.108.133 marketplace-screenshots.githubusercontent.com
185.199.108.133 repository-images.githubusercontent.com
185.199.108.133 user-images.githubusercontent.com
185.199.108.133 desktop.githubusercontent.com
185.199.108.133 avatars.githubusercontent.com
185.199.108.133 avatars0.githubusercontent.com
185.199.108.133 avatars1.githubusercontent.com
185.199.108.133 avatars2.githubusercontent.com
185.199.108.133 avatars3.githubusercontent.com
185.199.108.133 avatars4.githubusercontent.com
185.199.108.133 avatars5.githubusercontent.com
185.199.108.133 avatars6.githubusercontent.com
185.199.108.133 avatars7.githubusercontent.com
185.199.108.133 avatars8.githubusercontent.com
# End of the section
vim 插件管理 Vundle
vim的插件种类比较多,为了方便管理,本文采用 Vundle 来进行管理
Vundle安装
mkdir -p ~/.vim/bundle
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
Vundle配置
- 打开 vimrc 文件
vim ~/.vimrc
- 在 vimrc 文件中添加以下内容
set nocompatible
filetype off
" 设置包括 vundle 和初始化相关的 runtimepath
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" 另一种选择, 指定一个 vundle 安装插件的路径
"call vundle#begin('~/some/path/here')
" 让 vundle 管理插件版本,必须
Plugin 'VundleVim/Vundle.vim'
" 所有插件需要在下面这行之前配置
call vundle#end() " 必须
filetype plugin indent on " 必须 加载vim自带和插件相应的语法和文件类型相关脚本
" 忽视插件改变缩进,可以使用以下替代:
"filetype plugin on
- 可通过PluginIntall来安装 vimrc 中配置过的插件
:PluginInstall
- 有时候通过上述方式安装插件会卡在安装卡在安装界面,这时候可以直接下载插件代码放在 vundle 目录下,例如
cd ~/.vim/vundle
git clone https://github.com/<plugin>
vim 主题插件molokai
molokai 是一款主题插件,个人比较喜欢
molokai安装
- 在 ~/.vimrc 文件中插件安装位置插入以下内容
Plugin 'tomasr/molokai'
molokai配置
- 在 ~/.vimrc 文件中添加以下内容
colorscheme molokai "设置颜色主题"
set t_Co=256 "设置256色彩"
set background=dark
let g:molokai_original = 1
let g:rehash256 = 1
molokai效果
vim 目录树插件nerdtree
nerdtree插件能够使得vim编辑时,能够直观地看到目录的结构,方便找到需要的文件并同时编辑多个文件
nerdtree安装
- 在 ~/.vimrc 文件中插件安装位置插入以下内容
Plugin 'scrooloose/nerdtree'
nerdtree配置
- 在 ~/.vimrc 文件中添加以下内容
nmap <C-t> :NERDTreeToggle<cr> "打开目录树"
nmap <C-f> :NERDTreeFind<cr> "查找文件"
nerdtree效果
vim 状态栏插件vim-airline
状态栏插件能够使得vim界面更加简洁美观,方便在多个文件中进行切换
vim-airline安装
- 在 ~/.vimrc 文件中插件安装位置插入以下内容
Plugin 'vim-airline/vim-airline'
vim-airline配置
- 在 ~/.vimrc 文件中添加以下内容
let g:airline_powerline_fonts=1
let g:airline#extensions#tabline#enabled = 1 "tabline中当前buffer两端的分隔字符
nmap <tab> :bn<cr> " 设置tab键映射"
- 因为 vim-airline 插件中使用到了一些特殊字符,需要安装 powerline 字体
git clone https://github.com/powerline/fonts.git
cd fonts
./install.sh
- 可通过 fc-list 查询到系统内的字体
fc-list
vim-airline效果
使用powerline美化终端
- 安装powerline-status
sudo apt install powerline
pip install powerline-status
- 查看powerline-status的安装位置
pip show powerline-status
- 打开 ~/.bashrc 文件添加以下内容
powerline-daemon -q
POWERLINE_BASH_CONTINUATION=1
POWERLINE_BASH_SELECT=1
source /home/min/.local/lib/python2.7/site-packages/powerline/bindings/bash/powerline.sh
- 效果
vim 补全插件YouCompleteMe
YouCompleteMe安装
- 适用于ubuntu18.04和ubuntu20.04
sudo apt install vim-youcompleteme && vim-addon-manager install youcompleteme
- 在 ~/.vimrc 文件中添加以下内容
" 自动补全配置
set completeopt=longest,menu "让Vim的补全菜单行为与一般IDE一致(参考VimTip1228)
autocmd InsertLeave * if pumvisible() == 0|pclose|endif "离开插入模式后自动关闭预览窗口
inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>" "回车即选中当前项
"上下左右键的行为 会显示其他信息
inoremap <expr> <Down> pumvisible() ? "\<C-n>" : "\<Down>"
inoremap <expr> <Up> pumvisible() ? "\<C-p>" : "\<Up>"
inoremap <expr> <PageDown> pumvisible() ? "\<PageDown>\<C-p>\<C-n>" : "\<PageDown>"
inoremap <expr> <PageUp> pumvisible() ? "\<PageUp>\<C-p>\<C-n>" : "\<PageUp>"
"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>']
let g:ycm_confirm_extra_conf=0 "关闭加载.ycm_extra_conf.py提示
let g:ycm_collect_identifiers_from_tags_files=1 " 开启 YCM 基于标签引擎
let g:ycm_min_num_of_chars_for_completion=2 " 从第2个键入字符就开始罗列匹配项
let g:ycm_cache_omnifunc=0 " 禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_seed_identifiers_with_syntax=1 " 语法关键字补全
nnoremap <F5> :YcmForceCompileAndDiagnostics<CR> "force recomile with syntastic
"nnoremap <leader>lo :lopen<CR> "open locationlist
"nnoremap <leader>lc :lclose<CR> "close locationlist
inoremap <leader><leader> <C-x><C-o>
"在注释输入中也能补全
let g:ycm_complete_in_comments = 1
"在字符串输入中也能补全
let g:ycm_complete_in_strings = 1
"注释和字符串中的文字也会被收入补全
let g:ycm_collect_identifiers_from_comments_and_strings = 0
nnoremap <F3> :YcmCompleter GoToDefinitionElseDeclaration<CR> " 跳转到定义处