备份一下 自己使用的 vim 配置

scriptencoding utf-8
" ============================================================================
" 作者:gm.zhibo.wang

" ============================================================================
" Vundle 初始化
" 除非你非常确定自己在做什么,否则不要修改此部分

" 不使用 vi 兼容模式
set nocompatible

" 设置 Vundle - 最佳的 vim 插件管理器
let iCanHazVundle=1
let vundle_readme=expand('~/.vim/bundle/vundle/README.md')
if !filereadable(vundle_readme)
    echo "正在安装 Vundle..."
    echo ""
    silent !mkdir -p ~/.vim/bundle
    silent !git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/vundle
    let iCanHazVundle=0
endif

filetype off

set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

" 让 Vundle 管理插件
Plugin 'VundleVim/Vundle.vim'

" ============================================================================
" 激活插件
" 你可以在此处禁用或添加新的插件:

" 来自 github 仓库的插件:

" 更好的文件浏览器
Plugin 'scrooloose/nerdtree'
" 代码注释工具
Plugin 'scrooloose/nerdcommenter'
" 类/模块浏览器
Plugin 'majutsushi/tagbar'
" 代码和文件的模糊查找器
Plugin 'ctrlpvim/ctrlp.vim'
" ctrlp 的扩展,用于模糊命令查找
Plugin 'fisadev/vim-ctrlp-cmdpalette'
" Zen 编码
Plugin 'mattn/emmet-vim'
" 一个 Git 包装器,非常棒
Plugin 'tpope/vim-fugitive'
" Vim 的标签管理
Plugin 'kien/tabman.vim'
" Airline
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
" 将控制台作为缓冲区
Plugin 'rosenfeld/conque-term'
" 待办任务列表
Plugin 'fisadev/FixedTaskList.vim'
" 包围
Plugin 'tpope/vim-surround'
" 自动关闭
Plugin 'Townk/vim-autoclose'
" 缩进文本对象
Plugin 'michaeljsmith/vim-indent-object'
" Python 模式(缩进、文档、重构、检查、代码检查、运动和操作符、高亮、运行和 ipdb 断点)
Plugin 'python-mode/python-mode'


" 更好的自动补全
Plugin 'Shougo/neocomplcache.vim'
" Snippets 管理器(SnipMate),依赖项,以及 snippets 仓库
Plugin 'marcweber/vim-addon-mw-utils'
Plugin 'tomtom/tlib_vim'
Plugin 'honza/vim-snippets'
Plugin 'garbas/vim-snipmate'
" 极好的配色方案
Plugin 'tomasr/molokai'
" 在文件行的一侧显示 Git/mercurial/其他 diff 图标
Plugin 'mhinz/vim-signify'
" 自动排序 python 导入
""" Plugin 'fisadev/vim-isort'
" 拖动视觉块
Plugin 'fisadev/dragvisuals.vim'
" 窗口选择器
Plugin 't9md/vim-choosewin'
" Python 和其他语言的代码检查器
Plugin 'vim-syntastic/syntastic'
" 用真实颜色绘制 css 颜色
Plugin 'lilydjwg/colorizer'
" 相对行号(当前行是 0)
" 需要 Vim 7.3+
" Plugin 'myusuf3/numbers.vim'

" 安装插件后,你必须进入安装目录并运行 `npm install`,然后添加一个 .tern-project 配置文件
" 文档位于 http://ternjs.net/doc/manual.html#vim
Plugin 'ternjs/tern_for_vim'
" Go 语言插件
Plugin 'fatih/vim-go'
" JSX 语法高亮。
Plugin 'mxw/vim-jsx'
" Markdown 语法高亮
Plugin 'godlygeek/tabular'
Plugin 'plasticboy/vim-markdown'
" Markdown 实时预览
" 在使用它之前,请运行
" `sudo npm -g install instant-markdown-d`
Plugin 'suan/vim-instant-markdown'
" Handlebars 语法高亮
Plugin 'mustache/vim-mustache-handlebars'
" Vue.js 语法和高亮
Plugin 'tao12345666333/vim-vue'
" 真正的 Sublime Text 风格的多选
Plugin 'terryma/vim-multiple-cursors'
" 现代数据库接口
Plugin 'tpope/vim-dadbod'
" Dockerfile 支持
Plugin 'ekalinin/Dockerfile.vim'

" 来自 vim-scripts 仓库的插件:

" 搜索的是结果计数器
Plugin 'IndexedSearch'
" XML/HTML 标签导航
Plugin 'matchit.zip'
" Gvim 配色方案
Plugin 'Wombat'

" Yank 历史记录导航
Plugin 'YankRing.vim'




" ============================================================================
" Vim 首次运行时安装插件

if iCanHazVundle == 0
    echo "正在安装插件,请忽略按键映射错误消息"
    echo ""
    :PluginInstall
endif





" ============================================================================
" Vim 设置和映射
" 你可以随心所欲地编辑它们

" 按文件类型启用插件(插件所需!)
filetype plugin on
filetype indent on

" 标签和空格处理
set expandtab
set tabstop=4
set softtabstop=4
set shiftwidth=4
" 高亮光标行和列
set cursorline
set cursorcolumn
" 隐藏启动消息
set shortmess=atI
" 自动读写
set autowrite
set autoread
" 处理未保存文件时询问要做什么
set confirm
" 无备份文件
set nobackup
" 其他设置
set langmenu=zh_CN.UTF-8
" set mouse=a
"" set whichwrap+=<,>,h,l,[,]
set background=dark
set encoding=utf-8

set backspace=2 " 让退格键的行为像大多数其他应用程序一样
set backspace=indent,eol,start

" 对某些文件类型的标签长度进行例外设置
 autocmd FileType html setlocal shiftwidth=2 tabstop=2 softtabstop=2
 autocmd FileType htmldjango setlocal shiftwidth=2 tabstop=2 softtabstop=2
 autocmd FileType javascript setlocal shiftwidth=2 tabstop=2 softtabstop=2

let g:snipMate = { 'snippet_version' : 1 }

" NERDTree -----------------------------
"
" 自动打开或关闭 NERDTree
autocmd vimenter * if !argc() | NERDTree | endif
let NERDTreeIgnore = ['\.pyc$', '\.pyo$', '__pycache__', 'log', 'logs']
autocmd VimEnter * NERDTree
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif

" 始终显示状态栏
set laststatus=2

" 增量搜索
set incsearch
" 高亮搜索结果
set hlsearch
" 搜索的是忽略大小写
set ignorecase
" 静音搜索高亮
nnoremap <silent> <C-l> :<C-u>nohlsearch<CR><C-l>

" 启用语法高亮
syntax on

" 显示行号
set nu

" 标签导航映射
map tn :tabn<CR>
map tp :tabp<CR>
map tm :tabm
map tt :tabnew
map ts :tab split<CR>
map <C-S-Right> :tabn<CR>
imap <C-S-Right> <ESC>:tabn<CR>
map <C-S-Left> :tabp<CR>
imap <C-S-Left> <ESC>:tabp<CR>

" 使用 Meta+箭头键导航窗口
map <M-Right> <c-w>l
map <M-Left> <c-w>h
map <M-Up> <c-w>k
map <M-Down> <c-w>j
imap <M-Right> <ESC><c-w>l
imap <M-Left> <ESC><c-w>h
imap <M-Up> <ESC><c-w>k
imap <M-Down> <ESC><c-w>j

" 旧的自动补全键盘快捷键
imap <C-J> <C-X><C-O>

" 注释此行以启用自动补全预览窗口
" (显示与所选补全选项相关的文档)
" 默认禁用,因为预览会导致窗口闪烁
set completeopt-=preview

" 以 sudo 保存
ca w!! w !sudo tee "%"

" 简单的递归 grep
" 两个递归 grep 命令,分别使用内部或外部(快速)grep
command! -nargs=1 RecurGrep lvimgrep /<args>/gj ./**/*.* | lopen | set nowrap
command! -nargs=1 RecurGrepFast silent exec 'lgrep! <q-args> ./**/*.*' | lopen
" 调用它们的映射
nmap ,R :RecurGrep
nmap ,r :RecurGrepFast
" 使用默认词作为搜索文本调用它们的映射
nmap ,wR :RecurGrep <cword><CR>
nmap ,wr :RecurGrepFast <cword><CR>

" 使用 256 色(如果可能)
"
if &term =~? 'mlterm\|xterm\|xterm-256\|screen-256'
    let &t_Co = 256
    " 颜色方案 elflord
    " 颜色方案 inkpot
    " 颜色方案 herald
else
    颜色方案 delek
endif

" gvim 的颜色
if has('gui_running')
    colorscheme wombat
endif

" 滚动时,保持光标距离屏幕边界 3 行
set scrolloff=3

" 自动补全文件和命令的行为像 zsh
" (自动补全菜单)
set wildmenu
set wildmode=full

" 更好的备份、交换和撤销存储
set directory=~/.vim/dirs/tmp     " 放置交换文件的目录
set backup                        " 制作备份文件
set backupdir=~/.vim/dirs/backups " 备份文件的存放位置
set undofile                      " 持久撤销 - 重新打开文件后撤销
set undodir=~/.vim/dirs/undos
set viminfo+=n~/.vim/dirs/viminfo
" 在那里存储 yankring 历史记录文件
let g:yankring_history_dir = '~/.vim/dirs/'

" 如果目录不存在则创建所需目录
if !isdirectory(&backupdir)
    call mkdir(&backupdir, "p")
endif
if !isdirectory(&directory)
    call mkdir(&directory, "p")
endif
if !isdirectory(&undodir)
    call mkdir(&undodir, "p")
endif

" ============================================================================
" 插件设置和映射
" 随心所欲地编辑它们。

" Tagbar -----------------------------

" 切换 tagbar 显示
map <F4> :TagbarToggle<CR>
" 打开 tagbar 时自动聚焦
let g:tagbar_autofocus = 1
" autocmd BufReadPost *.py call tagbar#autoopen()


" Tasklist ------------------------------

" 显示待办任务列表
map <F2> :TaskList<CR>

" CtrlP ------------------------------

" 文件查找映射
let g:ctrlp_map = ',e'
" 隐藏一些类型的文件
let g:ctrlp_show_hidden = 1
set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*.pyc,*.png,*.jpg,*.gif           "Linux
" 当前文件的标签(符号)查找映射
nmap ,g :CtrlPBufTag<CR>
" 所有文件的标签(符号)查找映射
nmap ,G :CtrlPBufTagAll<CR>
" 所有文件的一般代码查找映射
nmap ,f :CtrlPLine<CR>
" 最近文件查找映射
nmap ,m :CtrlPMRUFiles<CR>
" 命令查找映射
nmap ,c :CtrlPCmdPalette<CR>
" 调用它们的默认搜索文本
function! CtrlPWithSearchText(search_text, ctrlp_command_end)
    execute ':CtrlP' . a:ctrlp_command_end
    call feedkeys(a:search_text)
endfunction
" 与之前的映射相同,但调用时以当前词为默认文本
nmap ,wg :call CtrlPWithSearchText(expand('<cword>'), 'BufTag')<CR>
nmap ,wG :call CtrlPWithSearchText(expand('<cword>'), 'BufTagAll')<CR>
nmap ,wf :call CtrlPWithSearchText(expand('<cword>'), 'Line')<CR>
nmap ,we :call CtrlPWithSearchText(expand('<cfile>'), '')<CR>
nmap ,pe :call CtrlPWithSearchText(expand('<cfile>'), '')<CR>
nmap ,wm :call CtrlPWithSearchText(expand('<cword>'), 'MRUFiles')<CR>
nmap ,wc :call CtrlPWithSearchText(expand('<cword>'), 'CmdPalette')<CR>
" 不更改工作目录
let g:ctrlp_working_path_mode = 0
" 在文件查找中忽略这些文件和文件夹
let g:ctrlp_custom_ignore = {
  \ 'dir':  '\v[\/](\.git|\.hg|\.svn)$',
  \ 'file': '\.pyc$\|\.pyo$',
  \ }

" Syntastic ------------------------------

" 显示当前文件的错误和警告列表
nmap <leader>e :Errors<CR>
" 打开错误列表后转到下一个或上一个错误
nmap <leader>n :lnext<CR>
nmap <leader>p :lprevious<CR>
" 打开文件时也进行检查
let g:syntastic_check_on_open = 1
" syntastic 的 JavaScript 检查器。
" eslint 是唯一支持 JSX 的工具。
" 如果你不需要编写 JSX,你可以使用 jshint。
" eslint 很慢,但不会妨碍使用
let g:syntastic_javascript_checkers = ['jshint']
" let g:syntastic_javascript_checkers = ['eslint']
" 不在符号列中放置图标(它会隐藏 signify 的 vcs 状态图标)
let g:syntastic_enable_signs = 0
" 自定义图标(如果你使用修补过的字体,并启用上述设置)
let g:syntastic_error_symbol = '✗'
let g:syntastic_warning_symbol = '⚠'
let g:syntastic_style_error_symbol = '✗'
let g:syntastic_style_warning_symbol = '⚠'
let g:syntastic_quiet_messages = {
    \ "regex":   'invalid-name\|missing-docstring'}

" Python-mode ------------------------------

" 不使用 linter,我们使用 syntastic
let g:pymode_python = 'python'
let g:pymode_lint_on_write = 0
let g:pymode_lint_signs = 0
" 打开时不要折叠 Python 代码
let g:pymode_folding = 0
" 默认不要加载 rope。更改为 1 以使用 rope
let g:pymode_rope = 0
" 在同窗口打开定义,并为定义和出现自定义映射

" let g:pymode_rope_goto_definition_bind = ',d'
" let g:pymode_rope_goto_definition_cmd = 'e'
" nmap ,D :tab split<CR>:PymodePython rope.goto()<CR>
" nmap ,o :RopeFindOccurrences<CR>

" NeoComplCache ------------------------------

" 大多数设置未记录,因为我也不确定它们如何工作
" (文档不太好,不得不进行大量试验和错误才能使其正常工作)

" 禁用 AutoComplPop。
let g:acp_enableAtStartup = 0
" 使用 neocomplcache。
let g:neocomplcache_enable_at_startup = 1
let g:neocomplcache_enable_ignore_case = 1
" 使用智能大小写。
let g:neocomplcache_enable_smart_case = 1
let g:neocomplcache_enable_auto_select = 1

let g:neocomplcache_enable_fuzzy_completion = 1
let g:neocomplcache_enable_camel_case_completion = 1
let g:neocomplcache_enable_underbar_completion = 1
let g:neocomplcache_fuzzy_completion_start_length = 1
let g:neocomplcache_auto_completion_start_length = 1
let g:neocomplcache_manual_completion_start_length = 1
" 设置最小语法关键词长度。
let g:neocomplcache_min_keyword_length = 1
let g:neocomplcache_min_syntax_length = 1
let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*'
" 从任何打开的文件中补全单词
let g:neocomplcache_same_filetype_lists = {}
let g:neocomplcache_same_filetype_lists._ = '_'
" <TAB>: 补全。
inoremap <expr><TAB>  pumvisible() ? "\<C-n>" : "\<TAB>"
" 定义关键词。
if !exists('g:neocomplcache_keyword_patterns')
    let g:neocomplcache_keyword_patterns = {}
endif
let g:neocomplcache_keyword_patterns['default'] = '\h\w*'
" 插件键映射。
inoremap <expr><C-g>     neocomplcache#undo_completion()
inoremap <expr><C-l>     neocomplcache#complete_common_string()
" <C-h>, <BS>: 关闭弹出窗口并删除向后字符。
inoremap <expr><C-h> neocomplcache#smart_close_popup()."\<C-h>"
inoremap <expr><BS> neocomplcache#smart_close_popup()."\<C-h>"
inoremap <expr><C-y>  neocomplcache#close_popup()
inoremap <expr><C-e>  neocomplcache#cancel_popup()

" TabMan ------------------------------

" 切换显示的映射,以及聚焦的映射
let g:tabman_toggle = 'tl'
let g:tabman_focus  = 'tf'

" Autoclose ------------------------------

" 修复 ESC 按预期工作与 Autoclose 插件的兼容性
let g:AutoClosePumvisible = {"ENTER": "\<C-Y>", "ESC": "\<ESC>"}

" DragVisuals ------------------------------

" 移动块的四个方向的映射
vmap <expr> <S-M-LEFT> DVB_Drag('left')
vmap <expr> <S-M-RIGHT> DVB_Drag('right')
vmap <expr> <S-M-DOWN> DVB_Drag('down')
vmap <expr> <S-M-UP> DVB_Drag('up')
" 复制块的映射
vmap <expr> D DVB_Duplicate()

" Signify ------------------------------

" 此第一个设置决定尝试猜测你当前的 vcs 的顺序
" 更新它以反映你的偏好,它将加快打开文件的速度
let g:signify_vcs_list = [ 'git', 'hg' ]
" 跳转到更改块的映射
nmap <leader>sn <plug>(signify-next-hunk)
nmap <leader>sp <plug>(signify-prev-hunk)
" 更好的颜色
highlight DiffAdd           cterm=bold ctermbg=none ctermfg=119
highlight DiffDelete        cterm=bold ctermbg=none ctermfg=167
highlight DiffChange        cterm=bold ctermbg=none ctermfg=227
highlight SignifySignAdd    cterm=bold ctermbg=237  ctermfg=119
highlight SignifySignDelete cterm=bold ctermbg=237  ctermfg=167
highlight SignifySignChange cterm=bold ctermbg=237  ctermfg=227

" Window Chooser ------------------------------

" 映射
nmap  -  <Plug>(choosewin)
" 显示大写字母
let g:choosewin_overlay_enable = 1

" Airline ------------------------------

let g:airline_powerline_fonts = 1
let g:airline_theme = 'bubblegum'
"let g:airline#extensions#tabline#enabled = 1
"let g:airline#extensions#tabline#left_sep = ' '
"let g:airline#extensions#tabline#left_alt_sep = '|'
let g:airline#extensions#whitespace#enabled = 1

" 为了使用华丽的符号为 airline,请取消注释以下行并使用修补过的字体(更多详细信息请参阅 README.rst)
if !exists('g:airline_symbols')
   let g:airline_symbols = {}
endif
" let g:airline_left_sep = '⮀'
" let g:airline_left_alt_sep = '⮁'
" let g:airline_right_sep = '⮂'
" let g:airline_right_alt_sep = '⮃'
" let g:airline_symbols.branch = '⭠'
" let g:airline_symbols.readonly = '⭤'
" let g:airline_symbols.linenr = '⭡'

let g:airline_left_sep = ''
let g:airline_left_alt_sep = ''
let g:airline_right_sep = ''
let g:airline_right_alt_sep = ''
let g:airline_symbols.branch = ''
let g:airline_symbols.readonly = ''
let g:airline_symbols.linenr = ''


function InsertPythonComment()
    exe 'normal'.1.'G'
    let line = getline('.')
    if line =~ '^#!.*$' || line =~ '^#.*coding:.*$'
        return
    endif
    normal O
    call setline('.', '#!/usr/bin/env python')
    normal o
    call setline('.', '# -*- coding:utf-8 -*-')
    normal o
    call setline('.', '')
    normal o
    call setline('.', '# Author: '.g:python_author)
    normal o
    call setline('.', '# E-mail: '.g:python_email)
    normal o
    call setline('.', '# Date  : '.strftime("%y-%m-%d %H:%M:%S"))
    normal o
    call setline('.', '# Desc  : ')
    normal o
    call setline('.', '')
    normal o
    call cursor(7, 17)
endfunction
function InsertCommentWhenOpen()
    if a:lastline == 1 && !getline('.')
        call InsertPythonComment()
    end
endfunc


let g:python_author = 'zhibo.wang'
let g:python_email  = 'gm.zhibo.wang@gmail.com'

" 新文件设置标题并转到行尾
autocmd BufNewFile,BufRead *.sh,*.py,*.rb exec ":call SetTitle()"
function SetTitle()
    if &filetype == 'sh'
        call setline(1,"\#!/bin/bash")
        call append(line("."), "")

    elseif &filetype == 'python'
        au FileType python :%call InsertCommentWhenOpen()

    elseif &filetype == 'ruby'
        call setline(1,"#!/usr/bin/env ruby")
        call append(line("."),"# encoding: utf-8")
        call append(line(".")+1, "")
    endif
endfunction
autocmd BufNewFile * normal G


set colorcolumn=80


" Vim-jsx ------------------------------

" 如果你在 .js 文件中使用 JSX 语法,请启用它。
let g:jsx_ext_required = 0

" Vim-markdown ------------------------------

" 禁用自动折叠
let g:vim_markdown_folding_disabled=1
" LaTeX 数学
let g:vim_markdown_math=1
" 高亮 YAML 元数据
let g:vim_markdown_frontmatter=1

" Vim-instant-markdown -----------------

" 如果它占用你的系统资源太多,你可以指定
" let g:instant_markdown_slow = 1
" 如果你不想手动控制它
" 你可以打开这个设置
" 当你打开这个时,你可以通过命令 :InstantMarkdownPreview 手动触发预览
let g:instant_markdown_autostart = 0

 

posted @ 2025-04-30 09:56  🐳.城南  阅读(24)  评论(0)    收藏  举报