vim配置

if has("syntax")
  syntax on
endif

" If using a dark background within the editing area and syntax highlighting
" turn on this option as well
set background=light
" Uncomment the following to have Vim jump to the last position when
" reopening a file
if has("autocmd")
  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif

" Uncomment the following to have Vim load indentation rules and plugins
" according to the detected filetype.
if has("autocmd")
  filetype plugin indent on
endif

set showcmd		" Show (partial) command in status line.
set showmatch		" Show matching brackets.
"set ignorecase		" Do case insensitive matching
"set smartcase		" Do smart case matching
"set incsearch		" Incremental search
set autowrite		" Automatically save before commands like :next and :make
"set hidden             " Hide buffers when they are abandoned
set mouse=a		" Enable mouse usage (all modes)
set selection=exclusive
set selectmode=mouse,key
autocmd InsertLeave * se nocul  " 用浅色高亮当前行
autocmd InsertEnter * se cul    " 用浅色高亮当前行
set nu
set nocp
set ruler
set novisualbell
set autoread
set completeopt=preview,menu
set clipboard+=unnamed
set nobackup
set cursorline
set magic
set tabstop=4
set autoindent
"set scrolloff=50
set cindent
set softtabstop=4
set shiftwidth=4
set smarttab
set expandtab
set history=500
set noswapfile
set hlsearch
set incsearch
set backspace=2
set report=0
set whichwrap+=<,>,h,l
"set foldmethod=indent
set noerrorbells
set linebreak
set fo+=mB
if has("gui_running")
  set nowrap
  set guioptions+=b
endif
if has("gui_running")
  colorscheme molokai_gui
else
  colorscheme molokai
endif

vmap <Tab> >
nmap <Home> :call SmartHome()<CR>
imap <Home> <c-r>=SmartHome2()<CR>

func! SmartHome()
  if col('.') == 1
    exec "normal! ^"
    return
  endif
  let line = getline('.')
  let end = 0
  while line[end] == "\<Space>" || line[end] == "\<Tab>"
    let end += 1
  endw
  if col('.') - 1 == end || end == col('$') - 1
    exec "normal! \<Home>"
  else
    exec "normal! ^"
  endif
endf

func! SmartHome2()
  let now = col('.')-1
  let line = getline('.')
  if now == 0
    exec "normal! ^"
    if line[col('.') - 1] == "\<Space>" || line[col('.') - 1] == "\Tab"
      return "\<Right>"
    else
      return ""
    endif
  endif
  let end = 0
  while line[end] == "\<Space>" || line[end] == "\<Tab>"
    let end += 1
  endw
  if now == end || end == col('$') - 1
    return "\<Home>"
  else
    exec "normal! ^"
    return ""
  endif
endf

func! InQuote(pos)
  let line = strpart(getline('.'), 0, a:pos-1)
  let n = len(line)
  let ct1 = "false"
  let ct2 = "false"
  let i = 0
  while i < n
    if line[i] == '\'
      let i += 2
      continue
    endif
    if line[i] == '"' && !ct1
      let ct2 = !ct2
    elseif line[i] == "'" && !ct2
      let ct1 = !ct1
    endif
    let i += 1
  endw
  return ct1 || ct2
endf

inoremap ( <c-r>=OpenPair('(', ')')<CR>
inoremap ) <c-r>=ClosePair('(', ')')<CR>
inoremap [ <c-r>=OpenPair('[',']')<CR>
inoremap ] <c-r>=ClosePair('[',']')<CR>
inoremap { <c-r>=OpenPair('{', '}')<CR>
inoremap } <c-r>=ClosePair('{', '}')<CR>
inoremap <BS> <C-R>=RemovePairs()<CR>
inoremap ' <c-r>=CompleteQuote("'")<CR>
inoremap " <c-r>=CompleteQuote('"')<CR>
inoremap <CR> <c-r>=Enter()<CR>

func! Match(open, close)
  let line = getline('.')
  let n = len(line)
  let ans = 0
  let ct1 = "false"
  let ct2 = "false"
  let i = 0
  while i < n
    if line[i] == '\'
      let i += 2
      continue
    endif
    if line[i] == '"' && !ct1
      let ct2 = !ct2
    elseif line[i] == "'" && !ct2
      let ct1 = !ct1
    elseif line[i] == a:open && !ct1 && !ct2
      let ans += 1
    elseif line[i] == a:close && !ct1 && !ct2
      let ans -= 1
      if ans < 0
        return 0
      endif
    endif
    let i += 1
  endw
  return ans == 0
endf

func! OpenPair(open, close)
  if InQuote(col('.'))
    return a:open
  endif
  if Match(a:open, a:close)
    return a:open . a:close . "\<Left>"
  else
    return a:open
  endif
endf

func! ClosePair(open, close)
  if InQuote(col('.'))
    return a:close
  endif
  if !Match(a:open, a:close)
    return a:close
  endif
  if getline('.')[col('.') - 1] == a:close
    return "\<Right>"
  else
    return a:close
  endif
endf

func! Enter()
  let now = col('.') - 1
  let line = getline('.')
  if line[now-1] == '{' && line[now] == '}'
    return "\<CR>\<Up>\<End>\<CR>"
  endif
  return "\<CR>"
endf

func! RemovePairs()
  let line = getline('.')
  let prev_char = line[col('.') - 2]
  let next_char = line[col('.') - 1]
  if InQuote(col('.') - 1)
    return "\<BS>"
  endif
  if prev_char == '(' && next_char == ')'
    if !Match('(', ')')
      return "\<BS>"
    else
      return "\<Del>\<BS>"
    endif
  elseif prev_char == '{' && next_char == '}'
    if !Match('{', '}')
      return "\<BS>"
    else
      return "\<Del>\<BS>"
    endif
  elseif prev_char == '[' && next_char == ']'
    if !Match('[', ']')
      return "\<BS>"
    else
      return "\<Del>\<BS>"
    endif
  elseif prev_char == '"' && next_char == '"'
    return "\<Del>\<BS>"
  elseif prev_char == "'" && next_char == "'"
    return "\<Del>\<BS>"
  endif
  return "\<BS>"
endf

func! CompleteQuote(quote)
  let next_char = getline('.')[col('.') - 1]
  if InQuote(col('.'))
    if next_char == a:quote
      return "\<Right>"
    else
      return a:quote
    endif
  endif
  return a:quote . a:quote . "\<Left>"
endf

imap <F9> <ESC>:call Compile()<CR>
imap <F5> <ESC>:call Runexec()<CR>
imap <F7> <ESC>:call Debug()<CR>
map <F9> :call Compile()<CR>
map <F5> :call Runexec()<CR>
map <F7> :call Debug()<CR>
imap <C-D> <ESC>:call Astyle()<CR>
map <C-D> :call Astyle()<CR>

let makefile = 0
func! Compile()
  exec "w"
  if g:makefile
    exec "!make"
  elseif &filetype == "make"
    exec "!make -f \"%\""
  elseif &filetype == "java"
    exec "!javac \"%\" -g"
  elseif &filetype == "pascal"
    exec "!fpc % -g"
  elseif &filetype == "c"
    exec "!gcc % -o %< -g -lm -static -Wall -fdiagnostics-color=always"
  elseif &filetype == "cpp"
    exec "!g++ % -o %< -g -lm -static -Wall -fdiagnostics-color=auto"
  endif
endf

func! Runexec()
  exec "w"
  let cwd = getcwd()
  exec "cd %:p:h"
  if &filetype == "sh"
    exec "!sh %"
  elseif &filetype == "java"
    exec "!java -classpath %:p:h %:r"
  elseif &filetype == "python"
    exec "!python %"
  elseif &filetype == "lua"
    exec "!lua %"
  else
    exec "!%:p:r"
  endif
  exec "cd " . cwd
endf

func! Debug()
  exec "w"
  let cwd = getcwd()
  exec "cd %:p:h"
  if &filetype == "python"
    exec "!python -m pdb %"
  else
    exec "!gdb %<"
  endif
  exec "cd " . cwd
endf

func! Astyle()
  exec "w"
  let tmp = "!astyle %"
  let tmp = tmp . " --style=ansi"
  let tmp = tmp . " --indent=spaces=4"
  let tmp = tmp . " --indent-namespaces"
  let tmp = tmp . " --convert-tabs"
  let tmp = tmp . " --suffix=none"
  let tmp = tmp . " --pad-oper"
  let tmp = tmp . " --pad-header"
  let tmp = tmp . " --unpad-paren"
  let tmp = tmp . " --align-pointer=name"
  let tmp = tmp . " --align-reference=name"
  let tmp = tmp . " --remove-brackets"
  let tmp = tmp . " --max-code-length=80"
  let tmp = tmp . " --break-after-logical"
  if has("macunix")
    let tmp = tmp . " --lineend=macold"
  elseif has("unix")
    let tmp = tmp . " --lineend=linux"
  else
    let tmp = tmp . " --lineend=windows"
  endif
  if &filetype == "c" || &filetype == "cpp"
    exec tmp . " --mode=c"
  elseif &filetype == "java"
    exec tmp . " --mode=java"
  elseif &filetype == "cs"
    exec tmp . " --mode=cs"
  endif
  exec "e"
endf

nmap <S-Up> :call PageMoveUp()<CR>
imap <S-Up> <Esc>:call PageMoveUp()<CR>i
nmap <PageUp> :call PageMoveUp()<CR>
imap <PageUp> <Esc>:call PageMoveUp()<CR>i
imap <Tab> <c-r>=SmartTab()<CR>
if has("gui_running")
  map <A-a> ggVG
  map <A-v> "+p
  imap <A-a> <Esc>ggVG
  imap <A-v> <Esc>"+pa
  vmap <A-a> <Esc>ggVG
  vmap <A-c> "+y
  vmap <A-x> "+c
  vmap <A-v> "+p
else
  map a ggVG
  map v p
  "imap a <Esc>ggVG
  imap v <Esc>pa
  vmap a <Esc>ggVG
  vmap c y
  vmap x c
  vmap v p
endif

func! PageMoveUp()
  let visline = line("w$") - line("w0") + 1
  if line('.') <= visline
    exec "normal! gg"
  else
    exec "normal! \<PageUp>"
  endif
endf

func! SmartTab()
  let line = getline('.')
  let now = col('.')-1
  if line('.') == 1
    return "\<Tab>"
  endif
  let length = len(line)
  let i = 0
  while i < length && (line[i] == "\<Space>" || line[i] == "\<Tab>")
    let i += 1
  endw
  if i < now
    return "\<Tab>"
  endif
  exec "normal! ^"
  let now2 = col('.')-1
  exec "normal! O \<Left>\<Del>"
  let new = col('.')-1
  exec "normal! dd"
  if new <= now2
    if i == length
      return "\<Right>\<Tab>"
    else
      return "\<Tab>" 
    endif
  endif
  let ans = ""
  let i = col('.')-1
  while i != now2
    if i < now2
      let ans = ans . "\<Right>"
      let i += 1
    else
      let ans = ans . "\<Left>"
      let i -= 1
    endif
  endw
  let i = 0
  while i <= new - now2
    let i += 1
    let ans = ans . "\<Space>"
  endw
  return ans
endf
"language us

"if filereadable("/etc/vim/vimrc.local")
"  source /etc/vim/vimrc.local
"endif


阅读更多
文章标签: vim
想对作者说点什么? 我来说一句

vim配置vimrc

2010年11月17日 13KB 下载

vim配置文件

2011年09月28日 3KB 下载

Windows Vim 配置

2011年08月01日 253KB 下载

coolulu的vim插件配置文件夹

2012年09月26日 290KB 下载

vim 配置 vim 配置

2009年05月25日 36KB 下载

vim插件及用户配置文件备份

2010年06月16日 128KB 下载

自己配置vim备份

2011年02月11日 16.4MB 下载

linux vim配置以及插件

2010年05月20日 194KB 下载

vimconfig-2012-06-13

2012年06月13日 2.83MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭