分页: 2 / 2

Re: vim中如何在“=”、“==”两侧自动加空格及“:wq”的大小写通吃?

发表于 : 2012-12-11 6:55
温习江湖
wangjun403 写了:我个人用snipmate实现,括号的自动补全

代码: 全选

snippet (
(${1})${2} 
个人觉得比映射,一些插件好用的多

补不补,全在自己
snipmate可以实现一些高级补全,
如自由的定位及预填充,填充一些shell命令所得的结果

不过,这次它在==、>=、<=的识别有问题,它是利用标点进行断词,所以第一个标点就被忽略了

Re: vim中如何在“=”、“==”两侧自动加空格及“:wq”的大小写通吃?

发表于 : 2012-12-27 13:58
温习江湖
网上找到前辈的解决方案

代码: 全选

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

Re: vim中如何在“=”、“==”两侧自动加空格及“:wq”的大小写通吃?

发表于 : 2013-01-09 14:40
温习江湖
温习江湖 写了:网上找到前辈的解决方案

代码: 全选

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
自己的优化版 :em03 (注释的部分应用了ALT热键,网页无法展现 :em02 )

代码: 全选

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

Re: vim中如何在“=”、“==”两侧自动加空格及“:wq”的大小写通吃?

发表于 : 2013-06-18 8:28
ceclinux
温习江湖 写了:
温习江湖 写了:网上找到前辈的解决方案

代码: 全选

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
自己的优化版 :em03 (注释的部分应用了ALT热键,网页无法展现 :em02 )

代码: 全选

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
:em20 木有python

Re: vim中如何在“=”、“==”两侧自动加空格及“:wq”的大小写通吃?[已解决]

发表于 : 2013-06-18 9:43
cjxgm
第一个不是直接
[vim]inoremap == <SPACE>==<SPACE>
inoremap = <SPACE>=<SPACE>[/vim]
就好了么?为什么要那么长的代码

Re: vim中如何在“=”、“==”两侧自动加空格及“:wq”的大小写通吃?[已解决]

发表于 : 2013-06-18 17:25
温习江湖
cjxgm 写了:第一个不是直接
[vim]inoremap == <SPACE>==<SPACE>
inoremap = <SPACE>=<SPACE>[/vim]
就好了么?为什么要那么长的代码
你可以都试试,你就会感觉到差别了