zoukankan      html  css  js  c++  java
  • VIM配置

    " 修改leader键
    let mapleader = ','
    let g:mapleader = ','
    
    syntax on	                              " 开启语法高亮
    colorscheme gruvbox
    
    set history=2000 					              " history存储容量
    set number                              " 显示行号
    
    filetype on                           " 检测文件类型
    filetype indent on                    " 针对不同的文件类型采用不同的缩进格式
    filetype plugin on                    " 允许插件
    filetype plugin indent on             " 启动自动补全
    
    "set cursorcolumn                     " 突出显示当前列
    set cursorline                       " 突出显示当前行
    
    set tabstop=4                               " 设置tab
    set shiftwidth=4                            " 设置自动缩进的大小
    set expandtab                               " 输入tab时自动将其转化为空格
    set showmatch                               " 括号配对情况, 跳转并高亮一下匹配的括号
    
    " Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable
    " delays and poor user experience.
    set updatetime=300
    
    set nobackup                                " no backup files
    set nowritebackup                           " 编辑的时候不需要备份文件
    
    set hidden                                  " 这样在切换buffer(文件/tab)的时候, 之前编辑的文件就只是切换到后台, 而不是关掉, 所以再切换回来, undo历史仍然在, 可以undo.
    
    " vim退出并在下次打开后仍然保留上次的undo历史
    set undofile
    set undodir=$HOME/.cache/vim/undo/
    set undolevels=1000
    set undoreload=10000
    
    " 配置缩进
    set autoindent
    set cindent
    set smartindent
    set backspace=2                           " 设置macos下删除键
    set clipboard=unnamed
    " set cursorcolumn " 突出显示当前列
    set showmatch                             " 显示括号匹配
    
    " 设置文内智能搜索提示
    set hlsearch                              " 高亮search命中的文本
    set incsearch                             " 打开增量搜索模式,随着键入即时搜索
    set ignorecase                            " 搜索时忽略大小写
    set smartcase                             " 有一个或以上大写字母时仍大小写敏感
    " set foldmethod=indent                     " 根据缩紧自动折叠
    
    " 配置快捷键
    " 让Vim的补全菜单行为与一般IDE一致(参考VimTip1228)
    set completeopt=longest,menu	
    " 离开插入模式后自动关闭预览窗口
    autocmd InsertLeave * if pumvisible() == 0|pclose|endif	
    inoremap <C-f> <right>
    inoremap <C-b> <left>
    
    " 回车即选中当前项
    inoremap <expr> <CR>       pumvisible() ? "<C-y>" : "<CR>"	
    " 使用 Ctrl+D 来切换 Vim/Shell
    " noremap <c-d> :sh<cr>
    
    " Use CTRL-S for saving, also in Insert mode
    noremap <C-S> :update<CR>
    vnoremap <C-S> <C-C>:update<CR>
    inoremap <C-S> <C-O>:update<CR>
    
    call plug#begin('~/.vim/plugged')
    " 自动补全括号的插件,包括小括号,中括号,以及花括号
    Plug 'jiangmiao/auto-pairs'
    " 可以在导航目录中看到 git 版本信息
    Plug 'Xuyuanp/nerdtree-git-plugin'
    " 可以快速对齐的插件
    Plug 'junegunn/vim-easy-align'
    " Vim状态栏插件,包括显示行号,列号,文件类型,文件名,以及Git状态
    Plug 'vim-airline/vim-airline'
    " 显示缩紧范围
    Plug 'nathanaelkane/vim-indent-guides'
    
    Plug 'mileszs/ack.vim'
    Plug 'neoclide/coc.nvim', {'branch': 'release'}
    Plug 'preservim/nerdtree', { 'on': 'NERDTreeToggle' }
    " 注释
    Plug 'preservim/nerdcommenter'
    Plug 'majutsushi/tagbar'
    Plug 'Yggdroot/LeaderF', { 'do': './install.sh' }
    Plug 'dense-analysis/ale'
    Plug 'mbbill/undotree'
    Plug 'easymotion/vim-easymotion'
    Plug 'tpope/vim-fugitive'
    Plug 'scrooloose/syntastic'
    " web
    Plug 'mattn/emmet-vim'
    Plug 'groenewege/vim-less', {'for':'less'}
    Plug 'hail2u/vim-css3-syntax' 
    Plug 'pangloss/vim-javascript', {'for':'js'}
    
    Plug 'airblade/vim-gitgutter'
    Plug 'tpope/vim-fugitive'
    Plug 'dansomething/vim-eclim'
    Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries', 'for': ['go', 'golang'] }
    Plug 'ludovicchabant/vim-gutentags'
    Plug 'editorconfig/editorconfig-vim'
    "Plug 'prabirshrestha/async.vim'
    "Plug 'prabirshrestha/vim-lsp'
    
    "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 'morhetz/gruvbox'
    
    call plug#end()
    
    " 启动时启用vim_indent_guides
    let g:indent_guides_enable_on_vim_startup = 1
    
    " ack 需要安装the_silver_searcher
    cnoreabbrev Ack Ack!
    nnoremap <Leader>a :Ack!<Space>
    let g:ackprg = 'ag --nogroup --nocolor --column'
    
    " NERDTree 
    " 将 NERDTree 的窗口设置在 vim 窗口的右侧(默认为左侧)
    " let NERDTreeWinPos="right"
    " close vim if the only window left open
    autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
    map <leader>n :NERDTreeFind<CR>
    map <C-n> :NERDTreeToggle<CR>
    " 不显示隐藏文件
    let g:NERDTreeHidden=0
    " 过滤: 所有指定文件和文件夹不显示
    let NERDTreeIgnore = ['.pyc$', '.swp', '.swo', '.vscode', '__pycache__']  
    
    " Tagbar
    nmap <leader>t :TagbarToggle<CR>
    
    " emmet 
    " 只在html和css文件中起作用
    let g:user_emmet_install_global = 0
    autocmd FileType html,css,vue EmmetInstal
    let g:user_emmet_leader_key=','
    
    
    " gutentags搜索工程目录的标志,碰到这些文件/目录名就停止向上一级目录递归 "
    let g:gutentags_project_root = ['.root', '.svn', '.git', '.project']
    
    " 所生成的数据文件的名称 "
    let g:gutentags_ctags_tagfile = '.tags'
    
    " 将自动生成的 tags 文件全部放入 ~/.cache/tags 目录中,避免污染工程目录 "
    let s:vim_tags = expand('~/.cache/tags')
    let g:gutentags_cache_dir = s:vim_tags
    " 检测 ~/.cache/tags 不存在就新建 "
    if !isdirectory(s:vim_tags)
    silent! call mkdir(s:vim_tags, 'p')
    endif
    
    " 配置 ctags 的参数 "
    let g:gutentags_ctags_extra_args = ['--fields=+niazS', '--extra=+q']
    let g:gutentags_ctags_extra_args += ['--c++-kinds=+pxI']
    let g:gutentags_ctags_extra_args += ['--c-kinds=+px']
    
    
    " go
    " vim-go
    let g:go_fmt_command = "goimports"
    let g:go_autodetect_gopath = 1
    let g:go_list_type = "quickfix"
    let g:go_def_mode = 'gopls'
    let g:go_info_mode = 'gopls'
    
    let g:go_highlight_types = 1
    let g:go_highlight_fields = 1
    let g:go_highlight_functions = 1
    let g:go_highlight_methods = 1
    let g:go_highlight_extra_types = 1
    let g:go_highlight_generate_tags = 1
    
    " Open :GoDeclsDir with ctrl-g
    nmap <C-g> :GoDeclsDir<cr>
    imap <C-g> <esc>:<C-u>GoDeclsDir<cr>
    
    
    augroup go
    autocmd!
    " Show by default 4 spaces for a tab
    autocmd BufNewFile,BufRead *.go setlocal noexpandtab tabstop=4 shiftwidth=4
    " :GoBuild and :GoTestCompile
    autocmd FileType go nmap <leader>b :<C-u>call <SID>build_go_files()<CR>
    " :GoTest
    " autocmd FileType go nmap <leader>t  <Plug>(go-test)
    " :GoRun
    autocmd FileType go nmap <leader>r  <Plug>(go-run)
    " :GoDoc
    autocmd FileType go nmap <Leader>d <Plug>(go-doc)
    " :GoCoverageToggle
    autocmd FileType go nmap <Leader>c <Plug>(go-coverage-toggle)
    " :GoInfo
    autocmd Filetype go nmap <Leader>i <Plug>(go-info)
    " :GoMetaLinter
    autocmd FileType go nmap <Leader>l <Plug>(go-metalinter)
    " :GoDef but opens in a vertical split
    autocmd FileType go nmap <Leader>v <Plug>(go-def-vertical)
    " :GoDef but opens in a horizontal split
    autocmd FileType go nmap <Leader>s <Plug>(go-def-split)
    
    " :GoAlternate  commands :A, :AV, :AS and :AT
    autocmd Filetype go command! -bang A call go#alternate#Switch(<bang>0, 'edit')
    autocmd Filetype go command! -bang AV call go#alternate#Switch(<bang>0, 'vsplit')
    autocmd Filetype go command! -bang AS call go#alternate#Switch(<bang>0, 'split')
    autocmd Filetype go command! -bang AT call go#alternate#Switch(<bang>0, 'tabe')
    augroup END
    
    " build_go_files is a custom function that builds or compiles the test file.
    " It calls :GoBuild if its a Go file, or :GoTestCompile if it's a test file
    function! s:build_go_files()
    let l:file = expand('%')
    if l:file =~# '^f+_test.go$'
    call go#test#Test(0, 1)
    elseif l:file =~# '^f+.go$'
    call go#cmd#Build(0)
    endif
    endfunction
    
    " easymotion
    " s{char}{char} to move to {char}{char}
    nmap s <Plug>(easymotion-overwin-f2)
    " Move to line
    map <Leader>L <Plug>(easymotion-bd-jk)
    nmap <Leader>L <Plug>(easymotion-overwin-line)
    
    " Move to word
    map  <Leader>; <Plug>(easymotion-bd-w)
    nmap <Leader>; <Plug>(easymotion-overwin-w)
    
    " leaderf 
    let g:Lf_WindowPosition = 'popup'
    let g:Lf_PreviewInPopup = 1
    
    " deoplete
    "let g:deoplete#enable_at_startup = 1
    "call deoplete#custom#option('omni_patterns', { 'go': '[^. *	].w*' })
    
    " coc
    " Use tab for trigger completion with characters ahead and navigate.
    " NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by
    " other plugin before putting this into your config.
    inoremap <silent><expr> <TAB>
       pumvisible() ? "<C-n>" :
       <SID>check_back_space() ? "<TAB>" :
       coc#refresh()
    inoremap <expr><S-TAB> pumvisible() ? "<C-p>" : "<C-h>"
    
    function! s:check_back_space() abort
    let col = col('.') - 1
    return !col || getline('.')[col - 1]  =~# 's'
    endfunction
    
    " Use <c-space> to trigger completion.
    inoremap <silent><expr> <c-space> coc#refresh()
    
    " Use `[g` and `]g` to navigate diagnostics
    nmap <silent> [g <Plug>(coc-diagnostic-prev)
    nmap <silent> ]g <Plug>(coc-diagnostic-next)
    
    " GoTo code navigation.
    nmap <silent> gd <Plug>(coc-definition)
    nmap <silent> gy <Plug>(coc-type-definition)
    nmap <silent> gi <Plug>(coc-implementation)
    nmap <silent> gr <Plug>(coc-references)
    
    " Use K to show documentation in preview window.
    nnoremap <silent> K :call <SID>show_documentation()<CR>
    
    function! s:show_documentation()
    if (index(['vim','help'], &filetype) >= 0)
    execute 'h '.expand('<cword>')
    else
    call CocAction('doHover')
    endif
    endfunction
    
    " Highlight the symbol and its references when holding the cursor.
    autocmd CursorHold * silent call CocActionAsync('highlight')
    
    " Symbol renaming.
    nmap <leader>rn <Plug>(coc-rename)
    
    " Formatting selected code.
    xmap <space>f  <Plug>(coc-format-selected)
    nmap <space>f  <Plug>(coc-format-selected)
    
    augroup mygroup
      autocmd!
      " Setup formatexpr specified filetype(s).
      autocmd FileType typescript,json,java,go,markdown setl formatexpr=CocAction('formatSelected')
      " Update signature help on jump placeholder.
      autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp')
    augroup end
    
    
    
  • 相关阅读:
    googleMapReduce
    leveldb0
    大端模式和小端模式
    信号
    js中判断对象类型的几种方法
    js DOM之基础详解
    JavaScript作用域与闭包总结
    SCRIPT438: 对象不支持“trim”属性或方法
    JS合并多个数组去重算法
    js的 break 和 continue 计算问题
  • 原文地址:https://www.cnblogs.com/warrior/p/12760845.html
Copyright © 2011-2022 走看看