• vim/Gvim配置


    " Sections:
    " -> General
    " -> VIM user interface
    " -> Colors and Fonts
    " -> Files and backups
    " -> Text, tab and indent related
    " -> Visual mode related
    " -> Moving around, tabs and buffers
    " -> Status line
    " -> Editing mappings
    " -> vimgrep searching and cope displaying
    " -> Spell checking
    " -> Misc
    " -> Helper functions
    " -> Compile file
    " -> New a file
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""


    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => General
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " Sets how many lines of history VIM has to remember
    set history=1700

    set nocompatible "去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限
    set nu
    " Enable filetype plugins
    filetype plugin on
    filetype indent on

    " Set to auto read when a file is changed from the outside
    set autoread

    " With a map leader it's possible to do extra key combinations
    " like <leader>w saves the current file
    let mapleader = ","
    let g:mapleader = ","

    " Fast saving
    nmap <leader>w :w!<cr>

    " :W sudo saves the file
    " (useful for handling the permission-denied error)
    "command W w !sudo tee % > /dev/null
    "

    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => VIM user interface
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " Set 7 lines to the cursor - when moving vertically using j/k
    set so=7

    " Turn on the WiLd menu
    set wildmenu

    " Ignore compiled files
    set wildignore=*.o,*~,*.pyc
    if has("win16") || has("win32")
    set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store
    else
    set wildignore+=.git*,.hg*,.svn*
    endif

    "Always show current position
    set ruler

    " Height of the command bar
    set cmdheight=2

    " A buffer becomes hidden when it is abandoned
    set hid

    " Configure backspace so it acts as it should act
    set backspace=eol,start,indent
    set whichwrap+=<,>,h,l

    " Ignore case when searching
    set ignorecase

    " When searching try to be smart about cases
    set smartcase

    " Highlight search results
    set hlsearch

    " Makes search act like search in modern browsers
    set incsearch

    " Don't redraw while executing macros (good performance config)
    set lazyredraw

    " For regular expressions turn magic on
    set magic

    " Show matching brackets when text indicator is over them
    set showmatch
    " How many tenths of a second to blink when matching brackets
    set mat=2

    " No annoying sound on errors
    set noerrorbells
    set novisualbell
    set t_vb=
    set tm=500

    " Add a bit extra margin to the left
    set foldcolumn=1

    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => Colors and Fonts
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " Enable syntax highlighting
    syntax enable
    autocmd InsertLeave * se nocul " 用浅色高亮当前行
    autocmd InsertEnter * se cul " 用浅色高亮当前行

    color molokai

    set background=dark

    " Set extra options when running in GUI mode
    if has("gui_running")
    set guioptions-=T
    set guioptions-=e
    set t_Co=256
    set guitablabel=%M %t
    endif

    " Set utf8 as standard encoding and en_US as the standard language
    "set encoding=utf8
    set fileencoding=utf8
    set fileencodings=ucs-bom,gb18030,utf-8,default
    " Use Unix as the standard file type
    set ffs=unix,dos,mac

    " 如遇Unicode值大于255的文本,不必等到空格再折行。
    set formatoptions+=m
    " 合并两行中文时,不在中间加空格:
    set formatoptions+=B

    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => Files, backups and undo
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " Turn backup off, since most stuff is in SVN, git et.c anyway...
    set nobackup
    set nowb
    set noswapfile


    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => Text, tab and indent related
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " Use spaces instead of tabs
    set expandtab

    " Be smart when using tabs ;)
    set smarttab

    " 1 tab == 4 spaces
    set shiftwidth=4
    set tabstop=4
    set softtabstop=4
    set expandtab

    " Linebreak on 500 characters
    set lbr
    set tw=500

    set ai "Auto indent
    set si "Smart indent
    set wrap "Wrap lines

    """"""""""""""""""""""""""""""
    " => Visual mode related
    """"""""""""""""""""""""""""""
    " Visual mode pressing * or # searches for the current selection
    " Super useful! From an idea by Michael Naumann
    vnoremap <silent> * :call VisualSelection('f', '')<CR>
    vnoremap <silent> # :call VisualSelection('b', '')<CR>


    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => Moving around, tabs, windows and buffers
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " Treat long lines as break lines (useful when moving around in them)
    map j gj
    map k gk

    " Disable highlight when <leader><cr> is pressed
    map <silent> <leader><cr> :noh<cr>

    " Smart way to move between windows
    map <C-j> <C-W>j
    map <C-k> <C-W>k
    map <C-h> <C-W>h
    map <C-l> <C-W>l

    " Close the current buffer
    map <leader>bd :Bclose<cr>

    " Close all the buffers
    map <leader>ba :1,1000 bd!<cr>

    " Useful mappings for managing tabs
    map <leader>tn :tabnew<cr>
    map <leader>to :tabonly<cr>
    map <leader>tc :tabclose<cr>
    map <leader>tm :tabmove
    map <leader>t<leader> :tabnext

    " Opens a new tab with the current buffer's path
    " Super useful when editing files in the same directory
    map <leader>te :tabedit <c-r>=expand("%:p:h")<cr>/

    " Switch CWD to the directory of the open buffer
    map <leader>cd :cd %:p:h<cr>:pwd<cr>

    " Specify the behavior when switching between buffers
    try
    set switchbuf=useopen,usetab,newtab
    set stal=2
    catch
    endtry

    " Return to last edit position when opening files (You want this!)
    autocmd BufReadPost *
    if line("'"") > 0 && line("'"") <= line("$") |
    exe "normal! g`"" |
    endif
    " Remember info about open buffers on close
    set viminfo^=%


    """"""""""""""""""""""""""""""
    " => Status line
    """"""""""""""""""""""""""""""
    " Always show the status line
    set laststatus=2

    " Format the status line
    set statusline= %{HasPaste()}%F%m%r%h %w CWD: %r%{getcwd()}%h Line: %l


    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => Editing mappings
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " Remap VIM 0 to first non-blank character
    map 0 ^

    " Move a line of text using ALT+[jk] or Comamnd+[jk] on mac
    nmap <M-j> mz:m+<cr>`z
    nmap <M-k> mz:m-2<cr>`z
    vmap <M-j> :m'>+<cr>`<my`>mzgv`yo`z
    vmap <M-k> :m'<-2<cr>`>my`<mzgv`yo`z

    if has("mac") || has("macunix")
    nmap <D-j> <M-j>
    nmap <D-k> <M-k>
    vmap <D-j> <M-j>
    vmap <D-k> <M-k>
    endif

    " Delete trailing white space on save, useful for Python and CoffeeScript ;)
    func! DeleteTrailingWS()
    exe "normal mz"
    %s/s+$//ge
    exe "normal `z"
    endfunc
    autocmd BufWrite *.py :call DeleteTrailingWS()
    autocmd BufWrite *.coffee :call DeleteTrailingWS()

    :inoremap ( ()<ESC>i
    ":inoremap ) <c-r>=ClosePair(')')<CR>
    :inoremap { {<CR>}<ESC>O
    "":inoremap } <c-r>=ClosePair('}')<CR>
    :inoremap [ []<ESC>i
    "":inoremap ] <c-r>=ClosePair(']')<CR>
    :inoremap " ""<ESC>i
    :inoremap ' ''<ESC>i
    ":inoremap =: <space>=:<space><ESC>a
    ":inoremap += <space>+=<space><ESC>a
    ":inoremap != <space>!=<space><ESC>a
    ":inoremap -= <space>-=<space><ESC>a
    ":inoremap *= <space>*=<space><ESC>a
    ":inoremap == <space>==<space><ESC>a
    ":inoremap <= <space><=<space><ESC>a
    ":inoremap < <space><<space><ESC>a
    ":inoremap > <space>><space><ESC>a
    ":inoremap >= <space>>=<space><ESC>a
    ":inoremap = <space>=<space><ESC>a
    :inoremap ;; ;<ESC>o
    :inoremap , ,<space><ESC>a
    :inoremap #in #include<stdio.h><ESC>o
    :inoremap #inc #include<string.h><ESC>o
    :inoremap #ind #include<stdlib.h><ESC>o
    :inoremap pr printf("");<ESC>a<left><left><left>
    :inoremap sc scanf("");<ESC>a<left><left><left>
    :inoremap main int<space>main(int<space>argc,<space>char<space>const *argv[])<space><CR>{<CR>}<ESC>O
    :inoremap if if()<ESC><left>a
    :inoremap whi while()<left><ESC>a
    :inoremap fo for()<left><ESC>a
    :inoremap re return<space><ESC>a
    :inoremap el else<space><ESC>a
    :inoremap si sizeof()<ESC>i
    :inoremap strl strlen()<ESC>i
    :inoremap str strcmp()<ESC>i
    :inoremap fr freopen("in.c","r",stdin);<ESC>a
    :inoremap ty typedef<space>sturct<space><CR>{<CR>}<ESC>O
    :inoremap using using<space>namespace<space>
    :inoremap along AVeryVeryVeryVeryVeryVeryLongWordThatIDidNotWantToUse<ESC>a

    set guioptions-=m " 隐藏菜单栏
    set guioptions-=T " 隐藏工具栏
    set guioptions-=L " 隐藏左侧滚动条
    set guioptions-=r " 隐藏右侧滚动条
    set guioptions-=b " 隐藏底部滚动条

    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => vimgrep searching and cope displaying
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " When you press gv you vimgrep after the selected text
    vnoremap <silent> gv :call VisualSelection('gv', '')<CR>

    " Open vimgrep and put the cursor in the right position
    map <leader>g :vimgrep // **/*.<left><left><left><left><left><left><left>

    " Vimgreps in the current file
    map <leader><space> :vimgrep // <C-R>%<C-A><right><right><right><right><right><right><right><right><right>

    " When you press <leader>r you can search and replace the selected text
    vnoremap <silent> <leader>r :call VisualSelection('replace', '')<CR>

    " Do :help cope if you are unsure what cope is. It's super useful!
    "
    " When you search with vimgrep, display your results in cope by doing:
    " <leader>cc
    "
    " To go to the next search result do:
    " <leader>n
    "
    " To go to the previous search results do:
    " <leader>p
    "
    map <leader>cc :botright cope<cr>
    map <leader>co ggVGy:tabnew<cr>:set syntax=qf<cr>pgg
    map <leader>n :cn<cr>
    map <leader>p :cp<cr>

    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => Spell checking
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " Pressing ,ss will toggle and untoggle spell checking
    map <leader>ss :setlocal spell!<cr>

    " Shortcuts using <leader>
    map <leader>sn ]s
    map <leader>sp [s
    map <leader>sa zg
    map <leader>s? z=


    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => Misc
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " Remove the Windows ^M - when the encodings gets messed up
    noremap <Leader>m mmHmt:%s/<C-V><cr>//ge<cr>'tzt'm

    " Quickly open a buffer for scripbble
    map <leader>q :e ~/buffer<cr>

    " Toggle paste mode on and off
    map <leader>pp :setlocal paste!<cr>


    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " => Helper functions
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    function! CmdLine(str)
    exe "menu Foo.Bar :" . a:str
    emenu Foo.Bar
    unmenu Foo
    endfunction

    function! VisualSelection(direction, extra_filter) range
    let l:saved_reg = @"
    execute "normal! vgvy"

    let l:pattern = escape(@", '\/.*$^~[]')
    let l:pattern = substitute(l:pattern, " $", "", "")

    if a:direction == 'b'
    execute "normal ?" . l:pattern . "^M"
    elseif a:direction == 'gv'
    call CmdLine("vimgrep " . '/'. l:pattern . '/' . ' **/*.' . a:extra_filter)
    elseif a:direction == 'replace'
    call CmdLine("%s" . '/'. l:pattern . '/')
    elseif a:direction == 'f'
    execute "normal /" . l:pattern . "^M"
    endif

    let @/ = l:pattern
    let @" = l:saved_reg
    endfunction


    " Returns true if paste mode is enabled
    function! HasPaste()
    if &paste
    return 'PASTE MODE '
    en
    return ''
    endfunction

    " Don't close window, when deleting a buffer
    command! Bclose call <SID>BufcloseCloseIt()
    function! <SID>BufcloseCloseIt()
    let l:currentBufNum = bufnr("%")
    let l:alternateBufNum = bufnr("#")

    if buflisted(l:alternateBufNum)
    buffer #
    else
    bnext
    endif

    if bufnr("%") == l:currentBufNum
    new
    endif

    if buflisted(l:currentBufNum)
    execute("bdelete! ".l:currentBufNum)
    endif
    endfunction

    """"""""""""""""""""""""""""""
    " => Python section
    """"""""""""""""""""""""""""""
    let python_highlight_all = 1
    au FileType python syn keyword pythonDecorator True None False self

    au BufNewFile,BufRead *.jinja set syntax=htmljinja
    au BufNewFile,BufRead *.mako set ft=mako

    au FileType python map <buffer> F :set foldmethod=indent<cr>

    au FileType python inoremap <buffer> $r return
    au FileType python inoremap <buffer> $i import
    au FileType python inoremap <buffer> $p print
    au FileType python inoremap <buffer> $f #--- PH ----------------------------------------------<esc>FP2xi
    au FileType python map <buffer> <leader>1 /class
    au FileType python map <buffer> <leader>2 /def
    au FileType python map <buffer> <leader>C ?class
    au FileType python map <buffer> <leader>D ?def


    """"""""""""""""""""""""""""""
    " => JavaScript section
    """""""""""""""""""""""""""""""
    au FileType javascript call JavaScriptFold()
    au FileType javascript setl fen
    au FileType javascript setl nocindent

    au FileType javascript imap <c-t> AJS.log();<esc>hi
    au FileType javascript imap <c-a> alert();<esc>hi

    au FileType javascript inoremap <buffer> $r return
    au FileType javascript inoremap <buffer> $f //--- PH ----------------------------------------------<esc>FP2xi

    function! JavaScriptFold()
    setl foldmethod=syntax
    setl foldlevelstart=1
    syn region foldBraces start=/{/ end=/}/ transparent fold keepend extend

    function! FoldText()
    return substitute(getline(v:foldstart), '{.*', '{...}', '')
    endfunction
    setl foldtext=FoldText()
    endfunction


    """"""""""""""""""""""""""""""
    " => CoffeeScript section
    """""""""""""""""""""""""""""""
    function! CoffeeScriptFold()
    setl foldmethod=indent
    setl foldlevelstart=1
    endfunction
    au FileType coffee call CoffeeScriptFold()


    """"""""""""""""""""""""""""""
    " -> Compile file
    """"""""""""""""""""""""""""""
    "单个文件编译
    if(has("win32") || has("win95") || has("win64") || has("win16"))
    let g:iswindows=1
    else
    let g:iswindows=0
    endif
    map w :call Do_OneFileMake()<CR>
    function Do_OneFileMake()
    exec "w"
    if &filetype=="java"
    exec "!javac %"
    exec "!java %<"
    return
    endif
    if &filetype=="python"
    exec "!python %"
    return
    endif
    if expand("%:p:h")!=getcwd()
    echohl WarningMsg | echo "Fail to make! This file is not in the current dir! Press <F7> to redirect to the dir of this file." | echohl None
    return
    endif
    let sourcefileename=expand("%:t")
    if (sourcefileename=="" || (&filetype!="cpp" && &filetype!="c" && &filetype!="java" && &filetype!="py"))
    echohl WarningMsg | echo "Fail to make! Please select the right file!" | echohl None
    return
    endif
    let deletedspacefilename=substitute(sourcefileename,' ','','g')
    if strlen(deletedspacefilename)!=strlen(sourcefileename)
    echohl WarningMsg | echo "Fail to make! Please delete the spaces in the filename!" | echohl None
    return
    endif
    if &filetype=="java"
    exec "!javac %"
    exec "!java %<"
    return
    endif
    if &filetype=="python"
    exec "!python %"
    return
    endif
    if &filetype=="c"
    if g:iswindows==1
    set makeprg=gcc -o %<.exe %
    else
    set makeprg=gcc -o %< %
    endif
    elseif &filetype=="cpp"
    if g:iswindows==1
    set makeprg=g++ -o %<.exe %
    else
    set makeprg=g++ -o %< %
    endif
    "elseif &filetype=="cs"
    "set makeprg=csc /nologo /out:%<.exe %
    endif
    if(g:iswindows==1)
    let outfilename=substitute(sourcefileename,'(.[^.]*)' ,'.exe','g')
    let toexename=outfilename
    else
    let outfilename=substitute(sourcefileename,'(.[^.]*)' ,'','g')
    let toexename=outfilename
    endif
    if filereadable(outfilename)
    if(g:iswindows==1)
    let outdeletedsuccess=delete(getcwd()."\".outfilename)
    else
    let outdeletedsuccess=delete("./".outfilename)
    endif
    if(outdeletedsuccess!=0)
    set makeprg=make
    echohl WarningMsg | echo "Fail to make! I cannot delete the ".outfilename | echohl None
    return
    endif
    endif
    execute "silent make"
    set makeprg=make
    execute "normal :"
    if filereadable(outfilename)
    if(g:iswindows==1)
    execute "!".toexename
    else
    execute "!./".toexename
    endif
    endif
    execute "copen"
    endfunction
    "进行make的设置
    map <F6> :call Do_make()<CR>
    map <c-F6> :silent make clean<CR>
    function Do_make()
    set makeprg=make
    execute "silent make"
    execute "copen"
    endfunction


    """"""""""""""""""""""""""""""""""""""""""""""""
    " -> New a file
    """"""""""""""""""""""""""""""""""""""""""""""""
    map t :call SetTitle()<cr>'s
    func SetTitle()
    if &filetype == 'sh'
    call setline(1,"#########################################################################")
    call append(line("."), "# File Name: ".expand("%"))
    call append(line(".")+1, "# Author: wangzhili")
    call append(line(".")+2, "# E-mail: wangstdio.h@gmail.com")
    call append(line(".")+3, "# Created Time: ".strftime("%c"))
    call append(line(".")+4, "#########################################################################")
    call append(line(".")+5, "#!/usr/bin/bash")
    call append(line(".")+6, "")
    else
    call setline(1, "/*************************************************************************")
    call append(line("."), " > File Name: ".expand("%"))
    call append(line(".")+1, " > Author: wangzhili")
    call append(line(".")+2, " > Mail: wangstdio.h@gmail.com")
    call append(line(".")+3, " > Created Time: ".strftime("%c"))
    call append(line(".")+4, " ************************************************************************/")
    call append(line(".")+5, "")
    endif
    if &filetype == 'cpp'
    call append(line(".")+6, "#include<iostream>")
    call append(line(".")+7, "using namespace std;")
    call append(line(".")+8, "")
    endif
    if &filetype == 'c'
    call append(line(".")+6, "#include<stdio.h>")
    call append(line(".")+7, "")
    endif
    "新建文件后,自动定位到文件末尾
    autocmd BufNewFile * normal G
    endfunc


    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:author)
    normal o
    call setline('.', '# E-mail : '.g:Email)
    normal o
    call setline('.', '# Date : '.strftime("%y/%m/%d %H:%M:%S"))
    normal o
    call setline('.', '# Desc : ')
    normal o
    call cursor(7, 17)
    endfunction
    function InsertCommentWhenOpen()
    if a:lastline == 1 && !getline('.')
    call InsertPythonComment()
    end
    endfunc
    au FileType python :%call InsertCommentWhenOpen()

    let g:author = 'wangzhili'
    let g:Email = 'wangstdio.h@gmail.com'

    配置后我的Gim:

  • 相关阅读:
    DDOS攻击事件记录
    ansible批量安装zabbix客户端并实现自动发现功能
    利用api更新域名解析ip+端口转发【2】
    利用api更新域名解析ip+端口转发【1】
    网站春节开市休市设置
    获取内网路由器管理页面出口ip
    关于nginx加载配置文件的巨坑
    活动封禁刷票ip
    二十五个Python高级开发技巧,终极干货!建议收藏学习!
    一则故事带你秒懂Python GIL原理!
  • 原文地址:https://www.cnblogs.com/anhuizhiye/p/3334050.html
Copyright © 2020-2023  润新知