Chinaunix首页 | 论坛 | 博客
  • 博客访问: 185562
  • 博文数量: 60
  • 博客积分: 1597
  • 博客等级: 上尉
  • 技术积分: 461
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-20 13:24
文章分类

全部博文(60)

文章存档

2017年(15)

2016年(6)

2015年(37)

2008年(2)

分类: LINUX

2015-09-15 11:00:01

Vim有一句哲学是这样说的:“if you write a thing once,it it okay,However,if you're writing it twice or more times,then you should find a better way to do it"。这句话估计也是引用软件开发里面的DRP(Don't Repeat Yourself)原则。如果你老是需要重复的写一些相同的东西,此时你就应该使用**abbreviation(缩写)**.

 :abbreviate 作用于所有模式   (ab) 
 :iabbrev    仅作用于插入模式 (iab)
 :cabbrev    仅作用于命令行模式(cab) 

abbreviation可以用在很多有意思的地方,比如:

  1. 纠正错误的拼写::iabbr teh the
  2. 程序中你能想到的模版语句::iabbr forx for(x=0;x<100;x++){<cr><cr>}
  3. 简化命令的输入:cabbr cse colorscheme evening
  4. 如果你是Java程序员,如下命令毫不逊色于Eclipse

Java代码  收藏代码
  1. abbr psvm public static void main(String[] args){<CR>}<esc>O  
  2.  abbr sysout System.out.println("");<esc>2hi  
  3.  abbr sop System.out.println("");<esc>2hi  
  4.  abbr syserr System.err.println("");<esc>2hi  
  5.  abbr sep System.err.println("");<esc>2hi  
  6.   
  7.  abbr forl for (int i = 0; i < ; i++) {<esc>7hi  
  8.  abbr tryb try {<CR>} catch (Exception ex) {<CR> ex.printStackTrace();<CR>}<esc>hx3ko  
  9.  abbr const public static final int  
  10.   
  11.  abbr ctm System.currentTimeMillis()  
  12.  abbr slept try {<CR> Thread.sleep();<CR>}<esc>hxA catch(Exception ex) {<CR> ex.printStackTrace();<CR>}<esc>hx3k$hi  

 

可以说只有你想不到了,没有做不到的。

写程序追求的高内聚,低耦合,同样,毫无疑问,Vim也遵循同样的原则,如果我们有上十条百条这样的缩写命令,如果都挤在vimrc配置文件中,这样过显得很难管理,因此我们可以把专门用于缩写的命令放置在单独的文件中,然后在vimrc文件中引用就ok,:source $VIM/abbreviation.vim

你有没有想过一个问题,如果把forx设置成了缩写格式,那么有时候我本意是输入'forx'呢?

  • 方法一:就是把它的映射取消掉una forx,这样有个缺点是下次我又需要这个缩写了,这时又不得不重新捡回来。
  • 方法二:写一个函数,在每次输入'forx'的时候询问是作为普通字符串还是作为缩写呢?函数如下:

    function! s:forxAsk(abbr,expansion)
      let answer = confirm("使用缩写'" . a:abbr ."'?",
                             "&Yes\n&No",1)
      return answer ==1 ? a:expansion : a:abbr
    endfunction
    
    iabbrev <expr> forx <SID>forxAsk('forx','for(x=0;x<100;x++)') 

    函数中abbr是缩写,expansion就是全写,这样一来,每次输入forx时,就会弹出一对话框询问你是使用缩写还写不使用。当然这种方式显得比较笨拙,另外一个目的也是告诉大家如果写函数。

  • 方法三:使出杀手锏,输入forx完成后,按Ctrl-v(windows系统按Ctrl-q)就能避免尴尬了。

更多参考:

阅读(551) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~