神器Vim之命令介绍
前天晚上看casa直播项目的组件化,不仅了解了如何快速对现有项目进行组件化,以及进一步不断迭代,实现完全组件化的过程;同时,也被casa的vim技能的熟练程度所震撼。早就听说,vim是unix系统上文本编辑的神器,亦有许多牛人用vim编程可以键字如飞,效率之高令人望尘莫及。也许我们成不了牛人,但是学会vim还是很有必要的,毕竟它确实能够提高文本的编辑效率。于是,花了两天时间,又重新系统学习了vim的各种命令,现总结一下,方便用时再查。
一.vim的模式
vim大致有三种模式:
命令模式:主要用来浏览和修改文本内容
一般情况下,
vim打开的都是命令模式(正常模式);任何模式下,按下ESC键都可以进入命令模式插入模式:用来向文本中添加内容
通过
i、I、a、A、s、S等等指令可以进入插入模式,之后就可以修改文本内容了编辑模式:用于操作文本文件
通过
:命令可以进入编辑模式,之后就可以保存文件、改变编辑器本身状态等等

其实,vim为了增强功能,还有另外两种模式:
可视模式:用于复制文本
命令模式下,按
v可以进入可视模式,之后就可以移动光标选择文本;按ctrl + v可以进入视行模式,可以进行列选中替换模式
命令模式下,按
R进入替换模式
二.文档的操作
编辑模式下执行该命令
vim filename-> 打开文档:e file-> 关闭当前编辑的文件,并打开新的文件:e! file-> 放弃当前对文件的修改并关闭,同时打开新文件:e-> 重新加载文档:e!-> 放弃改动,并重新加载文档:f或ctrl + g-> 显示文档名、是否修改、光标位置等等:f filename-> 把编辑的文件另存为新的filename,需要wq,否则不会保存新文件:w-> 保存修改:n1,n2w filename-> 选择性保存从n1行到n2行的内容:wq或:x或ZZ-> 保存并退出:q[uit]-> 退出当前窗口:saveas filename-> 另存为新的filename:Sex-> 水平分割一个窗口,浏览文件系统:Vex-> 垂直分割一个窗口,浏览文件系统
三.文档的移动
文档的移动都是在命令模式(正常模式)下进行的
h或退格-> 左移一个字符l或空格-> 右移一个字符j-> 下移一行k-> 上移一行+或enter-> 把光标移动到下一行非空白字符w-> 前移一个单词,光标停在单词的开头W-> 前移一个单词,光标停在单词的开头,但是会忽略一些标点e-> 前移一个单词,光标停在单词的末尾E-> 前移一个单词,光标停在单词的末尾,如果词尾有标点,则移动到标点b-> 后移一个单词,光标停在单词的开头B-> 后移一个单词,光标停在单词的开头,但是会忽略一些标点ge-> 后移一个单词,光标停在单词的末尾gE-> 后移一个单词,光标停在单词的末尾,如果词尾有标点,则移动到标点(-> 前移一句)-> 后移一句{-> 前移一段}-> 后移一段fc-> 把光标移动到同一行的下一个c字符处Fc-> 把光标移动到同一行的上一个c字符处tc-> 把光标移动到同一行的下一个c字符前Tc-> 把光标移动到同一行的上一个c字符后
上面的操作都可以配合数字n使用,例如:3h 表示光标左移3个字符。下面是另外一些文档移动的命令:
0-> 移动到行首^-> 移动到本行第一个非空白字符$-> 移动到行尾n|-> 把光标移到第n列上nG-> 把光标移到第n行上H-> 把光标移到到屏幕最顶端一行M-> 把光标移到到屏幕中间一行L-> 把光标移到到屏幕最底端一行gg-> 把光标移到到文件头部G-> 把光标移到到文件尾部
四.翻屏
翻屏命令是在命令模式进行的
ctrl + f-> 下翻一屏ctrl + b-> 上翻一屏ctrl + d-> 下翻半屏ctrl + u-> 上翻半屏ctrl + e-> 向下滚动一行ctrl + y-> 向上滚动一行n%-> 把光标移动到文件内容的n%位置处zz-> 把当前行移动到屏幕中央zt-> 把当前行移动到屏幕顶端zb-> 把当前行移动到屏幕底端
五.插入文本
从命令模式进入插入模式,设置光标开始输入的位置
i-> 在光标前插入I-> 在当前行的第一个非空字符前插入a-> 在光标后插入A-> 在当前行最后插入o-> 在下面新建一行插入O-> 在上门新建一行插入:r filename-> 在当前行位置插入另一个文件的内容:[n]r filename-> 在第n行插入另一个文件的内容:r !date-> 在当前行(空行)插入日期,或当前行非空,就在下一行插入日期。同理,:r !command可以把shell命令的输出插入当前行
小技巧
- 命令模式下,按数字
n,然后按i,输入=,最后按ESC,就会在光标处插入n个=,这在做分割线时非常有用 - 视行模式下(
ctrl+v),选择要操作的行,按i(I)输入插入内容,之后按两次ESC,就会在每行选定的区域出现插入的内容
下面是修改文本的命令,功能是先删除文字,然后等待插入文本:
c[n]w或[n]cw-> 删除光标后n个单词,然后进入插入模式c[n]l或[n]cl-> 删除光标后n个字母,然后进入插入模式c[n]h或[n]ch-> 删除光标前n个字母,然后进入插入模式[n]cc-> 删除当前行及以后的n-1行,然后进入插入模式[n]s-> 删除光标之后的n个字符,然后进入插入模式[n]S-> 删除当前行及以后的n-1行,然后进入插入模式
类似的操作也适用于:d、y
六.剪切、复制和粘贴
在命令模式执行该命令
[n]x-> 剪切光标右边n个字符,相当于d[n]l[n]X-> 剪切光标左边n个字符,相当于d[n]hy-> 在可视模式下复制选中的文本yy或Y-> 复制整行文本y[n]w-> 复制n个词y$-> 复制从光标到行尾的内容y0-> 复制从光标到行首的内容y^-> 复制从光标到本行非字符的内容:m,ny-> 复制m行到n行的内容y1G或ygg-> 复制光标以上所有行yG-> 复制光标以下所有行d-> 删除(剪切)在可视模式下选中的文本[n]dd-> 删除(剪切)n行:m,nd-> 删除(剪切)m行到n行的内容p-> 在光标之后粘贴P-> 在光标之前粘贴
文本对象可以快速的操作一个词、一个句子、一个段落等等,大大加快了文本操作的便捷性。其中,y、d、c、v都可以和这些命令配合使用,具体如下:
aw-> 一个词as-> 一个句子ap-> 一个段落
七.查找和替换
7.1查找
查找是在命令模式下执行的命令,用于快速查找特定的内容
/something-> 在光标文本后面查找something?something-> 在光标文本前面查找something/pattern/[+]n-> 将光标停在匹配pattern模式后面第number行/pattern/[-]n-> 将光标停在匹配pattern模式前面第number行n-> 向后查找下一个N-> 向前查找上一个
7.2替换
替换是在编辑模式下执行的命令,用于替换特定的内容
:s/old/new-> 用new替换当前行的第一个old:s/old/new/g-> 用new替换当前行所有的old:n1,n2/old/new/g-> 用new替换n1行到n2行的所有old:%s/old/new/g-> 用new替换文件中的所有old:%s/^/xxx/g-> 在每一行的行首插入xxx:%s/$/xxx/g-> 在每一行的行尾插入xxx
八.排版
vim可以进行简单的快速的排版,下面的排版是在命令模式下执行
[n]<<-> 向左缩进一个n个shiftwidth[n]>>-> 向右缩进一个n个shiftwidthJ-> 拼接当前行和下一行gJ-> 拼接后不留空格
下面的排版是在编辑模式执行的命令
:le(ft)-> 本行文字靠左:ce(nter)-> 本行文字居中:ri(ght)-> 本行文字靠右
vim还可以统计本行或者整个文本的字数,行数等等信息
ctrl + g统计文档的字符数、行数、文件名等信息
九.编辑文件
vim可以一次编辑多个文件,如:vim a.txt b.txt c.txt
:next或:n-> 编辑下一个文件:2n-> 编辑下2个文件:previous或:N-> 编辑上一个文件:wnext-> 保存当前文件,并编辑下一个文件:wprevious-> 保存当前文件,并编辑上一个文件:args-> 显示文件列表vim -o filenames-> 在水平分割多个窗口中编辑多个文件vim -O filenames-> 在垂直分割多个窗口中编辑多个文件:split或:sp-> 把当前窗口水平分割成两个窗口:vsplit或:vsp-> 把当前窗口垂直分割成两个窗口:qall-> 关闭所有窗口:wall-> 保存所有修改过的窗口:only-> 只保留当前窗口,关闭其它窗口:close-> 关闭当前窗口[n]u-> 取消n个改动U-> 取消当前所有的改动
在vim窗口分屏后,在多个编辑窗口直接切换编辑的命令如下:
ctrl+w ctrl+w-> 切换下一个窗口ctrl+w p-> 切换到前一个窗口ctrl+w h(l,j,k)-> 切换到左 (右、下、上)的窗口ctrl+w H(L,J,K)-> 切换窗口到最左(右、下、上)的窗口
进入替换模式,就可以快速替换当前的文本,在命令模式才可以进入替换模式
r-> 替换光标出的一个字符R-> 进入替换模式,可以进行多次替换,按esc回到命令模式
十.编程辅助技能
g;-> 上一个修改过的地方g,-> 下一个修改过的地方[[-> 跳转到上一行函数块开始的位置,需要有单独一行的{]]-> 跳转到下一行函数块开始的位置,需要有单独一行的{[]-> 跳转到上一行函数块结束的位置,需要有单独一行的}][-> 跳转到下一行函数块结束的位置,需要有单独一行的}%-> 移动到匹配()、{}、[]的另一个符号上- 可视模式下,选择代码块,然后按
=,代码会进行自动缩排
下面的符号匹配能够高效的处理文本,可以把c、d、y和'、"、(、[、{、<结合起来使用,可以加快编程速度,下面以c为例:
ci'-> 修改、剪切或复制'之间的内容,不包含'本身ca'-> 修改、剪切或复制'之间的内容,包含'本身
十一.命令行
下面的命令是在编辑模式下执行
:! cmd-> 执行外部命令:r !cmd-> 将命令的返回结果插入文件当前的位置:pwd-> 显示vim的工作目录:ver-> 显示版本信息
十二.Mac Terminal快捷键
ctrl+u-> 删除整行ctrl+l-> 清屏
vim的命令大致有这么多,还有一些不是太常用的没有列举出,如有需要,请查看相关手册。如果你想用vim高效的编辑文本,还是要多练习,毕竟这么多命令,无法一下子全部记住。最后,附上一张vim的指法引导图,可以参考一下。(本文所有图片来自互联网,版权归源作者所有)

参考资料
http://blog.csdn.net/scaleqiao/article/details/45153379
http://www.cnblogs.com/xiaowant/articles/1992923.html
http://www.cnblogs.com/yangjig/p/6014198.html
神器Vim之命令介绍的更多相关文章
- linux最强编辑神器vim常用命令大全:编辑、插入、删除、替换、保存...
我说vim是编辑器之神大家没有意见吧 下面分享一些vim常用命令,大家可以收藏一下 进入vim: vim配置: vim中光标移动: vim中屏幕滚动: vim中插入文本类: 文本替换: 格式 : 范 ...
- Vim global命令和重复操作
Vim global命令和重复操作 Vim global命令允许我们在某个指定模式的所有匹配行上运行可执行的 Ex 命令,缩写形式为 :g,其处理重复工作的效率极高. 一.Vim global命令介绍 ...
- git各种命令介绍以及碰到的各种坑
一.各种命令介绍: git pull:从其他的版本库(既可以是远程的也可以是本地的)将代码更新到本地,例如:'git pull origin master'就是将origin这个版本库的代码更新到本地 ...
- [转]vim常用命令
[转]vim常用命令 http://www.cnblogs.com/sunyubo/archive/2010/01/06/2282198.html http://blog.csdn.net/wooin ...
- vim替换命令
转载:http://blog.csdn.net/glorin/article/details/6317098 替換(substitute) :[range]s/pattern/string/[c,e, ...
- 程序猿的编程神器 - vim
一.官方文档: 当你首次安装好 Vim 之后.能够用 :help tutor 或者 :help tutor@cn 命令.进入一个30分钟的 Vim 新手教程.你也能够下载一个 Vim Document ...
- vi/vim高级命令集粹
vi/vim高级命令集粹 (ctrl +v过来 留着以后看) 1.交换两个字符位置 xp 2.上下两行调换 ddp 3.把文件内容反转 :g/^/m0/ (未通过) 4.上下两行合并 J 5.删除所有 ...
- 【转】vim替换命令
vim替换命令 free:此文后面涉及了正则表达式,随便看了一下,觉得正则表达式有时间学一学对于在Linux下操作也是方便许多 替換(substitute) :[range]s/pattern/str ...
- vim相关命令单独记载
1. 无敌的可扩展性 1.1 可扩展性给了软件强大的生命 曾几何时,Windows用户对软件的可扩展性没有概念,他们只能对他们使用的软件进行非常有限的定制.扩展软件的权利保留在软件开发者手中.软件的使 ...
随机推荐
- 从零Wordpress建站经验分享,内附耗时间及成本
5月末回国,工作进入空档期. 每天上班没有任务压身,日子过得反而更加难熬. 一直自己做一个网站,却总下不定决心,总是懒得迈出第一步. 正巧朋友需要建设一个宣传用网站. 外面的公司给他报价很高. 反正我 ...
- Python-Flask:利用flask_sqlalchemy实现分页效果
Flask-sqlalchemy是关于flask一个针对数据库管理的.文中我们采用一个关于员工显示例子. 首先,我们创建SQLALCHEMY对像db. from flask import Flask, ...
- easyui-dialog里面的东西
<div id="id_open" class="easyui-dialog" title="公司简介" style="wi ...
- JS操作字符串常用的方法
JS操作String对象的方法 charAt(index):返回指定索引处的字符串charCodeAt(index):返回指定索引处的字符的Unicode的值concat(str1,str2,...) ...
- MongoDB的Windows安装
一.下载MongoDB安装文件 下载地址:http://pan.baidu.com/s/1nvEuDD3 二.双击下载的文件,根据向导一直到finish.比如安装目录为 d:\mongodb 1.创建 ...
- Miller-Rabin 素性测试
根据费马小定理,若p为素数,则必有a^(p-1) mod p=1 对和p互质的a成立. 根据二次探测定理:如果p是素数,且0<x<p,则方程x^2 mod p=1的解为1或p-1. 所以若 ...
- bzoj2002: [Hnoi2010]Bounce 弹飞绵羊 [分块][LCT]
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...
- jacoco统计Android手工测试覆盖率并自动上报服务器
改进了几个点 1. 不用借助Instrumentation启动,正常启动即可: 2. 测试代码不用push到主分支,主分支代码拉到本地后用git apply patch方式合并覆盖率代码: 3. 测试 ...
- Node.js安装及环境配置之Windows篇
Node.js安装及环境配置之Windows篇 一.安装环境 1.本机系统:Windows 10 Pro(64位)2.Node.js:v6.9.2LTS(64位) 二.安装Node.js步骤 1. ...
- EasyUI combobox 中文无法检索最终解决方案!
写在前面: 因为之前一直用EasyUI的combobox控件,但是苦于在火狐浏览器下输入中文无法直接检索必须在输入完成后再敲击一下键盘才可以(按一下shift或空格),原因是中文输入法屏蔽了EasyU ...