配置Vim,让咱们的Vim更好用。

Vim是个神奇的编辑器,它是属于那种慢慢让人着迷而且爱不释手的东西。算起来用Vim的时间已经不短了,大约一年有余。从刚上班时无比别扭的死记硬背,到现在算是非常自如的使用它,这种独特的体验绝对是另外一种收获。而且更可贵的是,除了目前工作中长打交道的C++文件,任何类型的文本文件都在vim的适用范围之内,上次参加公司的hackathon比赛,做可视化设计的时候需要接HTML和JS的脚本,vim一样给力,感觉甚好。考虑到将来需要主用mac作为我的编辑工具,配置好vim也成为了当务之急,这也是我长久以来需要解决的一个问题:know how to use it, but also know why it works this way. 换句话说,要透彻的了解到底vimrc是如何工作的,其中的脚本到底是怎么回事。

 

最基本的光标移动,添加删除等操作就不一一赘述了,这些快捷键只需要你反复使用,几个星期之后你就会爱上使用vim的感觉。本博主要还是来探究下相对比较进阶的操作和配置。 所谓他山之石,可以攻玉。还是从别人的文章中借鉴好的东西。

 

第一篇文章是来自 Bram Moolenaar的 "Seven habits of effective text editing", 讲了几个基本的vim技巧,摘录如下:

  • 搜索一个词的时候,可以选择输入 /wordname*, 这样所有wordname相关的词都会被高亮显示。
  • set hlsearch 高亮所有的search的结果
  • set incsearch 随着你输入,vim不断帮你match搜索结果
  • 光标移动到一个变量前,输入gd会跳转到其声明位置,很方便。
  • %可以帮你跳转到对应的括号(){}处,或者if / endif处。这个一试便知。
  • 连续技:当你需要重复修改一个字符串的时候,可以使用%s/string1/string2/g的方法,也可以用/string*定位下一个出现位置,cw然后输入新值,ESC后N去到下一个出现为止,输入.来重复此操作。.这个操作符非常NB,smart enough to know what to repeat. 
  • Ctrl + N可以自动寻找file和#include的file中的内容,来做到自动补全的效果。

 第二个研究一下传说中史上最强的vimrc配置,另外附一个中文改装版:基本上读注释就可以理解大部分的内容,在自己实践的过程中会有一些疑问,只能通过自己Google+琢磨,总结如下:

  • 关于使用let来定义local variable, 最简单的就是 let {var-name} = {expr} ,例子中的mapleader就是如此定义出来的,估计作者认为'的敲击比较方便,所以选择其作为mapleader是快捷键的组合更方便。let ${env-var} = {expr} 是给环境变量赋值,因为所有环境变量都是string类型,所以有时候做 let ${env-var} .= {expr}可以用来连接字符串到环境变量中,.貌似在这个环境中被用来作为字符串连接符。let &{opetion-name} = {expr},&后面跟一个option可以直接修改此option的值,比如 let &path = &path . ',/usr/local/include' 就修改了path这个全局定义的option的值。let l:&{option-name} 和 let g:&{option-name}的作用也是修改option的值,不过一个是修改本地(local,等同于setlocal),一个修改全局(global,等同于setglobal),这也就是l:和g:的意义。除此之外,在定义let的时候,*:其实各有含义。g: global variable, b: local buffer variable, w: local window variable, t: local tab variable, s: script local variable, l: local function variable, v: vim variable. 定义的local variable如果在一个function内部的话,那么其有效作用域也就是在此函数中。而g:定义的全局变量则没有此限制。
  • 关于使用map来映射命令和操作键,基本就是map {lhs} {rhs},把左边的(left hand side)的东西map到右边的{right hand side}。map也有好好几个变种,nmap只在normal模式下有效,vmap只在visual select的模式下有效,omap在operator pending的状态下有效,map则在左右状态下都有效,imap在Insert模式下有效,cmap在command模式下有效...所以选择好map的模式还是很重要的,另外,所有的扩展性map都可以简写为*m, 比如nmap=>nm,至于redefine/remove map的方法,还是直接help map吧,简洁明了。

 

 

挖坑:

1. http://easwy.com/blog/archives/advanced-vim-skills-introduce-vimrc/ 貌似不粗的总结。

posted on 2012-08-14 15:39  梁霄  阅读(224)  评论(0)    收藏  举报

导航