" 显示行数
set number
" vim安装目录
let vim_dir='E:/Vim/'
" Vim插件目录
let vim_plug_dir=vim_dir . '/plug_dir'
" 设置Vim运行时环境路径
set rtp+=E:\Vim\plug_dir\fzf
" 设置vim的前缀键
let mapleader=']'
" 语法高亮
syntax enable
" 设置背景色调
set background=light
" 设置主题
colorscheme solarized
" 开启文件类型侦察
filetype plugin on
" 去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限
set nocompatible
" 设置初始界面位置
"winpos 100 100
" 设置Gvim初始界面大小
set lines=50
set columns=200
" set backspace
" " indent: 想用退格键将字段缩进的删掉,必须设置这个选项
" " eol: 如果插入模式下在行开头,想通过退格键合并两行,需要设置eol。
" " start:要想删除此次插入前的输入,需设置这个。
set backspace=indent,eol,start
" 按一个tab显示的空格数
set tabstop=4
" 编辑模式的时候按退格键的时候退回缩进的长度
set softtabstop=4
" 表示每一级缩进的长度,设置成与softtabstop一样即可
set shiftwidth=4
" 当设置成 expandtab 时,缩进用空格来表示,noexpandtab 则是用制表符表示一个缩进。
set noexpandtab
" 设置Vim终端字符编码
set termencoding=utf8
" 设置VIM缓冲区以及界面的字符编码
" VIM运行时,其菜单、标签、以及各个缓冲区统一使用一种字符编码方式。
set encoding=utf-8
" 设置文件字符编码
set fileencoding=utf-8
" 设置vim探测文件的字符编码,从左到右优先
set fileencodings=utf-8,ucs-bom,gb2312,gbk,gb18030,cp936set
" 设置菜单语言
set langmenu=zh_CN.UTF-8
" 导入删除菜单脚本,删除乱码的菜单
source $VIMRUNTIME/delmenu.vim
"导入正常的菜单脚本
source $VIMRUNTIME/menu.vim
"设置提示信息语言
language messages zh_CN.utf-8
""" YCM Setrtings Start
" c/c++语言补全需要clangd路径
let g:ycm_clangd_binary_path = vim_plug_dir . "/YouCompleteMe/third_party/ycmd/third_party/clangd/output/bin/clangd"
" 离开插入模式后自动关闭预览窗口
autocmd InsertLeave * if pumvisible() == 0|pclose|endif
" 设置选中补全选项的向上选择和向下选择的按键,默认是tapb和s-tab
let g:ycm_key_list_select_completion = ['<Down>']
let g:ycm_key_list_previous_completion = ['<Up>']
" 开启 YCM 基于标签引擎
let g:ycm_collect_identifiers_from_tags_files=1
" 语法关键字补全
let g:ycm_seed_identifiers_with_syntax=1
" 关闭加载.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_collect_identifiers_from_comments_and_strings = 0
" 设置在下面几种格式的文件上屏蔽ycm
let g:ycm_filetype_blacklist = {
\ 'tagbar' : 1,
\ 'qf' : 1,
\ 'notes' : 1,
\ 'markdown' : 1,
\ 'unite' : 1,
\ 'text' : 1,
\ 'vimwiki' : 1,
\ 'pandoc' : 1,
\ 'infolog' : 1,
\ 'mail' : 1
\}
"设置关健字触发补全
let g:ycm_semantic_triggers = {
\ 'c' : ['->', '.', ' ', '(', '[', '&'],
\ 'objc' : ['->', '.', 're!\[[_a-zA-Z]+\w*\s', 're!^\s*[^\W\d]\w*\s',
\ 're!\[.*\]\s'],
\ 'ocaml' : ['.', '#'],
\ 'cpp,objcpp' : ['->', '.', '::'],
\ 'perl' : ['->'],
\ 'php' : ['->', '::'],
\ 'cs,java,javascript,typescript,d,python,perl6,scala,vb,elixir,go' : ['.'],
\ 'ruby' : ['.', '::'],
\ 'lua' : ['.', ':'],
\ 'erlang' : [':'],
\ }
""" YCM Settings End
""" UltiSnips Start
"插入模式下直接通过<C-z>键来触发UltiSnips的代码块补全
let g:UltiSnipsExpandTrigger="<tab>"
"弹出UltiSnips的可用列表,由于不常用, 所以这里设置成了特殊的<C-i>映射
" let g:UltiSnipsListSnippets="<C-i>"
"<C-f>跳转的到下一个代码块可编辑区
let g:UltiSnipsJumpForwardTrigger="<C-f>"
"<C-b>跳转到上一个代码块可编辑区
let g:UltiSnipsJumpBackwardTrigger="<C-b>"
""" UltiSnips End
""" NerdCommenter Start
" Add spaces after comment delimiters by default
let g:NERDSpaceDelims = 1
" Use compact syntax for prettified multi-line comments
let g:NERDCompactSexyComs = 1
" Align line-wise comment delimiters flush left instead of following code indentation
let g:NERDDefaultAlign = 'left'
" Set a language to use its alternate delimiters by default
"let g:NERDAltDelims_java = 1
" Add your own custom formats or override the defaults
"let g:NERDCustomDelimiters = { 'c': { 'left': '/**','right': '*/' } }
" Allow commenting and inverting empty lines (useful when commenting a region)
let g:NERDCommentEmptyLines = 1
" Enable trimming of trailing whitespace when uncommenting
let g:NERDTrimTrailingWhitespace = 1
" Enable NERDCommenterToggle to check all selected lines is commented or not
let g:NERDToggleCheckAllLines = 1
""" NerdCommenter End
""" NerdTree Start
"let g:NERDTreeDirArrowExpandable = ''
"let g:NERDTreeDirArrowCollapsible = ''
""" NerdTree End
""" FZF Start
" This is the default extra key bindings
let g:fzf_action = {
\ 'ctrl-t': 'tab split',
\ 'ctrl-x': 'split',
\ 'ctrl-v': 'vsplit' }
" Default fzf layout
" - down / up / left / right
let g:fzf_layout = { 'down': '~40%' }
" In Neovim, you can set up fzf window using a Vim command
let g:fzf_layout = { 'window': 'enew' }
let g:fzf_layout = { 'window': '-tabnew' }
let g:fzf_layout = { 'window': '10split enew' }
" Customize fzf colors to match your color scheme
let g:fzf_colors =
\ { 'fg': ['fg', 'Normal'],
\ 'bg': ['bg', 'Normal'],
\ 'hl': ['fg', 'Comment'],
\ 'fg+': ['fg', 'CursorLine', 'CursorColumn', 'Normal'],
\ 'bg+': ['bg', 'CursorLine', 'CursorColumn'],
\ 'hl+': ['fg', 'Statement'],
\ 'info': ['fg', 'PreProc'],
\ 'border': ['fg', 'Ignore'],
\ 'prompt': ['fg', 'Conditional'],
\ 'pointer': ['fg', 'Exception'],
\ 'marker': ['fg', 'Keyword'],
\ 'spinner': ['fg', 'Label'],
\ 'header': ['fg', 'Comment'] }
" Enable per-command history.
" CTRL-N and CTRL-P will be automatically bound to next-history and
" previous-history instead of down and up. If you don't like the change,
" explicitly bind the keys to down and up in your $FZF_DEFAULT_OPTS.
let g:fzf_history_dir = vim_dir . '/plugin_extra_data/fzf'
"调用Rg进行搜索,包含隐藏文件
command! -bang -nargs=* Rg
\ call fzf#vim#grep(
\ 'rg --column --line-number --no-heading --color=always --smart-case --hidden '.shellescape(<q-args>), 1,
\ <bang>0 ? fzf#vim#with_preview('up:60%')
\ : fzf#vim#with_preview('right:50%:hidden', '?'),
\ <bang>0)
""" FZF End
call plug#begin(vim_plug_dir)
Plug 'ycm-core/YouCompleteMe'
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'
Plug 'preservim/nerdtree'
Plug 'preservim/nerdcommenter'
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
call plug#end()
""" Vim Shortcut Key Start
map <F8> :NERDTreeToggle<CR>
map <leader>p :Files<CR>
map <leader>b :Buffers<CR>
map <leader>f :Rg<CR>
""" Vim Shortcut Key End