vimrc
Version:
973 lines (762 loc) • 41.1 kB
Plain Text
" ------------------------------------------------------------------------------------------------------------------------------
" 依赖:
" ------------------------------------------------------------------------------------------------------------------------------
" tags:
" brew install ctags
" js:
" npm install -g git+https://github.com/ramitos/jsctags.git
" ts:
" npm install --global git+https://github.com/Perlence/tstags.git
" ------------------------------------------------------------------------------------------------------------------------------
" YCM:
" cd ~/.vim/bundle/YouCompleteMe/
" ./install.py --all
" ------------------------------------------------------------------------------------------------------------------------------
" ack.vim
" require ag
" mac: brew install the_silver_searcher
" or
" ubuntu: apt-get install silversearcher-ag
" ------------------------------------------------------------------------------------------------------------------------------
" dash
" http://xclient.info/s/dash.html?_=4e3cdc67aaa43723cc2ef97687b967eb
" ------------------------------------------------------------------------------------------------------------------------------
" ale
" npm i -g htmlhint stylelint eslint tslint alex
" ------------------------------------------------------------------------------------------------------------------------------
" tsuquyomi
" require ^typescript@2.8.0
" npm i -g typescript@2.8.0
" ------------------------------------------------------------------------------------------------------------------------------
" ------------------------------------------------------------------------------------------------------------------------------
" 快捷键配置 mapping
" ------------------------------------------------------------------------------------------------------------------------------
" 屏幕控制
" <C-e> 屏幕向下移动一行
" <C-y> 屏幕向上移动一行
" <C-d> 向下移动半屏
" <C-f> 向下移动一屏
" <C-b> 向上移动一屏
" <C-u> 向上移动半屏
" z- 将光标所在行移到屏幕底部
" z. 将光标所在行移到屏幕中间
" z<CR> 将光标所在行移到屏幕顶部
" 光标控制
" h j k l 左下上右
" 0 ^ $ 行首,非空白符行首,行末
" - + 上一行第一个字符,下一行第一个字符
" H M L 屏首,屏中,屏尾(保持列位置不变)
" w e b 下一个单词第一个字符,下一个单词最后一个字符,上一个单词第一个字符
" ( ) { } 上/下句首尾(无任何字符空行分隔),上/下段行(无字符空行)
" % 匹配括号移动
" `` '' 上一个位置
" m. `. 标记、跳转(.指的一个字符)
" n<CR> 向下跳转n行
" :n<CR> nG 跳转到n行
" 1G gg :0<CR> 文件第一行
" G :$<CR> 文件最后一行
" javascript
" <C-]> 转到定义
" <Leader>et 打印变量类型
" <Leader>lr 列出变量引用
" <Leader>pd 弹出文档
" <Leader>rn 重命名变量
" typescript
" <Leader>rn 重命名变量
" <Leader>rN 重命名变量,包括注释内的变量名
" <Leader>lr 列出变量引用
" <Leader>li 列出变量引用所在的文件
" <C-]> 跳转到变量定义
" <Leader>jd 跳转到变量类型定义
" <Leader>sa 搜索变量名
" <Leader>i 自动导入
" <Leader>et 打印变量类型
" markdown
" F8 打开预览
" F9 关闭预览
" default
" <C-o> 上次光标所在位置
" jump
" <C-o> 跳转到上次编辑
" buffer
" <C-^> 切换当前缓冲区和上一个缓冲区
" <C-w> 关闭当前缓冲区
" :ls 列出所有缓冲区
" :b *.scss<Tab> 模糊搜索tab
" <Leader>bh 水平分屏
" <Leader>bv 垂直分屏
" nerdcommenter
" [number]<leader>cc 注释
" [number]<leader>cu 取消注释
" [number]<leader>c<space> toggle注释
" [number]<leader>cI 在行末尾添加注释
" [number]<leader>ca 切换注释
"
" Emmet
" Emmet快捷键<c-y>/可以注释当前HTML Tag,把它映射成更通用的注释快捷键Ctrl+/
" Emmet 中有用的快捷键还有:
" <c-y>,: 展开Emmet
" <c-y>n:到下一个编辑点
" <c-y>N:到上一个编辑点
" <c-y>d:选中整个标签
" <c-y>D:选中整个标签的内容
" <c-y>k:删除当前标签
" 辅助控制
" <Leader>d 打开dash
" 选择文本
" + 扩展选择
" - 收缩选择
" 显示额外信息
" <Leader>st tag side bar
" <Leader>su undo sidebar
" Git
" Gitv log 可视化
" Agit 查看单个文件的提交历史
" Gdiff, Glog, Gstatus
" lint
" <Leader>lk 跳转到上一个错误行
" <Leader>lj 跳转到下一个错误行
" fzf
" <C-p> 搜索当前pwd文件夹内的文件
" map
" mapc
" mapc!
let mapleader=" " " 设置leader键
" buffer 通过索引快速跳转
nnoremap <C-w> :bdelete<CR>
" nnoremap <Leader>bd :bdelete<CR>
nnoremap <Leader>[ :bp<CR>
nnoremap <Leader>] :bn<CR>
nnoremap <Leader><Left> :bp<CR>
nnoremap <Leader><Right> :bn<CR>
nnoremap <Leader>1 :1b<CR>
nnoremap <Leader>2 :2b<CR>
nnoremap <Leader>3 :3b<CR>
nnoremap <Leader>4 :4b<CR>
nnoremap <Leader>5 :5b<CR>
nnoremap <Leader>6 :6b<CR>
nnoremap <Leader>7 :7b<CR>
nnoremap <Leader>8 :8b<CR>
nnoremap <Leader>9 :9b<CR>
nnoremap <Leader>0 :10b<CR>
nnoremap <Leader>11 :11b<CR>
nnoremap <Leader>12 :12b<CR>
nnoremap <Leader>13 :13b<CR>
nnoremap <Leader>14 :14b<CR>
nnoremap <Leader>15 :15b<CR>
nnoremap <Leader>16 :16b<CR>
nnoremap <Leader>17 :17b<CR>
nnoremap <Leader>18 :18b<CR>
nnoremap <Leader>19 :19b<CR>
nnoremap <Leader>10 :20b<CR>
nnoremap <Leader>bh :sp
nnoremap <Leader>bv :vertical sb
nnoremap <F4> :exec exists('syntax_on') ? 'syn off': 'syn on'<CR>
inoremap <special> jk <ESC>
" ------------------------------------------------------------------------------------------------------------------------------
" vim configuration
" ------------------------------------------------------------------------------------------------------------------------------
" environment
set nocompatible " 去掉有关vi一致性模式,避免以前版本的bug和局限
set nobackup " 禁用临时文件
set noswapfile " 禁用生成swap文件
set history=200 " 设置历史记录条数(:, search)
set autoread " 文件在外部被修改时自动加载
au CursorHold * checktime " 设置自动加载时机
" don't beep
set novisualbell
set noerrorbells
set tm=300 " 设置命令超时时间
set lazyredraw " 在执行宏命令时,不进行显示重绘;在宏命令执行完成后,一次性重绘,以便提高性能
set ttyfast " Indicates a fast terminal connection
" display
set title " change the terminal's title
set showcmd " 将输入的命令显示出来,便于查看当前输入的信息
" set cursorcolumn " 列高亮显示
" set cursorline " 行高亮显示
set nocursorline " 禁用行高亮显示
set nocursorcolumn " 禁用列高亮显示
" 如果使用screen也需要开256色
" $ vim ~/.screenrc
" $ termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
set t_Co=256 " 让vim支持256色
set list " 显示特殊字符
set listchars=tab:>-,trail:-,extends:#,nbsp:~,precedes:< " 显示tab,空格,末尾空格
set number " 显示绝对行号
set relativenumber " 显示相对行号
autocmd InsertEnter * :set norelativenumber " no relativenumber in insert mode
autocmd InsertLeave * :set relativenumber " show relativenumber when leave insert mode
" syntax highlight
set synmaxcol=200 " 代码语法高亮的列数,超过200列不再语法高亮
syntax sync minlines=256 " 修复语法突出问题 controls how Vim synchronizes the syntax state that should apply at a particular point in the text
" syntax on " 代码语法高亮 will overrule settings with the defaults
syntax enable " 代码语法高亮 will keep current color settings.
" edit
filetype plugin indent on " 检测文件的类型,相当于执行filetype on, filetype plugin on, filetype indent on http://easwy.com/blog/archives/advanced-vim-skills-filetype-on/
set scrolljump=10
set nostartofline " keep cursor postion when switching between buffers
set foldmethod=indent " 代码折叠
set foldlevelstart=99 " 设置打开文件默认不折叠代码
setlocal foldlevel=4 " 设置折叠层数为
set showmatch " 插入右括号时会短暂地跳转到匹配的左括号
" set nowrap " disable wrap
set autoindent " 设置自动对齐
set smartindent " 依据上面的对齐格式,智能的选择对齐方式,对于类似C语言编写上有用
" set cindent " 自动缩进,适合js
autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o " 取消自动注释
" File encode:encode for varied filetype
set helplang=zh
set encoding=utf-8
set fileencodings=utf-8,ucs-bom,cp936,gb18030,big5,euc-jp,euc-kr,latin1
set termencoding=utf-8
" 设置tab为4个空格
set shiftwidth=2 " 设置自动对齐tab为4个空格
set ts=2 " 设置tab键为四个空格
set softtabstop=2 " 在按退格键时,如果前面有4个空格,则会统一清除
set expandtab " 设置tab为空格
retab " 转换所有的tab
set hidden " 设置不需要保存就可以切换buffer
" search
set ignorecase " 设置搜索时忽略大小写
" set hlsearch " 高亮显示搜索匹配到的字符串
set incsearch " 在程序中查询一单词,自动匹配单词的位置
set backspace=2 " 设置退格键可用
set backspace=indent,eol,start " 让backspace能够删除特定字符
" buffer
set wildmenu wildmode=full " 设置显示buffer匹配结果
" clipboard
set clipboard=unnamed " 系统剪切板
set pastetoggle=<F9> " 切换到拷贝模式
" filetype
au BufRead,BufNewFile *.wxml set filetype=xml
" 设置自动备份
" if has("vms")
" set nobackup
" else
" set backup
" endif
" ------------------------------------------------------------------------------------------------------------------------------
" Plug Configuration
" ------------------------------------------------------------------------------------------------------------------------------
if empty(glob('~/.vim/autoload/plug.vim'))
silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
\ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif
call plug#begin('~/.vim/bundle')
Plug 'VundleVim/Vundle.vim' " let Vundle manage Vundle, required
" nerdtree
Plug 'scrooloose/nerdtree' " 目录结构
Plug 'Xuyuanp/nerdtree-git-plugin' " 基于nerd的git文件管理
Plug 'scrooloose/nerdcommenter' " 注释
" IDE
Plug 'bling/vim-airline' " 增强状态栏
Plug 'vim-airline/vim-airline-themes' " airline theme | no config
Plug 'junegunn/limelight.vim' " 关灯
Plug 'sjl/vitality.vim' " 修改在不同模式下光标的显示方式 | no config
Plug 'godlygeek/tabular' " 对齐
Plug 'tomasr/molokai' " 颜色主题
Plug 'mhinz/vim-startify' " 启动显示页
Plug 'editorconfig/editorconfig-vim' " editconfig
" 异步
Plug 'Shougo/vimproc.vim', {'do' : 'make'} " 异步执行 | no config
" 代码辅助
Plug 'Yggdroot/indentLine' " 显示垂直对齐
Plug 'tpope/vim-fugitive' " git可视化
Plug 'airblade/vim-gitgutter' " 文件编辑时的git提示 | no config
Plug 'gregsexton/gitv' " git树形结构 | no config
Plug 'cohama/agit.vim' " 单个文件可视化 | no config
Plug 'Raimondi/delimitMate' " 用于补全括号和引号 | no config
Plug 'Valloric/YouCompleteMe', {'do': './install.py --js-completer'} " 代码自动补全
" Plug 'Valloric/YouCompleteMe', {'do': './install.py --all'} " 代码自动补全
Plug 'ternjs/tern_for_vim' " javascript代码补全
Plug 'w0rp/ale' " 语法检查,异步处理,速度更快,代替syntastic
Plug 'FooSoft/vim-argwrap' " 参数一行变多行
Plug 'majutsushi/tagbar' " Tag
Plug 'MattesGroeger/vim-bookmarks' " Bookmarks
Plug 'wakatime/vim-wakatime' " 编程时间消耗
Plug 'rizzatti/dash.vim' " dash
Plug 'terryma/vim-expand-region' " visual模式下的expand选择
" 搜索
Plug 'junegunn/fzf', { 'do': './install --all' } " 文件搜索,代替ctrlp.vim
Plug 'vim-scripts/matchit.zip' " 允许:%s使用正则匹配 | no config
Plug 'Lokaltog/vim-easymotion' " 高级搜索
Plug 'unblevable/quick-scope' " 单词匹配
Plug 'mileszs/ack.vim' " 全局搜索
" 编辑
Plug 'terryma/vim-multiple-cursors' " 多行编辑
Plug 'christoomey/vim-sort-motion' " 排序 | no config
Plug 'tpope/vim-repeat' " 重复命令 | no config
Plug 'tpope/vim-surround' " 包围文本 | no config
Plug 'vim-scripts/undotree.vim' " undo列表
" html
Plug 'mattn/emmet-vim' " Emmet
Plug 'Valloric/MatchTagAlways' " html tag配对显示 | no config
" javascript
Plug 'Chiel92/vim-autoformat', {'on': 'Autoformat'} " 自动格式化
" Plug 'pangloss/vim-javascript' " 对齐,语法 | bad performance
Plug 'othree/yajs.vim' " es语法高亮
Plug 'othree/es.next.syntax.vim' " es语法高亮
Plug 'othree/javascript-libraries-syntax.vim' " js库语法
Plug 'mxw/vim-jsx' " jsx对齐,语法高亮
" typescript
Plug 'leafgarland/typescript-vim' " ts highlight
Plug 'Quramy/vim-js-pretty-template' " provides syntax highlight for contents in Template Strings | no config
Plug 'quramy/tsuquyomi' " typescript
" Plug 'clausreinke/typescript-tools.vim', { 'do': 'npm install' } " ts tool
" json
Plug 'elzr/vim-json' " json语法高亮
" css
Plug 'gko/vim-coloresque' " 显示颜色 | no config
" md
Plug 'plasticboy/vim-markdown' " markdown
Plug 'iamcco/markdown-preview.vim' " markdown preview
" snippet
Plug 'SirVer/ultisnips'
Plug 'lovesora/vim-snippets'
call plug#end()
" 常用命令
" PlugInstall [name ...] [#threads] Install plugins
" PlugUpdate [name ...] [#threads] Install or update plugins
" PlugClean[!] Remove unused directories (bang version will clean without prompt)
" PlugUpgrade Upgrade vim-plug itself
" PlugStatus Check the status of plugins
" PlugDiff Examine changes from the previous update and the pending changes
" ------------------------------------------------------------------------------------------------------------------------------
" nerdtree
" ------------------------------------------------------------------------------------------------------------------------------
" 将 NERDTree 的窗口设置在 vim 窗口的右侧(默认为左侧)
let NERDTreeWinPos="right"
let NERDTreeWinSize=50
" 当打开 NERDTree 窗口时,自动显示 Bookmarks
let NERDTreeShowBookmarks=1
" 显示行号
let NERDTreeShowLineNumbers=1
" 是否显示隐藏文件
let NERDTreeShowHidden=1
" 关闭vim时,如果打开的文件除了NERDTree没有其他文件时,它自动关闭,减少多次按:q!
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") &&b:NERDTreeType == "primary") | q | endif
" vim打开文件时自动打开pwd文件夹目录树
" autocmd vimenter * NERDTree
" 设置bookmark
" let g:NERDTreeBookmarksFile='~/.NERDTreeBookmarks'
" map
noremap <leader>ww <C-w>w " 切换窗口
noremap <leader>wh <C-w>h " 向左切换窗口
noremap <leader>wj <C-w>j " 向下切换窗口
noremap <leader>wk <C-w>k " 向上切换窗口
noremap <leader>wl <C-w>l " 向右切换窗口
noremap <leader>wr <C-w>r " 移动窗口
noremap <leader>wc :tabc<CR> " 关闭tab窗口
map <leader>we :NERDTreeToggle<CR> " F2 切换nerdtree
map <leader>wa :NERDTreeFind<CR> " 定位到当前活动的文本
map <leader>+ :vertical resize +10<CR>
map <leader>- :vertical resize -10<CR>
map <leader>w+ :resize +10<CR>
map <leader>w- :resize -10<CR>
map <leader>ws :vertical resize 50<CR>
map [[ gT
map ]] gt
" ------------------------------------------------------------------------------------------------------------------------------
" nerd tree git
" ------------------------------------------------------------------------------------------------------------------------------
let g:NERDTreeIndicatorMapCustom = {
\ "Modified" : "✹",
\ "Staged" : "✚",
\ "Untracked" : "✭",
\ "Renamed" : "➜",
\ "Unmerged" : "═",
\ "Deleted" : "✖",
\ "Dirty" : "✗",
\ "Clean" : "✔︎",
\ "Unknown" : "?"
\ }
" ------------------------------------------------------------------------------------------------------------------------------
" nerdcommenter
" ------------------------------------------------------------------------------------------------------------------------------
" 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
" map
map <C-_> <plug>NERDCommenterToggle
imap <C-_> <Esc><plug>NERDCommenterToggle
" ------------------------------------------------------------------------------------------------------------------------------
" airline
" ------------------------------------------------------------------------------------------------------------------------------
let g:airline_powerline_fonts = 1
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#formatter = 'unique_tail'
let g:airline#extensions#tabline#buffer_nr_show = 1
" ------------------------------------------------------------------------------------------------------------------------------
" tabularize
" ------------------------------------------------------------------------------------------------------------------------------
nmap <Leader>a= :Tabularize /=<CR>
vmap <Leader>a= :Tabularize /=<CR>
nmap <Leader>a: :Tabularize /:\zs<CR>
vmap <Leader>a: :Tabularize /:\zs<CR>
" ------------------------------------------------------------------------------------------------------------------------------
" theme
" ------------------------------------------------------------------------------------------------------------------------------
colorscheme molokai
" ------------------------------------------------------------------------------------------------------------------------------
" vim-startify
" ------------------------------------------------------------------------------------------------------------------------------
let g:startify_change_to_vcs_root = 1
nnoremap <Leader>o :Startify<CR>
" ------------------------------------------------------------------------------------------------------------------------------
" indentLine
" ------------------------------------------------------------------------------------------------------------------------------
let g:indentLine_enabled = 1 " 启用indentLine
let g:indentLine_char = '|' " 修改显示字符
" let g:indentLine_setColors = '#eee' " 设置字符颜色
" ------------------------------------------------------------------------------------------------------------------------------
" YCM
" type ./ to have filepath completers
" ------------------------------------------------------------------------------------------------------------------------------
let g:ycm_global_ycm_extra_conf='~/.ycm_extra_conf.py'
let g:ycm_python_binary_path = '/usr/bin/python2.7'
" nmap<C-a> :YcmCompleter FixIt<CR>
"
set completeopt=longest,menu " 让Vim的补全菜单行为与一般IDE一致(参考VimTip1228)
autocmd InsertLeave * if pumvisible() == 0|pclose|endif " 离开插入模式后自动关闭预览窗口
let g:ycm_filetype_blacklist = {} " 清除黑名单
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 " 语法关键字补全
"在注释输入中也能补全
let g:ycm_complete_in_comments = 1
"在字符串输入中也能补全
let g:ycm_complete_in_strings = 1
"注释和字符串中的文字也会被收入补全
let g:ycm_collect_identifiers_from_comments_and_strings = 0
" if !exists("g:ycm_semantic_triggers")
" let g:ycm_semantic_triggers = {}
" endif
" let g:ycm_semantic_triggers['typescript'] = ['.']
" nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR> " 跳转到定义处
let g:ycm_key_list_select_completion = ['<C-j>', '<Down>']
let g:ycm_key_list_previous_completion = ['<C-k>', '<Up>']
" ------------------------------------------------------------------------------------------------------------------------------
" tern_for_vim
" ------------------------------------------------------------------------------------------------------------------------------
let tern_show_signature_in_pum = 1
let tern_show_argument_hints = 'on_hold'
autocmd FileType javascript setlocal omnifunc=tern#Complete
" set omnifunc=syntaxcomplete#Complete
" autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
" map
autocmd FileType javascript nnoremap <C-]> :TernDef<CR>
autocmd FileType javascript nnoremap <Leader>et :TernType<CR>
autocmd FileType javascript nnoremap <Leader>lr :TernRefs<CR>
autocmd FileType javascript nnoremap <Leader>pd :TernDoc<CR>
autocmd FileType javascript nnoremap <Leader>rn :TernRename<CR>
" ------------------------------------------------------------------------------------------------------------------------------
" w0rp/ale
" :ALEDetail 查看详情
" ------------------------------------------------------------------------------------------------------------------------------
let g:ale_fixers = {
\ 'javascript': ['eslint'],
\ 'typescript': ['tslint'],
\ 'scss': ['stylelint']
\}
let g:ale_linters = {
\ 'html': ['htmlhint'],
\ 'typescript': ['tslint'],
\ 'markdown': ['alex']
\}
let g:ale_completion_enabled = 1
let g:ale_fix_on_save = 1
let g:airline#extensions#ale#enabled = 1
nmap <silent> <Leader>nk <Plug>(ale_previous_wrap)
nmap <silent> <Leader>nj <Plug>(ale_next_wrap)
" ------------------------------------------------------------------------------------------------------------------------------
" argwrap
" ------------------------------------------------------------------------------------------------------------------------------
nnoremap <silent> <leader>a :ArgWrap<CR> " 将参数从一行转为多行
" ------------------------------------------------------------------------------------------------------------------------------
" tagbar
" require ctags, jsctags
" brew install ctags
" npm install -g git+https://github.com/ramitos/jsctags.git
" ------------------------------------------------------------------------------------------------------------------------------
set tags=./tags,tags; " 设置tags文件
let g:tagbar_type_javascript = {
\ 'ctagsbin' : 'jsctags'
\ }
let g:tagbar_type_css = {
\ 'ctagstype' : 'Css',
\ 'kinds' : [
\ 'c:classes',
\ 's:selectors',
\ 'i:identities'
\ ]
\ }
let g:tagbar_type_typescript = {
\ 'ctagsbin' : 'tstags',
\ 'ctagsargs' : '-f-',
\ 'kinds': [
\ 'e:enums:0:1',
\ 'f:function:0:1',
\ 't:typealias:0:1',
\ 'M:Module:0:1',
\ 'I:import:0:1',
\ 'i:interface:0:1',
\ 'C:class:0:1',
\ 'm:method:0:1',
\ 'p:property:0:1',
\ 'v:variable:0:1',
\ 'c:const:0:1',
\ ],
\ 'sort' : 0
\ }
let g:tagbar_show_linenumbers = 1 " 设置显示绝对行号
let g:tagbar_indent = 2 " tagbar缩进大小
let g:tagbar_sort = 0 " 设置tag的排序,默认字符排序,设置0以代码中的位置排序
let g:tagbar_left = 1 " 设置tagbar打开时的位置
let g:tagbar_autofocus = 1 " 当tagbar打开时自动对焦到tagbar
let g:tagbar_width = 40 " 设置tagbar默认宽度
nnoremap <Leader>st :TagbarToggle<CR>
" ------------------------------------------------------------------------------------------------------------------------------
" Bookmarks
" ------------------------------------------------------------------------------------------------------------------------------
let g:bookmark_save_per_working_dir = 1
let g:bookmark_auto_save = 1
let g:bookmark_no_default_key_mappings = 1
" map
let g:bookmark_no_default_key_mappings = 1
function! BookmarkMapKeys()
nmap mm <Plug>BookmarkToggle
nmap mi <Plug>BookmarkAnnotate
nmap ma <Plug>BookmarkShowAll
nmap mj <Plug>BookmarkNext
nmap mk <Plug>BookmarkPrev
nmap mc <Plug>BookmarkClear
nmap mx <Plug>BookmarkClearAll
nmap mkk <Plug>BookmarkMoveUp
nmap mjj <Plug>BookmarkMoveDown
endfunction
function! BookmarkUnmapKeys()
unmap mm
unmap mi
unmap ma
unmap mj
unmap mk
unmap mc
unmap mx
unmap mkk
unmap mjj
endfunction
autocmd BufEnter * :call BookmarkMapKeys()
autocmd BufEnter NERD_tree_* :call BookmarkUnmapKeys()
" ------------------------------------------------------------------------------------------------------------------------------
" dash.vim
" ------------------------------------------------------------------------------------------------------------------------------
nmap <silent> <leader>d <Plug>DashSearch
" ------------------------------------------------------------------------------------------------------------------------------
" fzf
" ------------------------------------------------------------------------------------------------------------------------------
" An action can be a reference to a function that processes selected lines
function! s:build_quickfix_list(lines)
call setqflist(map(copy(a:lines), '{ "filename": v:val }'))
copen
cc
endfunction
let g:fzf_action = {
\ 'ctrl-q': function('s:build_quickfix_list'),
\ 'ctrl-t': 'tab split',
\ 'ctrl-x': 'split',
\ 'ctrl-v': 'vsplit' }
" 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 = '~/.local/share/fzf-history'
" map
" in search mode
" <C-p> previous history
" <C-n> next history
" in normal mode
nnoremap <C-p> :FZF<CR>
" ------------------------------------------------------------------------------------------------------------------------------
" easymotion
" ------------------------------------------------------------------------------------------------------------------------------
let g:EasyMotion_smartcase = 1 " 忽略大小写
map sl <Plug>(easymotion-lineforward)
map sj <Plug>(easymotion-j)
map sk <Plug>(easymotion-k)
map sh <Plug>(easymotion-linebackward)
vmap sl <Plug>(easymotion-lineforward)
vmap sj <Plug>(easymotion-j)
vmap sk <Plug>(easymotion-k)
vmap sh <Plug>(easymotion-linebackward)
map / <Plug>(easymotion-sn)
omap / <Plug>(easymotion-tn)
" ------------------------------------------------------------------------------------------------------------------------------
" quick-scope
" ------------------------------------------------------------------------------------------------------------------------------
" let g:qs_highlight_on_keys = ['f', 'F']
let g:qs_highlight_on_keys = ['f', 'F', 't', 'T']
" ------------------------------------------------------------------------------------------------------------------------------
" ack.vim
" require ag
" mac: brew install the_silver_searcher
" or
" ubuntu: apt-get install silversearcher-ag
" .ackrc
" --ignore-dir=node_modules
" --ignore-dir=refactor
" ------------------------------------------------------------------------------------------------------------------------------
let g:ackprg = 'ag --nogroup --nocolor --column'
" nnoremap <leader>sa :Ack<space>
function! Search(string)
set shellpipe=>
execute "Ack! \"" . a:string . "\""
set shellpipe=2>&1\|tee
endfunction
nnoremap <Leader>f :call Search("")<left><left>
" ------------------------------------------------------------------------------------------------------------------------------
" terryma/vim-multiple-cursors
" ------------------------------------------------------------------------------------------------------------------------------
" Default mapping
let g:multi_cursor_next_key='<C-n>' " 下一个匹配
let g:multi_cursor_prev_key='<C-m>' " 上一个匹配
let g:multi_cursor_skip_key='<C-x>' " 跳过这个匹配
let g:multi_cursor_quit_key='<Esc>' " 退出多行编辑模式
" ------------------------------------------------------------------------------------------------------------------------------
" undotree.vim
" ------------------------------------------------------------------------------------------------------------------------------
let g:undotree_SetFocusWhenToggle = 1
" Default mapping
nnoremap <Leader>su :UndotreeToggle<CR> " 弹出undo列表
" ------------------------------------------------------------------------------------------------------------------------------
" Emmet vim
" ------------------------------------------------------------------------------------------------------------------------------
" 注释
" autocmd filetype *html* imap <c-_> <c-y>/
" 注释
" autocmd filetype *html* map <c-_> <c-y>/
" 展开
" autocmd filetype *html* map <Tab> <c-y>,
" 展开
" autocmd filetype *html* imap <Tab> <c-y>,
" imap <Tab> <Esc>:echo 'echo'<CR>i
noremap <Tab> :call ExpandEmmetInHtml()<CR>i
function ExpandEmmetInHtml()
if (getline(".")[col(".")-1] != ' ')
execute "normal \<Plug>(emmet-expand-abbr)"
else
execute "normal i\<Tab>\<Esc>"
endif
endfunction
" ------------------------------------------------------------------------------------------------------------------------------
" vim-autoformat
" require: npm install -g js-beautify
" ------------------------------------------------------------------------------------------------------------------------------
autocmd FileType typescript,javascript,json,html,css,scss noremap <buffer> <leader><leader>f :Autoformat<cr>
" ------------------------------------------------------------------------------------------------------------------------------
" othree/javascript-libraries-syntax.vim
"-------------------------------------------------------------------------------------------------------------------------------
autocmd BufReadPre *.js let b:javascript_lib_use_underscore = 1
autocmd BufReadPre *.js let b:javascript_lib_use_angularjs = 1
autocmd BufReadPre *.js let b:javascript_lib_use_angularui = 1
autocmd BufReadPre *.js let b:javascript_lib_use_angularuirouter = 1
autocmd BufReadPre *.js let b:javascript_lib_use_react = 1
autocmd BufReadPre *.js let b:javascript_lib_use_requirejs = 1
autocmd BufReadPre *.js let b:javascript_lib_use_jquery = 1
autocmd BufReadPre *.js let b:javascript_lib_use_backbone = 1
" ------------------------------------------------------------------------------------------------------------------------------
" mxw/vim-jsx
" ------------------------------------------------------------------------------------------------------------------------------
let g:jsx_ext_required = 0
" ------------------------------------------------------------------------------------------------------------------------------
" typescript
" ------------------------------------------------------------------------------------------------------------------------------
" quramy/tsuquyomi
" tsserver configuration
let g:tsuquyomi_use_local_typescript = 0
" let g:tsuquyomi_use_dev_node_module = 2
" let g:tsuquyomi_tsserver_path = '/usr/local/lib/node_modules/typescript/lib/tsserver.js'
" 禁用错误检测, 保存时会很卡
let g:tsuquyomi_disable_quickfix = 1
let g:tsuquyomi_disable_default_mappings = 1
let g:tsuquyomi_single_quote_import = 1
let g:tsuquyomi_shortest_import_path = 1
" let g:tsuquyomi_definition_split = 2
let g:tsuquyomi_use_vimproc = 1
autocmd FileType typescript nmap <buffer> <Leader>rn <Plug>(TsuquyomiRenameSymbol)
autocmd FileType typescript nmap <buffer> <Leader>rN <Plug>(TsuquyomiRenameSymbolC)
autocmd FileType typescript nmap <buffer> <Leader>lr <Plug>(TsuquyomiReferences)
autocmd FileType typescript nmap <buffer> <Leader>li <Plug>(TsuquyomiImplementation)
autocmd FileType typescript nmap <buffer> <C-]> <Plug>(TsuquyomiDefinition)
autocmd FileType typescript nmap <buffer> <Leader>jd <Plug>(TsuquyomiTypeDefinition)
autocmd FileType typescript nmap <buffer> <Leader>sa :TsuSearch
autocmd FileType typescript nmap <buffer> <Leader>i :TsuImport<CR>
autocmd FileType typescript nmap <buffer> <Leader>et :echo tsuquyomi#hint()<CR>
" ------------------------------------------------------------------------------------------------------------------------------
" vim-json
" ------------------------------------------------------------------------------------------------------------------------------
let g:vim_json_syntax_conceal = 0
" ------------------------------------------------------------------------------------------------------------------------------
" vim-markdown
" ------------------------------------------------------------------------------------------------------------------------------
let g:vim_markdown_new_list_item_indent = 0
let g:vim_markdown_folding_disabled=1
let g:vim_markdown_no_default_key_mappings=1
let g:vim_markdown_frontmatter=1
let g:vim_markdown_conceal = 0
" ------------------------------------------------------------------------------------------------------------------------------
" vim-markdown preview
" ------------------------------------------------------------------------------------------------------------------------------
nmap <silent> <F8> <Plug>MarkdownPreview " for normal mode
imap <silent> <F8> <Plug>MarkdownPreview " for insert mode
nmap <silent> <F9> <Plug>StopMarkdownPreview " for normal mode
imap <silent> <F9> <Plug>StopMarkdownPreview " for insert mode
let g:mkdp_path_to_chrome = "/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome"
" ------------------------------------------------------------------------------------------------------------------------------
" ultisnips
" ------------------------------------------------------------------------------------------------------------------------------
" If you want :UltiSnipsEdit to split your window.
let g:UltiSnipsEditSplit="vertical"
let g:UltiSnipsSnippetDirectories=[$HOME.'/.vim/bundle/vim-snippets/UltiSnips']
" map
let g:UltiSnipsExpandTrigger="<Tab>"
let g:UltiSnipsJumpForwardTrigger="<C-l>"
let g:UltiSnipsJumpBackwardTrigger="<C-h>"
" ------------------------------------------------------------------------------------------------------------------------------
" Yank
" ------------------------------------------------------------------------------------------------------------------------------
" nnoremap <silent> <Leader>sy :YRShow<CR>
" ------------------------------------------------------------------------------------------------------------------------------
" MacVim
" ------------------------------------------------------------------------------------------------------------------------------
if has("gui_macvim")
set guifont=Source\ Code\ Pro\ for\ Powerline:h12
endif