【51CTO独家特稿】Vim是一个类似于Vi的文本编辑器,不过在Vi的基础上增加了很多新的特性,Vim普遍被推崇为类Vi编辑器中最好的一个。Vim目前已经有类Unix版和Windows版,尽管vim较vi已经改良了不少,但是初次使用还是会一头雾水,不知如何操作,所以学习vim要首先过2关。在本文中会有资深的系统管理员与大家分享他对vim的使用心得,并且在本文最后为大家附上vim的常用命令表。
第一关是理解vim的设计思路,vim设计之初就是整个文本编辑都用键盘而非鼠标来完成,键盘上几乎每个键都有固定的用法,且vim的制作者希望用户在普通模式(也就是命令模式,只可输入命令)完成大部分的编辑工作,将此模式设计为默认模式,初学者打开vim,如果直接输入单词,结果就会滴滴乱响,这是因为vim把用户输入的单词理解为命令了。
第二关是命令关,vim有过百条命令对应编辑的需要,如果能熟练使用vim这些命令,编辑速度确实比鼠标要快很多,但是想全都记住它们也是一件难事,我想记住它们最好的方法就是多多来练习,确实把vim用在日常的文本编辑中去,且遇到难题不要放弃,而是查找解决的方法,每解决一个难题,你的vim技能就上升一级。
资深管理员的使用心得
一、FreeBSD下的vim与Linux是不一样的,建议优化各用户下的.vimrc文件,我现在的习惯做法就是随身带着二个优化文件.cshrc、.vimrc,哪台机器上有我的帐户,我就直接导入到哪台机器的/home/andrewy的帐户下,这样用起来就得心应手了;
二、在下面附表中的用法仅仅只满足System Administrator的基础工作,如果是Devoleper人员,强烈建议继续深入研究其高深语法;特别是作为PHP和JAVA的Devoleper,用vim编辑程序代码更不是问题;
三、如果跟图形界面打交道比较多的哥们,可以下载一个gvim用来学习及工作;
四、在加深vim学习的同时,也建议加强sed的理解和学习,尽量用vim+sed来完成日常中的一切编辑工作;
五、尽量用h、j、k、l来完成左下上右的工作,这个远远比你用键盘的方向键更有效率,但这是大家很容易忽视的一个问题,切肤之痛就是有的unix机器不支持方向键;
六、vim不仅仅是一个编辑器,你也可以用它来查看服务器的配置文件(.conf)、php(.php)文件及shell(.sh)文件等,如果玩得很熟练的话,也可以用其来查看日志文件,注意最后不保存退出即可;
七、这里只介绍两个有用的插件(事实上我也基本只用这两个)taglist和ctags。用过eclipse的人可能会对按住ctrl点击程序中的函数、变量等,自动跳转到其定义处的功能赞叹不已,而这个功能Vim也可以实现,用的就是ctags;
八、辅助Excel等系统处理数据,主要利用正则替换、列模式功能。如把2006-6-30替换为2006.6.30或2006.06.30;
九、我现在用的较多的gvim主要是用来编辑shell文件和处理文本文档,感觉效果非常方便;C文件也是可以用vim来编辑的;
十、我同事在windows xp下用gvim来看txt小说,看起来效果也不错;我昨天尝试在我的工作机windows 2003下用gvim看《明朝那些事儿》的txt,确实可以。
【51CTO独家特稿 转载请标明作者与出处】
下面附上Vim常用命令表,供大家参考。
#p#
Vim常用命令表:
命令模式 | 光标移动 |
h或 向左方向键 | 光标向左移动一个字符 |
j或 向下方向键 | 光标向下移动一个字符 |
k或 向上方向键 | 光标向上移动一个字符 |
l或 向右方向键 | 光标向右移动一个字符 |
Ctrl+f | 屏幕向前翻一页(常用) |
Ctrl+b | 屏幕向后翻一页(常用) |
Ctrl+d | 屏幕向前翻半页 |
Ctrl+u | 屏幕向前翻半页 |
+ | 光标移动到非空格符的下一列 |
- | 光标移动到非空格符的上一列 |
n<space> | 按下数字后再按空格键,光标会向右移动这一行的n个字符。例如20<space>,则光标会向右移动20个字符 |
0(HOME) | (是数字0)动到这一行的第一个字符处(常用) |
$(END) | 移动到这一行的最后一个字符处(常用) |
H | 光标移动到这个屏幕最上方的那一行 |
M | 光标移动到这个屏幕中央的那一行 |
L | 光标移动到这个屏幕最下方的那一行 |
G | 光标移动到文件的最后一行 |
nG | 移动到这个文件的第n行。例如20G,则会移动到这个文件的第20行(可配合:set nu) |
n<Enter> | 光标向下移动n行(常用) |
命令模式 | 查找与替换 |
/word | 在光标之后查找一个名为word的字符串(常用) |
?word | 在光标之前查找一个名为word的字符串 |
:n1,n2s/word1/word2/g
|
在第n1与n2行之间查找word1这个字符串,并将该字符串替换为word2(常用) |
:1,$s/ word1/word2/g | 在第一行与最后一行之间查找word1这个字符串,并将该字符串替换为word2(常用) |
:1,$s/ word1/word2/gc | 在第一行与最后一行之间查找word1这个字符串,并将该字符串替换为word2,且在替换前显示提示符让用户确认(conform)(常用) |
一般模式 | 删除、复制与粘贴 |
x,X | X为向后删除一个字符,X为向前删除一个字符(常用) |
Nx | 向后删除n个字符 |
Dd | 删除光标所在的那一整行(常用) |
Ndd | 删除光标所在列的向下n列,例如,20dd则事删除20列(常用) |
d1G | 删除光标所在行到第一行的所有数据 |
dG | 删除光标所在列到最后一行的所有数据 |
Yy | 复制光标所在行(常用) |
Nyy | 复制光标所在列的向下n列,例如,20yy则是复制20列(常用) |
y1G | 复制光标所在列到第一列的所有数据 |
yG | 复制光标所在列到最后一列的所有数据 |
p,P | p为复制的数据粘贴在光标下一列,P则为粘贴在光标上一列(常用) |
J | 将光标所在列与下一列的数据结合成一列 |
U | 恢复前一个动作(undo) |
编辑模式 | |
i,I | 插入:在当前光标所在处插入输入的文字,已存在 |
a,A | 添加:由当前光标所在处的下一个字符开始输入,已存在的字符会向后退(常用) |
o,O | 插入新的一行:从光标所在行的下一行行首开始输入字符(常用) |
r,R | 替换:r会替换光标所指的那一个字符;R会一直替换光标所指的文字,直到按下Esc为止(常用) |
Esc | 退出编辑模式,回到一般模式(常用) |
命令行模式 | |
:w | 将编辑的数据写入硬盘文件中(常用) |
:w! | 若文件属性为只读,强制写入该文件 |
:q | 退出vi(常用),快捷方式为SHIFT+ZZ |
:q! | 若曾修改过文件,又不想保存,使用!为强制退出不保存文件,快捷方式为SHIFT+ZQ |
:wq | 保存后退出,若为:wq!,则为强制保存后退出(常用) |
:w[filename] | 将编辑数据保存为另一个文件(类似另存新文档) |
:r[filename] | 在编辑的数据中,读入另一个文件的数据。即将filename这个文件内容加到光标所在行的后面 |
:set nu | 显示行号,设定之后,会在每一行的前面显示该行的行号 |
:set nonu | 与ser nu相反,为取消行号 |
:set nohlsearch | 可取消高亮,可编辑/etc/vimrc来编辑取消所有高亮 |
n1,n2 w[filename] | 将n1到n2的内容保存为filename这个文件 |
【编辑推荐】