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

Vim、Emacs配置和使用
头像
温习江湖
帖子: 580
注册时间: 2012-06-06 18:20

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

#16

帖子 温习江湖 » 2012-12-11 6:55

wangjun403 写了:我个人用snipmate实现,括号的自动补全

代码: 全选

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

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

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

历史的车轮压过一切,任何人或事物都留在了车辙里,只有思想和智慧或附在车辄上走上那么一段时间
头像
温习江湖
帖子: 580
注册时间: 2012-06-06 18:20

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

#17

帖子 温习江湖 » 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
Vimwiki建的小博客 wweir.org

历史的车轮压过一切,任何人或事物都留在了车辙里,只有思想和智慧或附在车辄上走上那么一段时间
头像
温习江湖
帖子: 580
注册时间: 2012-06-06 18:20

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

#18

帖子 温习江湖 » 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
Vimwiki建的小博客 wweir.org

历史的车轮压过一切,任何人或事物都留在了车辙里,只有思想和智慧或附在车辄上走上那么一段时间
头像
ceclinux
帖子: 308
注册时间: 2013-01-17 2:42
系统: Ubuntu 12.04LTS

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

#19

帖子 ceclinux » 2013-06-18 8:28

温习江湖 写了:
温习江湖 写了:网上找到前辈的解决方案

代码: 全选

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
Ubuntu 12.04 LTS
laptop:Acer 4750G CPU:I5-2410
内存:2+2G 硬盘:500+750
http://www.ceclinux.org
头像
cjxgm
帖子: 1952
注册时间: 2010-04-23 20:40
系统: Arch Linux
来自: 浙江·杭州
联系:

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

#20

帖子 cjxgm » 2013-06-18 9:43

第一个不是直接
[vim]inoremap == <SPACE>==<SPACE>
inoremap = <SPACE>=<SPACE>[/vim]
就好了么?为什么要那么长的代码
Clanjor Prods. | Develop for Developers. (C++, Lua) | 作曲编曲 | 实时渲染引擎
头像
温习江湖
帖子: 580
注册时间: 2012-06-06 18:20

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

#21

帖子 温习江湖 » 2013-06-18 17:25

cjxgm 写了:第一个不是直接
[vim]inoremap == <SPACE>==<SPACE>
inoremap = <SPACE>=<SPACE>[/vim]
就好了么?为什么要那么长的代码
你可以都试试,你就会感觉到差别了
Vimwiki建的小博客 wweir.org

历史的车轮压过一切,任何人或事物都留在了车辙里,只有思想和智慧或附在车辄上走上那么一段时间
回复