vimrc备份

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-09 23:21:19
" 查询快捷键 :verbose map <key>
" 基本设置----------------{{{
" 不兼容vi模式 必须放在第一行
set nocompatible
" 开启语法高亮
syntax on
" 高亮当前行
set cursorline
" 开启搜索高亮
set incsearch
" 设定历史记录数
set history =50
" 设定为系统剪贴板
set clipboard=unnamedplus
" 消除~后缀备份文件
set nobackup
" 消除un后缀备份文件
set noundofile
" 显示行号
set number
" 高亮搜索项
set hlsearch
" 用空格代替tab键
" 设置tab宽度,为了符合google c++标准将4空格换位2空格节省横向空间
set tabstop=2
" 设置缩进宽度
set shiftwidth=2
" 用空格代替tab,问题:用空格代替tab会导致一些快捷键无法使用
" 可以尝试用 c-j/k 来选择
set expandtab
" 设置mapleader为逗号
let mapleader=","
" 设置编码
set encoding=utf-8
language messages zh_CN.utf-8
" 侧边栏常显示
set signcolumn=yes
"}}}


" 全局变量------------------{{{
let g:author="yszc"
" }}}

" 映射-------------------{{{
" 取消默认的删除剪切操作,此映射会导致删除卡顿
" nnoremap x "_x
" nnoremap X "_X
" nnoremap d "_d
" nnoremap dd "_dd
" nnoremap D "_D
" vnoremap d "_d
" vnoremap dd "_dd

" 将c-p映射为复制寄存器粘贴(用于特定的粘贴任务),默认粘贴为无名寄存器
nnoremap <c-p> "0p 

" tab切换
" C-W +j/k/l/h可以移动窗口光标,不用按多次w
" CTRL-A 是全选
nnoremap <c-a> ggvG
" 高亮开关
nnoremap <leader>hl :set hlsearch!<cr>
" 定义快速打开加载.vimrc和.vimrc.vundle文件
nnoremap <leader>ev :split $MYVIMRC<cr>
nnoremap <leader>sv :source $MYVIMRC<cr>
nnoremap <leader>ep :split $HOME/.vimrc.vundle<cr>
" nnoremap <c-e> :echo "hi"<cr>
" insert 模式括号匹配
" inoremap < <><esc>i
" inoremap [ []<esc>i
" inoremap { {}<esc>i
" inoremap ( ()<esc>i
" inoremap ' ''<esc>i
" inoremap " ""<esc>i

" c-j/k映射成翻页键
nnoremap <c-j> <c-d>
nnoremap <c-k> <c-u>
vnoremap <c-j> <c-d>
vnoremap <c-k> <c-u>

" c-,/.映射为tab翻页键
nnoremap <c-h> :tabp<cr>
nnoremap <c-l> :tabn<cr>

" H映射为0,L映射为$
nnoremap 0 <nop>
nnoremap $ <nop>
nnoremap H 0
nnoremap L $
vnoremap H 0
vnoremap L $
" 操作符号重映射
onoremap H 0
onoremap L $
" J/K向上/下移动一段?一页?还是easymotion
" insert模式下方向键
inoremap <c-h> <Left>
inoremap <c-l> <Right>
inoremap <c-j> <Down>
inoremap <c-k> <Up>
" 方向键习惯改掉
" nnoremap <Left> <nop>
" nnoremap <Up> <nop>
" nnoremap <Right> <nop>
" nnoremap <Down> <nop>
" inoremap <Left> <nop>
" inoremap <Up> <nop>
" inoremap <Right> <nop>
" inoremap <Down> <nop>
" 替换中文标点为英文标点
inoremap 。 .
inoremap , ,
inoremap ? ?
inoremap ! !
inoremap ‘ '
inoremap “ "
inoremap ” "
inoremap : :
inoremap ; ;
inoremap ( (
inoremap ) )
inoremap ¥ $
" insert模式jk代替<esc>
" 将inoremap模式下的<esc>映射为空导致了方向键和翻页键乱码的情况
nnoremap j gj
nnoremap k gk

inoremap jk <esc>
" cnoremap jk <c-c> 

" inoremap <esc> <nop>
" 快速保存,退出
nnoremap <c-s> :w<cr>
nnoremap <c-q> :q<cr>
" 不能映射normal模式下的esc键,因为方向键和翻页键的前缀是esc
" 这会导致在键入方向键或翻页键时退出,并且失灵
" nnoremap <esc> :q
"}}}

" 自动命令组----------------{{{
" 光标切换
augroup cursor_switch
  autocmd!
  au InsertLeave * silent exec "! echo -ne '\e[1 q'"
  au InsertEnter * silent exec "! echo -ne '\e[5 q'"
  au VimLeave * silent exec "! echo -ne '\e[5 q'"
  au VimEnter * silent exec "! echo -ne '\e[1 q'"
augroup END

augroup set_title
  autocmd!
  au BufNewFile *.py silent exec ":call SetTitle()"
augroup END

function! SetTitle()
  echo 'im here!'
  if &filetype=='python'
    call setline(1,"#!/usr/bin/env python3")
    call setline(2,"# -*- coding: utf-8 -*-")
    call setline(3,"# Author: yszc-wy@foxmail.com")
    call setline(4,"# Description: ")
    call setline(5,"")
  endif
endfunction

augroup cxx_exec
  " make\ \-C\ build\ &&\ ./build/main |
  au Filetype cpp set makeprg=cd\ build\ &&\ cmake\ ..\ &&\ make\ &&\ ./main |
                  noremap <F4> :call CXXCompile()<cr>
augroup END

function! CXXCompile()
  echom "CXX Compile"
  w 
  Make!
endfunction

augroup python_exec
  " 不能使用VimEnter事件,不然使用vim .后无法对后续打开的.py文件使用F4
  au Filetype python set makeprg=python\ % |
                     noremap <F4> :call PythonExec()<cr> |
                     
augroup END

function! PythonExec()
  echo "PythonExec"
  w
  Make!
  " 清屏
  " silent !clear
  " 执行python
  " execute '!python '.expand('%:p')
  " execute 'AsyncRun python %'
  " noremap后面的字符会被vim严格执行,一个按键映射两个命令可以使用两次命令行
  " silent exec nnoremap <F4> :w<cr> :!python .expand('%')."<cr>"
endfunction

function! MemoryProfile()
  echo "MemoryProfile"
  set makeprg=python\ -m\ memory_profile\ %
  Make!
  set makeprg=python\ %
endfunction

" }}}
" 定义leader
let mapleader=","

" 插件配置---------------{{{

" vundle------------------{{{
"加载vundle配置文件
source $HOME/.vimrc.vundle

" set autoindent
"}}}

" 主题字体----------------------------{{{
colorscheme gruvbox
set guifont=DejaVu\ Sans\ Mono:h13
set background=dark
" }}}

" airline----------------------{{{
set laststatus=2
" 使用powerline打过补丁的字体
let g:airline_powerline_fonts=1
if !exists('g:airline_symbols')
  let g:airline_symbols = {}
endif
let g:airline_symbols.space = "\ua0"
" }}}


" youcompleteme---------------{{{
" C语义补全
let g:ycm_global_ycm_extra_conf = '/home/yszc/.ycm_extra_conf.py'
" python语义补全
let g:ycm_python_binary_path = '/usr/bin/python3'
" ycmserver所使用的python解释器指定
" let g:ycm_server_python_interpreter = '/usr/bin/python'
" 停止提示是否载入本地ycm_extra_conf文件
let g:ycm_confirm_extra_conf = 0
" 语法关键字补全
let g:ycm_seed_identifiers_with_syntax = 1
" 开启 YCM 基于标签引擎
let g:ycm_collect_identifiers_from_tags_files = 1
" 从第2个键入字符就开始罗列匹配项
let g:ycm_min_num_of_chars_for_completion=2
" 在注释输入中也能补全
let g:ycm_complete_in_comments = 1
" 在字符串输入中也能补全
let g:ycm_complete_in_strings = 1
" 注释和字符串中的文字也会被收入补全
let g:ycm_collect_identifiers_from_comments_and_strings = 1
" 错误和警告符号
let g:ycm_error_symbol = 'N'
let g:ycm_warning_symbol = 'N'
" 关闭gutter框提示
set signcolumn=no
" 补全后自动关闭预览窗口
let g:ycm_autoclose_preview_window_after_completion=1
" 打开错误和警告表
noremap <F3> : YcmDiags<CR>
" GoTo映射
nnoremap <leader>g :YcmCompleter GoToDefinitionElseDeclaration<cr>
" 选择和补全
let g:ycm_key_list_select_completion = ['<tab>']
let g:ycm_key_list_previous_completion = ['<s-tab>']
" 关闭ycm语法检查,改用ale进行语法检查
let g:ycm_enable_diagnostic_signs = 0
let g:ycm_enable_diagnostic_highlighting=0
"}}}

" ale-------------{{{
"始终开启标志列
let g:ale_sig_column_always = 0
let g:ale_set_highlights = 1

let g:ale_sign_error = "✘"
let g:ale_sign_warning = "►"

"只有保存时才进行语法检测
let g:ale_lint_on_text_changed = "never"
let g:ale_lint_on_insert_leave = 0
let g:ale_lint_on_enter = 1

let g:ale_linters = {
                        \'c':['clang'],
                        \'c++':['clang'],
                        \'Python':['flake8'],
                        \}
" 关闭补全交给ycm
let g:ale_completion_enabled=0

"显示linter名称,出错或警告等相关信息
let g:ale_echo_msg_error_str = "✘"
let g:ale_echo_msg_warning_str = "►"
let g:ale_echo_msg_format = '[%linter%] %s [%serverity%]'
" Set this. Airline will handle the rest.
let g:airline#extensions#ale#enabled = 1
" 错误跳转
nnoremap <c-m> :ALEPreviousWrap<cr>
nnoremap <c-n> :ALENextWrap<cr>
" }}}

" nerdtree_tabs_git-------------------{{{
" q是退出
" F1触发
nnoremap <F1> :NERDTreeTabsToggle<cr>
inoremap <F1> <esc>:NERDTreeTabsToggle<cr>
" 设置nerdtree git符号
let g:NERDTreeIndicatorMapCustom = {
    \ "Modified"  : "✹",
    \ "Staged"    : "✚",
    \ "Untracked" : "✭",
    \ "Renamed"   : "➜",
    \ "Unmerged"  : "═",
    \ "Deleted"   : "✖",
    \ "Dirty"     : "✗",
    \ "Clean"     : "✔︎",
    \ 'Ignored'   : '☒',
    \ "Unknown"   : "?"
    \ }
" 打开文件时退出
" let g:NERDTreeQuitOnOpen = 1
" }}}

" tagbar-----------------------{{{
" tagbar的q是退出
" 设置触发按键
noremap <F2> : TagbarToggle<cr>
" 设置tagbar要使用的ctags路径
let g:tarbar_ctags_bin = '/usr/bin/ctags'
" 设置窗口宽度
let g:tarbar_width = 30
" 显示在窗口右边
let g:tarbar_right = 1
" 开启自动预览
let g:tagbar_autopreview = 1
" 光标自动切换到tagbar中
let g:tagbar_autoclose = 1
" }}}


" easymotion---------------{{{
" 将原本默认的双leader前缀换为单leader前缀
map <Leader> <Plug>(easymotion-prefix)
" 不能使用nnoremap代替nmap,映射会失效
nmap J <Plug>(easymotion-j)
nmap K <plug>(easymotion-k)
nmap W <Plug>(easymotion-w)
nmap B <Plug>(easymotion-b)

vmap J <Plug>(easymotion-j)
vmap K <plug>(easymotion-k)
vmap W <Plug>(easymotion-w)
vmap B <Plug>(easymotion-b)
" 该搜索有奇效
nmap F <Plug>(easymotion-f)
" }}}

" fzf-----------------------{{{
" esc是退出
" 要先保存再搜索
"双<Leader>f在当前目录搜索文件 
nnoremap <silent> f :w<CR>:Files<CR>
"双<Leader>b切换Buffer中的文件
nnoremap <silent> <Leader><Leader>b :w<CR>Buffers<CR>
"双<Leader>p在当前所有加载的Buffer中搜索包含目标词的所有行,:BLines只在当前Buffer中搜索
nnoremap <silent> <Leader><Leader>l :w<CR>Lines<CR>
"双<Leader>h在Vim打开的历史文件中搜索,相当于是在MRU中搜索,:History:命令历史查找
nnoremap <silent> <Leader><Leader>h :w<CR>History<CR>
"双<Leader>r利用ripgrep搜索当前文档中的行
nnoremap <silent> <Leader>r :w<CR>Rg<CR>
"调用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)


let g:fzf_action = {
  \ 'ctrl-l': 'tab split',
  \ 'ctrl-x': 'split',
  \ 'ctrl-v': 'vsplit' }

" }}}

" tmux-------------------------{{{
" tmux中vim主题错误
" set term=screen-256color
" }}}

" ultisnips-----------------{{{
" 指定snipper存储文件夹
let g:UltiSnipsSnippetDirectories=['UltiSnips']
" 此键默认为tab,会导致ycm混乱,一定要改,在insert模式下触发扩展操作
let g:UltiSnipsExpandTrigger="<c-e>"
" 展开可用snips表
" let g:UltiSnipsListSnippet="<c-i>"
" 只会在打开时映射下面的跳转键,应该不会影响之前的映射
let g:UltiSnipsJumpForwardTrigger="<c-j>"
let g:UltiSnipsJumpBackwardTrigger="<c-k>"
" 指定python版本,py2.7 或者 py3.6
let g:UltiSnipsUsePythonVersion = 3
" 编辑snips窗口以分割窗口打开,此操作会在当前目录创建UltiSnips文件夹并新建all....
let g:UltiSnipsEditSplit="vertical"

" 配置所需函数
fun! Vim_snippets_filename(...)
  let template = get(a:000, 0, "$1")
  let arg2 = get(a:000, 1, "")

  let basename = expand('%:t:r')

  if basename == ''
    return arg2
  else
    return substitute(template, '$1', basename, 'g')
  endif
endf

" }}}


" nerdcommenter-------------------{{{
" <leader>cc 紧贴当前行添加注释
" <leader>cb 紧贴左侧行添加注释
" <leader>cu 取消注释
" nmap <silent><leader>cc <plug>NERDComAlignedComment
" vmap <silent><leader>cc <plug>NERDComAlignedComment

" nmap <silent><leader>cc <plug>NERDComToggleComment
" vmap <silent><leader>cc <plug>NERDComToggleComment

" 注释自动添加空格
let g:NERDSpaceDelims=1
" python有特例
let g:NERDCustomDelimiters = {
     \ 'python': { 'left': '#', 'right': '' }
     \ }
" }}}

" vim-autoformat-------------------{{{
" 定义astyle c++代码格式化风格
" 对指定后缀的文件名,使用指定的格式化工具,设置c++代码风格为google,缩进设为2空格
let g:formatdef_my_cpp = '"astyle --style=google --indent=spaces=2"'
let g:formatters_cpp = ['my_cpp']
" F12触发自动格式化
noremap <F12> :Autoformat<cr>

" augroup autoformat
"   autocmd!
" " 不能将所有文件都进行保存格式化,比如.snippets不能格式化
"   au BufWrite *.h,*.cpp,*.cc,*.cxx,*.py :Autoformat
" augroup END
" }}}

" indentLine-----------------{{{
let g:indentLine_fileTypeExclude = ["tex","markdown"]
" 这个颜色正好
let g:indentLine_color_term = 239
let g:indentLine_char = '┊'
" let g:indentLine_char_list = ['|', '¦', '┆', '┊']
" }}}

" auto-pairs------------------------{{{
" 关闭映射<C-h>
let g:AutoPairsMapCh = 0
" 对markdown文件中的一些特殊字符进行处理

" }}}
"}}}

" AsyncRun------------------------{{{
" 自动打开quickfix窗口
" let g:asyncrun_open=6
" 开启或关闭quickfix窗口
" nnoremap <F5> :call asyncrun#quickfix_toggle(6)<cr>
" }}}

" vimtex----------------{{{
" 设置格式缺省值
let g:tex_flavor='latex'
let g:vimtex_view_method='general'
" quickfix会在有错误时自动打开
let g:vimtex_quickfix_mode=1
" 隐藏非当前行的Latex代码
set conceallevel=2
" 设置隐藏模式
set concealcursor=c
" 防止不正常的报错高亮
let g:tex_no_error=1
" 隐藏文件
let g:tex_conceal='abdmgs'
" 开启ycm自动补全
if !exists('g:ycm_semantic_triggers')
  let g:ycm_semantic_triggers = {}
endif
au VimEnter * let g:ycm_semantic_triggers.tex=g:vimtex#re#youcompleteme
" 开启okular viewer 
let g:vimtex_view_general_viewer = 'okular'
let g:vimtex_view_general_options = '--unique file:@pdf\#src:@line@tex'
let g:vimtex_view_general_options_latexmk = '--unique'
" }}}
"
" vim-markdown-----------------{{{
let g:vim_markdown_folding_style_pythonic = 1
let g:instant_markdown_slow = 1
" markdown编辑
let g:vim_markdown_math=1
" instant browser
let g:instant_markdown_allow_unsafe_content = 1
let g:instant_markdown_mathjax = 1
let g:instant_markdown_autoscroll = 0
let g:instant_markdown_logfile = '/tmp/instant_markdown.log'
" 设置markdown映射
augroup markdown_set
  autocmd!
  au Filetype markdown inoremap ' \
augroup END
" }}}

" vim-dispatch----------------{{{
nnoremap <F5> :Copen!<cr>

"}}}

" vim-slime---------------------{{{
let g:slime_target="tmux"
let g:slime_paste_file = "$HOME/.slime_paste"
let g:slime_default_config={"socket_name":get(split($TMUX,","),0),"target_pane":"{down-of}"}
xmap <c-a><c-a> <Plug>SlimeRegionSend
nmap <c-a><c-a> <Plug>SlimeParagraphSend
nmap <c-a> <nop>

let g:slime_python_ipython = 1
" }}}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!