vim编辑器的进阶使用
2015-09-10 16:53
176 查看
原文链接:http://www.cnblogs.com/qianxudetianxia/archive/2012/07/07/2578361.html
去年9月份写了《Android拓展系列(4)--vim编辑器的基本使用》,记录了最简单的vim操作。但是vim魅力来自于他神出鬼没的技巧操作。
这些技巧,或是巧妙组合利用vim特性,或是来自于特定场合的经验总结,或是特殊小功能。
冰冻三尺,非一日之寒!
这些技巧都需要在实践中不断的练习或者使用,直到你感觉自己悄悄的上瘾。
学会了这些技巧,不仅可以让你如虎添翼,如有神助;而且绝对是你程序员身份的一种象征,它代表着专业,高端!
编辑器之神!
但是,也不要被这些吓到,只要坚持,经过开始陡峭的学习曲线之后,你会看到光明!
下面我根据自己的经验,挑选一些命令来特别说明(为了简明清晰,尽量去掉那些特别简单或者使用很少的命令)。
1. 移动指令
(1). h j k l, 方向键,记忆技巧:左右方向的是最左边和最右边的,j向下打了个勾,所以是向下键,剩下的k就是向上的键了。
(2). b, before,上一个单词(词首)
w, word,下一个单词(词首)
e, end,下一个单词(词尾)
注意这些小写的命令由字母,点,数字,下划线划分,还有这三个对应的大写字母的命令,B,W,E,类似的意思,但是是以空格区分移动的。总而言之,大写的移动范围要大。
(3). gg 首行
G 尾行,这两个命令用的较多
(4). n% 跳到n%的那行
(5). ^/0 到行首,我有时特别喜欢0,非常清晰简明的命令
$ 到行尾
(6). - 非空白行首向上移动
+ 非空白行首向下移动
(7). 行移动
?
(8).通过查找字符移动
?
2. 插入,替换,删除
(1). 学会a和i混用,不要只会用i进入插入模式,有时a进入插入模式后更方便,比如插入键盘右边的字母符号,用a的话,左右手配合起来效率更高。
(2). 学会I和A,快速进入行首和行尾插入模式,特定时刻用起来超爽!
这个很好理解,小写的i是光标前,大小的I是整行前面,o/O类似,画面很清晰。
(3). 学会o和O混用,不要只会用o进入下行编辑:
(3.1). 进入上行编辑,大写的O更快,而不是ko,双手比单手要快!
(3.2). 第一行前面想插入一行时,O比其他任何操作更直接和快速(不要先回到开头<+插入模式>+回车)
(4). r 快速替换字符,最大的好处是不许要切换模式,节省了大量时间,非常有用!(R,这个命令我用的少,有的时候用的特别混乱,就不说了)
s 删除光标后一个字符并进入插入模式。该命令提供了r命令+进入插入模式的快速实现方法。
(5). c 这个命令很强大,归类说明一下
?
(6). cc和S 修改当前行,意思是删除该行所有字符内容,但保留行首空格
D和C 删除该行光标后所有内容,无论字符还是空格,这个命令我用的很多:代码审核格式化代码时,删除空行的空格和行尾空格。
(7). 学会结合t这个命令
?
(8). 学会x和X混用,分别是向前删除和向后删除字符
(9). :rd 删除第r行
3.查找
?
4. 撤销和恢复
?
5. 滚动
?
6. 可视模式(选择块)
可视模式其实非常有用,它的选择很灵活,而且视觉效果上看着和鼠标选择一样,学习成本低,但是功能强大。
(1). v 进入可视模式
(2). shift + v 也就是大写的V,可视模式的行选择,整行整行的选择,用于刚好整行或者大篇幅内容的处理比较方便。
(3). ctrl + v 可视模式的列选择,比行选择模式更加细化,可选择连续的列进入操作
选择块模式需要和其他命令结合:
?
(4). gv 选中上次的选中区域
(5). 选中单词,句子,段落:
?
(6). 选中括号:
?
7.执行shell命令
?
比如上篇文章中提到的自动化打包脚本,我修改了代码后,需要执行一下这个脚本编译一下,但是我还不想完全退出vim,因为我还需要继续修改,就可以使用
?
是不是很方便!
8. 专题一:快速选中、删除、复制、修改引号或括号内的内容
?
9. 专题二:替换
查找并替换操作使用的太频繁了,下面针对这个专题从网上或书籍上收集了替换的几个常用的强大用法:
?
(1). 全部替换
参数g实现全部替换,否则只替换一个
?
(2). 行内替换
%代表所有行,去掉%表示当前行,只替换当前行
?
(3). 指定行范围替换
对1到10行的结果替换
?
(4). 可视模式替换
如果你觉得数行数比较麻烦,可以使用可视模式,首先进入可视模式,然后选择行
列,最后输入:自动进入:'<,'>
后面加上s/{old-pattern}/new-text/g,则只替换选择区域的结果
?
(5). 整词替换,而不是部分匹配的单词
对单词匹配模式外包一个<和>
?
(6). 多项替换
同时对多个匹配都替换成某一字符串
?
(7). 确认式替换
参数c让替换进行交互请求,需要你选择y,n,a,l,q
?
(8). 行首插入行号
把行首^替换成行号,可自定义具体形式
?
10. 专题三:大小写转换
讲这个,主要是觉得这个问题挺有意思的。
?
11. 专题四:录制
这个其实很简单,但也是很强大的功能,单独柃出来说一下。
?
12. 专题五:数字增减
这个小技巧还挺有用的,比如说定义了一系列static final变量,而且时不时要中间插入一些新的变量,这些值一般都是递增的,这时候这个技巧绝对比数字替换要方便。
?
13. 小结
工善其事,先利其器。
先想到这些,必然有很多遗漏,后面想到了什么,我会随时添加更新进来。
分类:
Android拓展系列
去年9月份写了《Android拓展系列(4)--vim编辑器的基本使用》,记录了最简单的vim操作。但是vim魅力来自于他神出鬼没的技巧操作。
这些技巧,或是巧妙组合利用vim特性,或是来自于特定场合的经验总结,或是特殊小功能。
冰冻三尺,非一日之寒!
这些技巧都需要在实践中不断的练习或者使用,直到你感觉自己悄悄的上瘾。
学会了这些技巧,不仅可以让你如虎添翼,如有神助;而且绝对是你程序员身份的一种象征,它代表着专业,高端!
编辑器之神!
但是,也不要被这些吓到,只要坚持,经过开始陡峭的学习曲线之后,你会看到光明!
下面我根据自己的经验,挑选一些命令来特别说明(为了简明清晰,尽量去掉那些特别简单或者使用很少的命令)。
1. 移动指令
(1). h j k l, 方向键,记忆技巧:左右方向的是最左边和最右边的,j向下打了个勾,所以是向下键,剩下的k就是向上的键了。
(2). b, before,上一个单词(词首)
w, word,下一个单词(词首)
e, end,下一个单词(词尾)
注意这些小写的命令由字母,点,数字,下划线划分,还有这三个对应的大写字母的命令,B,W,E,类似的意思,但是是以空格区分移动的。总而言之,大写的移动范围要大。
(3). gg 首行
G 尾行,这两个命令用的较多
(4). n% 跳到n%的那行
(5). ^/0 到行首,我有时特别喜欢0,非常清晰简明的命令
$ 到行尾
(6). - 非空白行首向上移动
+ 非空白行首向下移动
(7). 行移动
?
?
(1). 学会a和i混用,不要只会用i进入插入模式,有时a进入插入模式后更方便,比如插入键盘右边的字母符号,用a的话,左右手配合起来效率更高。
(2). 学会I和A,快速进入行首和行尾插入模式,特定时刻用起来超爽!
这个很好理解,小写的i是光标前,大小的I是整行前面,o/O类似,画面很清晰。
(3). 学会o和O混用,不要只会用o进入下行编辑:
(3.1). 进入上行编辑,大写的O更快,而不是ko,双手比单手要快!
(3.2). 第一行前面想插入一行时,O比其他任何操作更直接和快速(不要先回到开头<+插入模式>+回车)
(4). r 快速替换字符,最大的好处是不许要切换模式,节省了大量时间,非常有用!(R,这个命令我用的少,有的时候用的特别混乱,就不说了)
s 删除光标后一个字符并进入插入模式。该命令提供了r命令+进入插入模式的快速实现方法。
(5). c 这个命令很强大,归类说明一下
?
D和C 删除该行光标后所有内容,无论字符还是空格,这个命令我用的很多:代码审核格式化代码时,删除空行的空格和行尾空格。
(7). 学会结合t这个命令
?
(9). :rd 删除第r行
3.查找
?
?
?
可视模式其实非常有用,它的选择很灵活,而且视觉效果上看着和鼠标选择一样,学习成本低,但是功能强大。
(1). v 进入可视模式
(2). shift + v 也就是大写的V,可视模式的行选择,整行整行的选择,用于刚好整行或者大篇幅内容的处理比较方便。
(3). ctrl + v 可视模式的列选择,比行选择模式更加细化,可选择连续的列进入操作
选择块模式需要和其他命令结合:
?
(5). 选中单词,句子,段落:
?
?
?
?
8. 专题一:快速选中、删除、复制、修改引号或括号内的内容
?
查找并替换操作使用的太频繁了,下面针对这个专题从网上或书籍上收集了替换的几个常用的强大用法:
?
参数g实现全部替换,否则只替换一个
?
%代表所有行,去掉%表示当前行,只替换当前行
?
对1到10行的结果替换
?
如果你觉得数行数比较麻烦,可以使用可视模式,首先进入可视模式,然后选择行
列,最后输入:自动进入:'<,'>
后面加上s/{old-pattern}/new-text/g,则只替换选择区域的结果
?
对单词匹配模式外包一个<和>
?
同时对多个匹配都替换成某一字符串
?
参数c让替换进行交互请求,需要你选择y,n,a,l,q
?
把行首^替换成行号,可自定义具体形式
?
讲这个,主要是觉得这个问题挺有意思的。
?
这个其实很简单,但也是很强大的功能,单独柃出来说一下。
?
这个小技巧还挺有用的,比如说定义了一系列static final变量,而且时不时要中间插入一些新的变量,这些值一般都是递增的,这时候这个技巧绝对比数字替换要方便。
?
工善其事,先利其器。
先想到这些,必然有很多遗漏,后面想到了什么,我会随时添加更新进来。
分类:
Android拓展系列
相关文章推荐
- 构造HTTP请求Header实现“伪造来源IP”
- 转载:天涯——散文天下——《同业合租厂房的趣事》——作者:南方孤驴
- Syscall系统调用分析
- 【jQuery】点击缩略图查看大图-imgbox
- 试论政企分开与国企分开
- 开发环境的搭建
- bash编程实现插入排序
- HDOJ 1358 Period
- 转 -- 我使用过的Linux命令之date - 显示、修改系统日期时间
- 同步传输与异步传输的异同
- Email附件下载流程分析
- IOS_UI_UICollectionView
- linux gcc头文件搜索路径
- C/C++ 笔试、面试题目大汇总(转)
- shell脚本集合
- 如何设置win8系统搜狗浏览器默认下载器?win8系统搜狗浏览器设置默认下载器的方法
- IOS中枚举类型的两种定义方法以及结构体的定义
- HDOJ 3746 Cyclic Nacklace
- socket通信
- Dell R810 + Centos5 + MD3200