snipmate可以实现一些高级补全,
如自由的定位及预填充,填充一些shell命令所得的结果
不过,这次它在==、>=、<=的识别有问题,它是利用标点进行断词,所以第一个标点就被忽略了
snipmate可以实现一些高级补全,
代码: 全选
let g:equ=1
"设置= + - * 前后自动空格
"蛇者 ,后面自动添加空格
if exists("g:equ")
:inoremap = <c-r>=EqualSign('=')<CR>
:inoremap + <c-r>=EqualSign('+')<CR>
:inoremap - <c-r>=EqualSign('-')<CR>
:inoremap * <c-r>=EqualSign('*')<CR>
:inoremap / <c-r>=EqualSign('/')<CR>
:inoremap > <c-r>=EqualSign('>')<CR>
:inoremap < <c-r>=EqualSign('<')<CR>
:inoremap , ,<space>
endif
function! EqualSign(char)
if a:char =~ '=' && getline('.') =~ ".*("
return a:char
endif
let ex1 = getline('.')[col('.') - 3]
let ex2 = getline('.')[col('.') - 2]
if ex1 =~ "[-=+><>\/\*]"
if ex2 !~ "\s"
return "\<ESC>i".a:char."\<SPACE>"
else
return "\<ESC>xa".a:char."\<SPACE>"
endif
else
if ex2 !~ "\s"
return "\<SPACE>".a:char."\<SPACE>\<ESC>a"
else
return a:char."\<SPACE>\<ESC>a"
endif
endif
endf
自己的优化版温习江湖 写了:网上找到前辈的解决方案代码: 全选
let g:equ=1 "设置= + - * 前后自动空格 "蛇者 ,后面自动添加空格 if exists("g:equ") :inoremap = <c-r>=EqualSign('=')<CR> :inoremap + <c-r>=EqualSign('+')<CR> :inoremap - <c-r>=EqualSign('-')<CR> :inoremap * <c-r>=EqualSign('*')<CR> :inoremap / <c-r>=EqualSign('/')<CR> :inoremap > <c-r>=EqualSign('>')<CR> :inoremap < <c-r>=EqualSign('<')<CR> :inoremap , ,<space> endif function! EqualSign(char) if a:char =~ '=' && getline('.') =~ ".*(" return a:char endif let ex1 = getline('.')[col('.') - 3] let ex2 = getline('.')[col('.') - 2] if ex1 =~ "[-=+><>\/\*]" if ex2 !~ "\s" return "\<ESC>i".a:char."\<SPACE>" else return "\<ESC>xa".a:char."\<SPACE>" endif else if ex2 !~ "\s" return "\<SPACE>".a:char."\<SPACE>\<ESC>a" else return a:char."\<SPACE>\<ESC>a" endif endif endf
代码: 全选
autocmd FileType * call g:compileByFileType()
func! g:compileByFileType()
if &filetype=="c"
if (filereadable("Makefile")||filereadable("makefile"))
else
set makeprg=gcc\ %\ -Wall\ -std=c99\ -lm\ -g\ -o\ %<
endif
""""""""nnoremap j <Esc>:cn<CR>
""""""""nnoremap k <Esc>:cp<CR>
""""""""noremap m <Esc><Esc>:w<CR>:make<CR>
""""""""noremap r <Esc><Esc>:!gdb ./%<<CR>
inoremap / <c-r>=EqualSign('/')<CR>
inoremap = <c-r>=EqualSign('=')<CR>
inoremap < <c-r>=EqualSign('<')<CR>
inoremap - <c-r>=EqualSign('-')<CR>
inoremap > <c-r>=EqualSign('>')<CR>
inoremap + <c-r>=EqualSign('+')<CR>
elseif &filetype == "html"
inoremap ; ;<space>
elseif &filetype=="Vimwiki"
inoremap ` <c-r>=EqualSign('`')<CR>
elseif &filetype=="vim"
inoremap < <><left>
endif
endfunction
"设置= + - 前后自动空格
function! EqualSign(char)
if a:char =~ '=' && getline('.') =~ ".*("
return a:char
endif
let ex1 = getline('.')[col('.') - 3]
let ex2 = getline('.')[col('.') - 2]
if ex1 =~ "[-=+><>\/\*]"
if ex2 !~ "[\<TAB>\<space>]"
return "\<ESC>i".a:char."1\<SPACE>"
elseif ex1 =~ a:char && a:char =~ "[-+]"
return "\<ESC>xxxa".a:char.a:char
else
return "\<ESC>xa".a:char."2\<SPACE>"
endif
else
if ex2 !~ "[\<TAB>\<space>]"
return "\<SPACE>".a:char."\<SPACE>\<ESC>a"
else
return a:char."\<SPACE>\<ESC>a"
endif
endif
endf
温习江湖 写了:自己的优化版温习江湖 写了:网上找到前辈的解决方案代码: 全选
let g:equ=1 "设置= + - * 前后自动空格 "蛇者 ,后面自动添加空格 if exists("g:equ") :inoremap = <c-r>=EqualSign('=')<CR> :inoremap + <c-r>=EqualSign('+')<CR> :inoremap - <c-r>=EqualSign('-')<CR> :inoremap * <c-r>=EqualSign('*')<CR> :inoremap / <c-r>=EqualSign('/')<CR> :inoremap > <c-r>=EqualSign('>')<CR> :inoremap < <c-r>=EqualSign('<')<CR> :inoremap , ,<space> endif function! EqualSign(char) if a:char =~ '=' && getline('.') =~ ".*(" return a:char endif let ex1 = getline('.')[col('.') - 3] let ex2 = getline('.')[col('.') - 2] if ex1 =~ "[-=+><>\/\*]" if ex2 !~ "\s" return "\<ESC>i".a:char."\<SPACE>" else return "\<ESC>xa".a:char."\<SPACE>" endif else if ex2 !~ "\s" return "\<SPACE>".a:char."\<SPACE>\<ESC>a" else return a:char."\<SPACE>\<ESC>a" endif endif endf
(注释的部分应用了ALT热键,网页无法展现
)
代码: 全选
autocmd FileType * call g:compileByFileType() func! g:compileByFileType() if &filetype=="c" if (filereadable("Makefile")||filereadable("makefile")) else set makeprg=gcc\ %\ -Wall\ -std=c99\ -lm\ -g\ -o\ %< endif """"""""nnoremap j <Esc>:cn<CR> """"""""nnoremap k <Esc>:cp<CR> """"""""noremap m <Esc><Esc>:w<CR>:make<CR> """"""""noremap r <Esc><Esc>:!gdb ./%<<CR> inoremap / <c-r>=EqualSign('/')<CR> inoremap = <c-r>=EqualSign('=')<CR> inoremap < <c-r>=EqualSign('<')<CR> inoremap - <c-r>=EqualSign('-')<CR> inoremap > <c-r>=EqualSign('>')<CR> inoremap + <c-r>=EqualSign('+')<CR> elseif &filetype == "html" inoremap ; ;<space> elseif &filetype=="Vimwiki" inoremap ` <c-r>=EqualSign('`')<CR> elseif &filetype=="vim" inoremap < <><left> endif endfunction "设置= + - 前后自动空格 function! EqualSign(char) if a:char =~ '=' && getline('.') =~ ".*(" return a:char endif let ex1 = getline('.')[col('.') - 3] let ex2 = getline('.')[col('.') - 2] if ex1 =~ "[-=+><>\/\*]" if ex2 !~ "[\<TAB>\<space>]" return "\<ESC>i".a:char."1\<SPACE>" elseif ex1 =~ a:char && a:char =~ "[-+]" return "\<ESC>xxxa".a:char.a:char else return "\<ESC>xa".a:char."2\<SPACE>" endif else if ex2 !~ "[\<TAB>\<space>]" return "\<SPACE>".a:char."\<SPACE>\<ESC>a" else return a:char."\<SPACE>\<ESC>a" endif endif endf
你可以都试试,你就会感觉到差别了cjxgm 写了:第一个不是直接
[vim]inoremap == <SPACE>==<SPACE>
inoremap = <SPACE>=<SPACE>[/vim]
就好了么?为什么要那么长的代码