vim就不多介绍了,很好用很强大。在windows下可以用gvim,配置一下_vimrc文件,再配合cscope和ctag等工具,就是一个功能强大的IDE。
常用的命令在这里总结下,以后忘了可以看看,部分摘自网络轻快的VIM和部分网摘。
首先记着它的三种模式,命令模式,插入模式,可视模式。
常用的命令:分类一下,无非是编辑相关的,移动,复制,粘贴,插入,删除等操作。
窗口相关的,多窗口,窗口分割和tab标签。
命令执行相关的以及配合cscope和ctag函数间查找和跳转的。
执行外部命令的,!make,find等等。。。
Vim的quickfix模式等等,可以方便的定位到编译的错误处。。
先来张截图:
首先是移动,
进入vim后键入:
'0
即回到当初你编辑的位置
PS: 如果想把光标停止在指定的行, 这样
vim +n urfile // n为行号
如果要停留在行尾, 这样
vim + urfile
整行移动
0 移动到行首
$ 移动到行末
+ 移动到下一行开头
- 移动到上一行开头
这里需要注意的是+ -和上面的j k有什么不同之处
j k也是移动到上一行和下一行,但它们移动的是光标所在的位置
+ -不管你的光标在何处,总是移动到下一行或上一行的行首
单词移动
W w 移动到下一个单词开头
E e 移动到下一个单词结尾
B b 倒退到上一个单词开头
需要注意的是,E会忽略标点符号,如:I‘m,e会当成两个单词,E则不会
同样,在命令前加上数字代表执行次数,如:2w,表示往下移动2个单词
Ctrl+f 往前滚动一整屏
Ctrl+b 往后滚动一整屏
Ctrl+d 往前滚动半屏
Ctrl+u 往后滚动半屏
Ctrl+e 往后滚动一行
Ctrl+y 往前滚动一行
看似比较多,但是可以根据键盘的位置来进行记忆,并且下面两个也不常用
上面的滚屏都有一个共同点,就是会改变光标的位置,且屏幕也在改变
如果想让光标维持在原来的位置实现滚屏请看下面
用z调整光标
z
z. 将光标所在行移动到屏幕中间
z- 将光标所在行移动到屏幕低端
tips:980z
好吧,有时候你其实不想滚屏,你只想在当前屏幕中移动
请往下看
在屏幕中移动
H 移动到屏幕顶端的行
M 移动到屏幕中央的行
L 移动到屏幕底端的行
nH 移动到屏幕顶端往下的第n行
nL 移动到屏幕顶端往上的第n行
据我猜测这三个字母应该是HIgh、Middle和Low的缩写,其实挺好记的
多练习几遍就行了,需要注意的是:这里只是光标的位置变化,和上面两种不同
tips:你可以用+ -和j k实现同样的位置变化,只不过要操作多次而已
+ -和j k的区别忘了吗?往上看看吧
在当前行移动
^ 移动到当前行的第一个非空格处
n| 移动到当前行的第n列
这里的^与上面的0通常情况下表示的位置是一样的
而n|,个人感觉还没有h l方便,慢慢的数出行数还不如直接按着h l 左右移
根据文本块移动
所谓的文本块也就是句子、段落、小节等
( 移动到当前句子开头
) 移动到下一个句子开头
{ 移动到当前这一段开头
} 移动到下一段开头
[[ 移动到当前这一节的开头
]] 移动到下一节的开头
其中,VIM以? . !等符号来标记一个句子
空白行来标记一个段落
用节宏来标记一个节(节宏是什么我还没搞清楚)
根据行号来移动
Ctrl+g 显示当前行信息
nG 转至第n行
G 转至文本末尾
gg 移至文本开头
如果你不知道当前是多少行的话就可以用Ctrl+g来查看
如果想转到第800行,可以用800G
其实z命令也可以做到,并且把光标移动到第一行
tips:``反引号可以返回到使用G之前的位置
fx:移动光标到当前行的下一个 x 处。很明显,x 可以是任意一个字母,而且你可以使用 ; 来重复你的上一个 f 命令。
tx:和上面的命令类似,但是是移动到 x 的左边一个位置。(这真的很有用)
Fx:和 fx 类似,不过是往回找。使用 , 来重复上一个F命令。
Tx:和 tx 类似,不过是往回移动到 x 的右边一个位置。
b:光标往前移动一个词。
w:光标往后移动一个词。
0:移动光标到当前行首。(是数字0)
^:移动光标到当前行的第一个字母位置。
*:读取光标处的字符串,并且移动光标到它再次出现的地方。
#:和上面的类似,但是是往反方向寻找。
/text:从当前光标处开始搜索字符串 text,并且到达 text 出现的地方。必须使用回车来开始这个搜索命令。如果想重复上次的搜索的话,按 n移动到下个 text 处,N 移动到上一个 text 处 。
?text:和上面类似,但是是反方向。
m{a-z}:在当前光标的位置标记一个书签,名字为 a-z 的单个字母。书签名只能是小写字母。你看不见书签的存在,但它确实已经在那里了。
`a:到书签 a 处。注意这个不是单引号,它一般位于大部分键盘的 1 的左边。
`.:到你上次编辑文件的地方。这个命令很有用,而且你不用自己去标记它。
%:在成对的括号等符号间移动,比如成对的 [ ] , { }, ( ) 之间。将光标放到任意符号上,然后通过 % 来移动到和这个符号匹配的符号上,% 还可以正确的识别括号的嵌套层数,总是移动到真正匹配的位置上。因此这个命令在编辑程序代码的时候非常有用,可以让你方便的在一段代码的头尾间移动。
上一节我们讲到了VIM中的移动,既然已经能够在屏幕和光标间游刃有余了
那么,现在就来谈谈插入命令
不知道有多少VIM新手和我当年(去年)一样,信誓旦旦的以为只有i可以插入
唉,现在想想都觉得可笑,都是Windows下的编辑器用多了的结果
鼠标一点,妈妈再也不用担心我的文本插入了……悲剧!
好了,让我们抛弃过去吧,从现在起奋斗,也许不算太晚
这是俺写的《轻快的VIM系列》第二节,每一节都会不断更新,加入更多技巧在里面
VIM新手们加油,咱一起总结,一起努力练习……
基础
字符位置插入
i 在光标之前插入
a 在光标之后追加
你看,其实刚开始用这两个就足够了,这就是最基础的
为什么这么说呢?因为你可以依靠上一节中的移动命令来达到任意位置,然后再大力插入
不要忘了,VIM中最重要的技巧之一就是命令间的配合使用
进阶
行位置插入
A 在一行的结尾处追加
I 在一行的开头处插入
o 在光标所在位置的下一行打开新行插入
O 在光标所在位置的上一行打开新行插入
当然,如果你认为先移动光标然后插入或追加慢了,那么就应该用上面这种方法
它们是以行做单位
在这里我还是需要提醒一下,命令前加数字代表执行次数
tips1:10I*
这样就可以在一行开头输入十个*
tips2:同样,5o###
这样就可以在下列5行中每一行开头插入###
看,这样一来,再需要输入重复文本的时候就变得方便了对不对,你可以自己试着扩展思维……
但我依然会不厌其烦的提醒你,命令的组合也是最重要的技巧之一
合并行
有时候你也许会想合并两行
J 合并两
你只需要把光标移动到首行,然后按3次J即可
让我感觉奇怪的是,我直接使用3J却只能合并两行,4J才能合并3行
谁来告诉我为什么
这一节我们来看看删除,删除命令比较简单,不过要使删除更有效率
你需要配合我们第一节中讲的各种移动命令
字符删除
x 删除光标所在处字符
X 删除光标所在前字符
这里没有什么可注意的地方,但需要说明一下的是
通常情况下,新手一旦着急便会按着x不动,从而达到删除一大块文本的目的
如果是头几天使用还好说,但从长久考虑,你还需要学习下面的删除命令
单词删除
dw 删除到下一个单词开头
de 删除到本单词末尾
dE 删除到本单词末尾包括标点在内
db 删除到前一个单词
dB 删除到前一个单词包括标点在内
很明显,d是delete的缩写,而上面的x则是老式的清除意思
这里e表示往前删除一个单词,b表示往后删除一个单词,第一节中移动写的很清楚
要注意的是e b会忽略标点,如don't,它们会把这当做三个单词don、‘ 和 t 来删除
而大写的E B则不会
行删除
dd 删除一整行
D d$ 删除光标位置到本行结尾
d0 删除光标位置到本行开头
这三种用法是最好理解的
我一开始便说过,删除命令需要配合移动命令才能发挥更多作用
你可以看看第一节内容,然后自己尝试着删除一节或一段内容等
tips:3dd代表删除三行,聪明的你一定早就知道了
http://www.cnblogs.com/nerxious/archive/2012/12/21/2828520.html
我想每个Coder都深刻的明白,修改这一操作在代码的世界里是多么重要
与其说修改,无非就是删除了再插入,但VIM把这两者结合的很有效率
闲话少说,让我们再次使用这轻快的VIM在code上起
字符替换
r 单个字符替换
R 连续替换
~ 更改大小写
很简单,多试试就行了
tips:4~更改连续4个字符的大小写,很有意思
单词修改
cw 从光标处修改到单词结尾
cb 从光标处修改到单词开头
这里直接使用cw或cb操作很简单,要注意的是加数字的使用方式
此时2cw 或者 c2w都可以使用,功能一样
行修改
c$ 从光标修改到本行末尾
C 功能同上
c0 从光标修改到本行开头
cc 删除整行从头修改
S 功能同上
s 删除光标所在位置的字符,然后插入
这里有点难记,主要是多练习才能看到效果
其中,c$和C功能是一样的,都是从光标修改到行尾,d$+a达到相同效果
c0和d0+i效果一样,区别是少输入一次
cc和S效果也是一样,其实S是属于插入的范畴,这里类似,所以一起讲了
再来是s,它会删除光标处的字符再插入,效果等同于x+i或c+space
多行修改我想就不用说了,前面加上数字再组合命令就可以了
从上面看来,我们应该可以更深刻的认识到,VIM中大部分命令是组合使用的
利用好了这点才能更快的摸索出自己的使用习惯,从而高效修改
操作相同文本的时候复制尤其有效,在Windows中我们都习惯了先用鼠标选择文本
而Vim下则不用那么麻烦,你甚至可以使用可视模式操作,但这里先略过
我在这一节主要说说命令模式下的复制
在讲复制之前我要先说一个简单到不行的命令
粘帖
p 粘帖
复制的形式可以很多,但是粘帖的形式却没多少
无非就是加数字达到多次粘帖什么的
其实准确的说,p应该是放置的意思
不过我也搞不清是paste还是put的缩写
单词和字符复制
ynl 向右复制n个字符
ynh 向左复制n个字符
ynw 向前复制n个单词
ynb 向后复制n个单词
由于复制操作通常是在量比较大的情况下进行
所以这里我使用了n代替需要操作的个数
需要说明的是,这里看起来并没有多大意义
因为复杂字符和单词还没有直接插入的方式来的快
行复制
y0 复制到行首
y$ 复制到行末
yy 复制整行
yH 从当前行复制到屏幕顶端
yL 从当前行复制到屏幕低端
这里前两条用的也比较少
但是整行或多行复制才是yy的方便之处
tips:1. 4yy也就是复制4行
2.y几乎可以跟任何光标移动命令结合,不信你试试
剪切
说完了复制这里顺便把剪切的命令也说下
其实剪切很简单,就是先删除,然后按p粘帖
比如dd删除一行后,这一行会被放入缓冲区
接着移动到你想放置的位置,按p,就被粘帖好了
恢复在VIM里比较简单,不过想要具体恢复到某个时间段很难
就我的经验而言,有时候使用恢复还不如删了重写
这里我们来讲讲恢复、撤销和重复命令的使用
u 撤消上次命令
U 恢复整行
ctrl+r 重做
. 重复
e! 全文恢复
如果有使用office的经验,那么这里的撤销和重做应该很好理解
比如我用dw删除一个单词,按下u就会回到没删除之前
一旦我后悔了,ctrl+r便会重新删除一次
其中U也十分好用,它能恢复本行内容,无论你在本行做过什么
需要注意的是,你不能在别处操作多次后再回到那一行来恢复
接着.号能够重复你上次命令
比如dd删除一行,你接着按一次.就相当于重新使用一次dd命令
如果你按5.那就是重复dd5次了
最后e!就牛逼了,当你把代码写的无比凌乱之时
它能恢复到最初形态,只要你还没使用过w、wp或x保存
Vim 添加注释 详解
一、手注释动 vim下
1.插入注释:按Ctrl+v进入virtual模式
用上下键选中需要注释的行数
按大些“I”进入插入模式,输入注释符“#”,
然后立刻按下ESC(两下)
2.删除注释先按v进入列模式横向选中列的个数(如"/ /"注释符号,需要选中两列),
再按Esc 再按ctrl+v 进入列编辑模式,向下或向上移动光标按x、d键删除
vim 从 vim7 开始加入了多标签切换的功能, 相当于多窗口.
之前的版本虽然也有多文件编辑功能, 但是总之不如这个方便啦。
用法
:tabnew [++opt选项] [+cmd] 文件 建立对指定文件新的tab
:tabc 关闭当前的tab
:tabo 关闭所有其他的tab
:tabs 查看所有打开的tab
:tabp 前一个
:tabn 后一个
标准模式下:
gt , gT 可以直接在tab之间切换。
还有很多他命令, 看官大人自己, :help table 吧。
看过Swaroop的书之后,就越来越喜欢VIm了。
尤其是多窗口,真是非常Cool哦~
解释一下这是咋弄出来的:
在Vim中开多窗口其实比较简单,也有不只一种方法,直接使用命令:new默认就是打开一个水平分割的新窗口。另外一个命令就是:split(sp)。
但是默认水平分割多少有点不爽,因为本来屏幕就是宽屏的,代码几乎不会写那么长了,而真正缺少的垂直空间,所以这个时候就要用到垂直分割了,命令是:vsplit(vs),很简单了一目了然。
打开了这么多窗口不知道如何切换肯定不行啦。切换也很简单,组合键ctrl+w,然后通过j/k,来定位窗口,注意看好窗口光标变化。不过个人感觉这样比较麻烦,每切换一次窗口都要先按组合键才行。还好还有另一种方法,那就是直接连续按两次ctrl+w组合键,vim会自动跳到下一个窗口。
另外更改窗口宽度的命令是: Crtl+w > 将当前窗口向右边扩展一行,将 > 换成 < 就是向左边扩展一行。也可以在之前使用数字代表扩展的行数, 5 Ctrl+w > ,向右边扩展5行。
更改窗口高度类似,只是命令是Ctrl+w + ,增加高度,- 减小高度。
1、打开多个窗口
打开多个窗口的命令以下几个:
横向切割窗口
:new+窗口名(保存后就是文件名)
:split+窗口名,也可以简写为:sp+窗口名
纵向切割窗口名
:vsplit+窗口名,也可以简写为:vsp+窗口名
2、关闭多窗口
可以用:q!,也可以使用:close,最后一个窗口不能使用close关闭。使用close只是暂时关闭窗口,其内容还在缓存中,只有使用q!、w!或x才能真能退出。
:tabc 关闭当前窗口
:tabo 关闭所有窗口
3、窗口切换
:ctrl+w+j/k,通过j/k可以上下切换,或者:ctrl+w加上下左右键,还可以通过快速双击ctrl+w依次切换窗口。
4、窗口大小调整
纵向调整
:ctrl+w + 纵向扩大(行数增加)
:ctrl+w - 纵向缩小 (行数减少)
:res(ize) num 例如::res 5,显示行数调整为5行
:res(ize)+num 把当前窗口高度增加num行
:res(ize)-num 把当前窗口高度减少num行
横向调整
:vertical res(ize) num 指定当前窗口为num列
:vertical res(ize)+num 把当前窗口增加num列
:vertical res(ize)-num 把当前窗口减少num列
5、给窗口重命名
:f file
6、vi打开多文件
vi a b c
:n 跳至下一个文件,也可以直接指定要跳的文件,如:n c,可以直接跳到c文件
:e# 回到刚才编辑的文件
7、文件浏览
:Ex 开启目录浏览器,可以浏览当前目录下的所有文件,并可以选择
:Sex 水平分割当前窗口,并在一个窗口中开启目录浏览器
:ls 显示当前buffer情况
8、vi与shell切换
:shell 可以在不关闭vi的情况下切换到shell命令行
:exit 从shell回到vi
from:http://hi.baidu.com/dtzw/blog/item/64a6f3f2fc10721eb07ec590.html
vim是个优秀的编辑器,有很多功能你不知道。
比方说vim可以模拟多窗口(多tab)以及拆分窗口,可以同时编辑多个文件。
多tab时,每个tab可以编辑一个文件,但不同的tab不能同时显示,要切换。
拆分窗口后,窗口是同时显示的,每个窗口可以编辑一个文件。
两种方式可以同时生效的,现在试一下:
命令模式:输入sp,窗口就上下拆分成两个窗口了。
按ctrl+w然后再按c,就关掉当前窗口了。
连按两次ctrl+w,可以在窗口间切换。
输入vs,就是垂直拆分。
也可以多tab,输入命令tabnew,就创建一个新tab,命令tabn就切换到下一个tab,tabn3就切换到第三个tab,tabc就关掉当前tab。
具体看vim的手册,或者vim里help 某个命令。
vim 从 vim7 开始加入了多标签切换的功能, 相当于多窗口.
之前的版本虽然也有多文件编辑功能, 但是总之不如这个方便啦。
用法
:tabnew [++opt选项] [+cmd] 文件 建立对指定文件新的tab
:tabc 关闭当前的tab
:tabo 关闭所有其他的tab
:tabs 查看所有打开的tab
:tabp 前一个
:tabn 后一个
标准模式下:
gt , gT 可以直接在tab之间切换。
还有很多他命令, 看官大人自己, :help table 吧。
看过Swaroop的书之后,就越来越喜欢VIm了。
尤其是多窗口,真是非常Cool哦~
解释一下这是咋弄出来的:
在Vim中开多窗口其实比较简单,也有不只一种方法,直接使用命令:new默认就是打开一个水平分割的新窗口。另外一个命令就是:split(sp)。
但是默认水平分割多少有点不爽,因为本来屏幕就是宽屏的,代码几乎不会写那么长了,而真正缺少的垂直空间,所以这个时候就要用到垂直分割了,命令是:vsplit(vs),很简单了一目了然。
打开了这么多窗口不知道如何切换肯定不行啦。切换也很简单,组合键ctrl+w,然后通过j/k,来定位窗口,注意看好窗口光标变化。不过个人感觉这样比较麻烦,每切换一次窗口都要先按组合键才行。还好还有另一种方法,那就是直接连续按两次ctrl+w组合键,vim会自动跳到下一个窗口。
另外更改窗口宽度的命令是: Crtl+w > 将当前窗口向右边扩展一行,将 > 换成 < 就是向左边扩展一行。也可以在之前使用数字代表扩展的行数, 5 Ctrl+w > ,向右边扩展5行。
更改窗口高度类似,只是命令是Ctrl+w + ,增加高度,- 减小高度。
VIM 标签页 (tab)
新建标签页
使用:tabe命令和文件名参数,可以在新标签页中打开指定的文件。也可以使用:tabnew命令,在新标签页中编辑新的文件。命令:tab split将在新标签页中,打开当前缓冲区中的文件。
命令:tabf允许你在当前目录搜索文件,并在新标签页中打开。比如我想打开当前目录下的img.txt文件,那么就可以使用:tabf img.*命令。请注意,此命令只能打开一个文件,如果搜索出多个匹配文件,将提示你“文件名过多”,这时你需要给出更精确的搜索条件以打开文件。
Vim默认最多只能打开10个标签页。你可以用set tabpagemax=15改变这个限制。
列示标签页
命令:tabs可以显示已打开标签页的列表,并用“>”标识出当前页面,用“+”标识出已更改的页面。
关闭标签页
命令:tabc可以关闭当前标签页。而命令:tabo将关闭所有的标签页。
切换标签页
命令:tabn或gt可以移动到下一个标签页。而命令:tabp或gT将移动到上一个标签页。如果已经到达最后面或最前面的标签页,将会自动转向循环。
如果你打开了很多标签页,那么可以使用:tabfirst或:tabr命令,移动到第一个标签页。使用:tablast命令,移动到最后一个标签页。
移动标签页
如果你希望按照指定的次序排列标签页,那么你可以使用:tabm命令。请注意,标签页次序是从0开始计数的。比如命令:tabm 1将把当前标签页移动到第2的位置。如果你没有为:tabm命令指定参数,那么当前标签页将会被移动到最后。
配置标签页
默认情况下,只有用户新建了标签页才会在窗口上方显示标签栏,这是由选项set showtabline=1决定的。如果我们希望总是显示标签栏,那么可以用set showtabline=2命令来设置。如果我们希望完全不显示标签栏,那么可以使用set showtabline=0来设置。
多标签页命令
使用:tabdo命令,我们可以同时在多个标签页中执行命令。比如我们打开了多个标签页,需要把这些文件中的“food”都替换成“drink”,那么就可以使用:tabdo %s/food/drink/g命令,一次完成对所有文件的替换操作,而不用针对每个文件重复操作。
图形界面
如果你使用的是带有图形界面的gVim,那么新建、关闭和打开标签页的操作,都可以通过在标签页上右击鼠标完成。只需要点击相应标签,就可以在不同的标签页间切换。
通过:help tab-page-intro命令,可以获得关于标签页使用的更多信息。
命令小结
:tabnew 新建标签页
:tabs 显示已打开标签页的列表
:tabc 关闭当前标签页
:tabn 移动到下一个标签页
:tabp 移动到上一个标签页
:tabfirst 移动到第一个标签页
:tablast 移动到最后一个标签页
http://www.webinno.cn/blog/article/view/44
在 vi 中, 移动光标和编辑是两件事, 正因为区分开来, 所以可以很方便的进行光标定
位和编辑. 因此能更快一点移动光标是很有用的.文中的c-表示ctrl,大小写敏感。光标定位
还需结合搜索。
=== 光标定位 ==
h或^h 向左移一个字符
j或^j或^n 向下移一行
k或^p 向上移一行
l或空格 向右移一个字符
w 移到下一个字的开头
W 移到下一个字的开头,忽略标点符号。默认的情况下W认为字符串时已空格分开的。
cp /mnt/marvell/main.sh /stv/
所以上面一行在W的选择下只有三个字符串,即 1 cp 2 /mnt/marvell/main.sh 3 /stv/
这与w时不一样的。
e 移到下一个字的结尾
E 移到下一个字的结尾,忽略标点符号
b 移到前一个字的开头
B 移到前一个字的开头,忽略标点符号同W
| 移到当前行的第一列
0 移到当前行的第一列字符处,会忽略行前的空白。
n| 移到当前行的第n列
^ 移到当前行的第一个非空字符
$ 移到当前行的最后一个字符
return或+ 移到下一行的第一个字符
- 移到前一行的第一个非空字符
L 移到屏幕的最后一行
M 移到屏幕的中间一行
H 移到屏幕的第一行
G 移到文件的最后一行
nG 移到文件的第n行
( 移到句子的开头
) 移到句子的结尾
{ 移到段落的开头 //我用的时候发现{只是移动到前一个空行 }移动到后一个空行首
} 移到下一个段落的开头
/**vim 第一列插入{来定义一个段落 */
[[ 回到段落的开头处
]] 向前移到下一个段落的开头处
m(a-z) 用一个字母来标记当前位置,如用mz表示标记z
'(a-z) 将光标移动到指定的标记,如用'z表示移动到z
'' 此命令相当有用, 它移动光标到上一个标记处, 比如用 gd, * 等查(此处时两个单引号不是双引号)
找到某个单词后, 再输入此命令则回到上次停留的位置.
'. 此命令相当好使, 它移动光标到上一次的修改行.
`. 此命令相当强大, 它移动光标到上一次的修改点.
% 从大括号的开始移动到大括号的结束位置
: 后边加行号就是跳到这一行
=== 屏幕定位 ==
c-e 将屏幕上滚一行
c-y 将屏幕下滚一行
c-u 将屏幕上滚半页
c-d 将屏幕下滚半页
c-b 将屏幕上滚一页
c-f 将屏幕下滚一页
z-return 将当前行置为屏幕的顶行
nz-return 将当前行下的第n行置为屏幕的顶行
z. 将当前行置为屏幕的中央
nz. 将当前行上的第n行置为屏幕的中央
z- 将当前行置为屏幕的底行
nz- 将当前行上的第n行置为屏幕的底行
本文链接:http://www.webinno.cn/blog/article/view/43
最近读了一下Swaroop C H的,其中涉及到一些Vim命令,总结如下:
命令 说明
7j 将光标下移7行
dw 删除一个单词
* 搜索文件中当前光标所在处的单词
:50,100s/old/new/g 将第50-100行之间的"old"替换为"new"
:sp “分割”视角,同时浏览一个文件的两个不同部分
gf 打开以当前光标处的单词为文件名的文件
:colorscheme desert 更换色彩方案,将色彩方案换为desert
i 将Vim切换到插入模式
:%s/from/to/g 将全文中的"from"全部替换为"to"
:s 表示替换,substitute
:0,10s/from/to/gc 将文本前10行中的"from"替换为"to",并在每次替换之前都要
用"yes"和"no"确认,c表示confirmation
来通知Vim命令已经结束
:help vim-modes-intro 查看Vim帮助文档中关于模式的介绍
:edit hello.txt/:e hello.txt 编辑hello.txt文件,如果该文件不存在,则新建一个hello.txt文件,
并进入编辑状态
:write/:w 保存刚刚编辑的文件
:quit/:q 关闭当前窗口
:q! 强制关闭当前窗口
:help 查看帮助信息
:help :edit 查看关于 :edit 的帮助信息
:help notation
:help keycodes
:echo "Hello, World!" 回显"Hello, World!"
/hello 搜索"hello",并显示第1个匹配
:help usr_toc 显示参考手册的目录
:help index 显示索引,可以通过在其中搜索感兴趣的话题
/insert mode 显示与插入模式相关的信息
F1 显示帮助
由正常模式进入插入模式的几种方式:
i 将光标移到当前位置前的一个位置,并进入插入模式
I 将光标移动到所在行的行首位置,并进入插入模式
a 将光标移动打当前位置后的一个位置,并进入插入模式
A 将光标移动到所在行的行尾位置,并进入插入模式
o 在所在行之下开辟一个新行,并进入插入模式,光标在新行的行首
O 在所在行之上开辟一个新行,并进入插入模式,光标在新行的行尾
:help inserting 显示关于插入的帮助文档
用于替换的几个命令:
s 删除光标所在处的字符,并进入插入模式,主要用于替换,
其效果和“删除+插入”相同
S 删除光标所在行的所有内容,并进入插入模式,用于整行内容的替换
r "replace",即替换,删除光标所在处的字符,
在输入要替换的字符后,自动回到正常模式下
R 多个字符的替换,光标处及之后的单词可以被替换
:help replacing 显示关于替换的帮助文档
b 在光标移动到所在处单词的第一个字母处,如果所在处为空白,
则移动到所在处前一个单词的第一个字母
v 由正常模式进入可视模式,以字符为最小选中单位,对内容进行选择
V 由正常模式进入可视模式,以行为最小选中单位,对内容进行选择
c 删除选中的内容,并由可视模式进入插入模式,对选中内容进行修改
5e 移动当前光标,到其后第5的单词的结尾处
w 将光标移动到当前位置之后的单词的开头
3fh 寻找当前行光标之后第 3 次出现 "h" 的位置,将光标置于该处
} 将光标移动到下一段的开头
35j 将光标向下移动35行
ctrl+o 返回移动前光标所在位置
2j 将 j 的 操作重复两次,即向下移动2行
5l 将光标向右移动5次,和操作 l 5次 效果相同
5h 将光标向左移动5次,和操作 h 5次 效果相同
^ 将光标移动到行首
$ 将光标移动到行尾
Ctrl+b 向上移动一个屏幕
Ctrl+f 向下移动一个屏幕
50G 将光标移动到第50行的开头
G 将光标移动到文件的最后一行的行首
1G 将光标移动的文件的第一行的行首
M 将光标移动到第一行的行首
L 将光标移动到最后一行的行首
M 将光标移动到中间一行的行首
以单词为单位进行光标移动:
w 将光标移动到下一个单词的开头
2w 将光标向后移动 2 个单词,即移动到其后第 2 个单词的开头
e 若光标位于当前单词的最后一个字符上,
则将光标移动到下一个单词的结尾字符上;
若光标不位于当前单词的最后一个字符,
则将光标移动到当前单词的最后一个字符上。
2e 若光标位于当前单词的最后一个字符上,
则将光标移动到其后第 2 个单词的结尾字符上;
若光标不位于当前单词的最后一个字符,
则将光标移动到气候第 1 个单词的结尾字符上。
b 若光标位于当前单词的第 1 个字符上,
则将光标移动到当前单词前一个的单词的第 1 个字符上;
若光标不位于当前单词的第 1 个字符上,
则将光标移动到当前单词的第 1 个字符上。
2b 若光标位于当前单词的第 1 个字符上,
则将光标移动到当前单词前一个的单词的第 2 个字符上;
若光标不位于当前单词的第 1 个字符上,
则将光标移动到当前单词的第 2 个字符上。
:help word-motions 查看关于以单词为单位进行光标移动的帮助文档
以句子为单位进行光标的移动:
) 将光标由当前位置移动到下一句话句首字符的位置
( 若光标位于所在句子的句首字符位置,
则将光标移动到前一句的句首位置;
若光标不位于所在句子的句首字符位置,
将光标移动到所在句子的第 1 个字符的位置。
2( 将光标由当前位置移动到其后第 2 句话句首字符的位置
2) 若光标位于所在句子的句首字符位置,
则将光标移动到其前面 2 句话的句首位置;
若光标不位于所在句子的句首字符位置,
则将光标移动到其前面 1 句话的句首位置;
} 将光标移动到下一段段首的位置
{ 将光标移动到上一段段首的位置
:help cursor-motions 查看与光标移动有关的帮助信息
ma 在光标所在位置创建一个名为 a 的标记,记录光标位置
'a 回到光标 a 所在的位置
Ctrl+o 回到原来的位置
Ctrl+i 到下一个位置
ap 在可视模式下,选择光标所在处的一个段落
aw 在可视模式下,选择光标所在处的的一个单词
ab 在可视模式下,选择光标所在处由圆括号()包围的一个区域内
的所有内容
:help object-motions 查看与对象移动有关的帮助信息
:help text-objects 查看与文本对象有关的帮助信息
:help motions/various-motions 查看与移动有关的帮助信息
:help user-manual 查看用户手册
:help abbreviation 查看与缩写相关的帮助信息
Ctrl+] 在查看帮助信息时,将光标放在[<>]之间,
可以跳转到相关的帮助信息
:helpgrep phrase 寻找所有帮助文档,显示包含指定内容"phrase"的帮助信息
:cnext 跳转到文档中下一个包含所搜索信息"phrase"的部分
:cprev 跳转到文档中上一个包含所搜索信息"phrase"的部分
:clist 显示文档中包含"phrase"部分的列表
:swapname 显示交换文件的名字
~ 改变光标所在处字符的大小写格式
:pwd 显示Vim寻找文件的默认路径
| 将光标移动到改行的第一个字符处
dl 将光标所在处的字符删除
dw 将光标所在处的单词删除
dd 删除光标所在行的全部内容
yy 赋值光标所在行的全部内容到剪贴板
yap 复制光标所在段落的全部内容到剪贴板
p 在当前光标所在处之后的位置粘贴剪贴板的内容
P 在当前光标所在处之前的位置粘贴剪贴板的内容
dwwP 将光标所在位置前(不含光标)的单词和光标所在位置后
(包含光标)单词转换
:help mark-motions 查看关于制作标签以记录位置的帮助文档
u Undo,回到上次的内容
Ctrl+r Redo
:earlier 4m 显示 4 分钟前的文本状态
:later 45s 显示 45 秒之后的文本状态
:undo 5 Undo 5 次
:undolist 查看 undo 的列表
:help undolist 查看关于 undo 列表的说明信息
:help undo-redo/usr_32.txt 查看关于 undo 和 redo 的帮助文档
/something 在文档中搜索匹配"something"的部分
n 在搜索结果中跳至下一个匹配的搜索结果
N 在搜索结果中回到上一个匹配的搜索结果
/\
单词的一部分
/\d 搜索文档中的数字,以一个数字为单位来匹配结果
/\d\+ 搜索文档中的数字,以一个数字或者多个数字为单位来匹配结果
:set foldmethod=indent 将前后缩进的文本尽心折叠处理,相同缩进被折叠在一起
zc 将光标所在行及其之后相同缩进的文本折叠起来,不予显示
zo 将光标所在行及其之后相同缩进的文本展开,显示其完整信息
za 具有zc和zo相同的功能,折叠时用于打开文本,打开时用于折叠文本
:help folding 显示与折叠相关的帮助信息
:b 1 转到缓冲区 1 中的文件
:bd 1 删除缓冲区 1 中的文件
:buffers/:ls 显示所有缓冲区中的文件列表
:help buffer-list 显示与缓冲区有关的帮助信息
:new 将当前屏幕(视角)分割,并创建一个新的未命名的缓冲区
:w test.txt 将当前缓冲区保存为 test.txt,如果该缓冲区为已经存在的文件,
则用给定文件名创建一个副本
Ctrl+w <方向键h,j,k,l> 在不同屏幕,即不同缓冲区之间切换
Ctrl+w Ctrl+w 在不同缓冲区之间进行切换
:sp/Ctrl+w s 将当前屏幕(视角)水平分割
:vsp/Ctrl+w v 将当前屏幕(视角)垂直分割
Ctrl+w r 旋转视角,即将两个视角位置互换
Ctrl+w K 将当前视角(缓冲区)放到最高的位置,其他视角向下移动
:resize 10 以行为单位重新调整当前视角的长度,如 :resize 10 表示将当前视角
调整为10行
Ctrl+w _ 将当前视角调整为最大,其他视角压缩大小
Ctrl+w = 将所有视角的高度调整为相等
:help windows 查看与视角相关的帮助文档
:tabnew 创建一个新的缓冲区,并在一个新的标签页上打开
:tabc/:q 关闭当前标签页
:tabmov 调整各个标签页的顺序
:tabmov 0 将当前标签页调整到第 1 的位置
:tab help something 在新的标签页上显示某个条目的帮助文档
Ctrl+Tab 在屏幕上不同分屏处进行切换
生活的脚步,技术的点滴...
quickfix提高vim编程编译调试效率
以前使用vim编程时,在终端下面至少2个tab,一个编辑一个编译,编译出错时,切换到编辑tab页进行差错纠正。今天又学习了vim的quickfix模式,quickfix是vim自带的,无需插件。
vim由一个程序员开发,而且为更多的程序员所使用,所以在vim中加强了对软件开发的支持,quickfix模式的引入就是一个例子。所谓quickfix模式,它和Normal模式、Insert模式没什么关系,它只是一种加快你开发速度的工作方式。
Quickfix模式的主要思想是保存一个位置列表,然后提供一系列命令,实现在这个位置列表中跳转。
位置列表的产生可以从编译器的编译输出信息中获得,也可以由grep命令的输出信息中获得。
[编译]
通常,我们在开发过程中,经常要写代码,编译,修改编译错误,这个过程会数十遍上百遍的重复。如果你是根据编译器输出的错误信息,打开出错的文件,找到出错的行,然后再开始修改,那效率未免太低下了。
利用vim的quickfix模式,可以大大加快这一过程,你可以在vim启动编译,然后vim会根据编译器输出的错误信息,自动跳到第一个出错的地方,让你进行修改;修改完后,使用一个快捷键,跳到下一个错误处,再进行修改,方便的很。
为了做到这一点,你首先要定义编译时所使用的程序,对大多数使用Makefile的项目来说,vim的缺省设置"make"已经可以满足要求了。如果你的项目需要用一个特殊的程序进行编译,就需要修改'makeprg'选项的值。
大家在学编程时大概都读过"hello world"程序,我们就以这个简单的例子为例,讲一下quickfix模式的用法。
该程序的内容如下,里面包含了三个小小的错误:
/* hello world demo */
#include
{
int i;
print("hello world\n");
return 0;
}
输入编译命令了:
:make
在使用":make"时,vim会自动编译,并把编译输出重定向到一个临时文件中,当编译出现错误时,vim会从上述临时文件中读出错误信息,根据这些信息形成quickfix列表,并跳转到第一个错误出现的地方。
对于我们上面的程序来说,光标会停在第三行,也就是第一个出错的位置,vim同时会提示出错信息。如果你没看清出错信息,可以输入":cc"命令,vim会更次显示此信息,或者干脆使用":cw"命令,打开一个quickfix窗口,把所有的出错信息显示出来,见下图:
现在我们知道错在哪儿了,修正一下,然后使用":cn"命令(或者在Quickfix List对应行上输入回车)跳到下一个出错的地方,以此类推,直到修正全部错误。
好了,千辛万苦,我们的hello world终于工作了。乍一看这个例子,似乎Quickfix并没有提高什么效率,但如果你的错误出现在多个不同目录的不同文件里,它可以帮你省很多时间,使你可以集中精力在修正bug上。
vim可以同时记住最新的10个错误列表,也就是说你最近10次使用":make"命令编译所遇到的错误都保存着,可以使用":colder"和":cnewer"命令,回到旧的错误列表,或者到更新的错误列表。
在quickfix模式里经常用到的命令有:
:cc 显示详细错误信息 ( :help :cc )
:cp 跳到上一个错误 ( :help :cp )
:cn 跳到下一个错误 ( :help :cn )
:cl 列出所有错误 ( :help :cl )
:cw 如果有错误列表,则打开quickfix窗口 ( :help :cw )
:col 到前一个旧的错误列表 ( :help :col )
:cnew 到后一个较新的错误列表 ( :help :cnew )
更多的命令,以及这些命令更详细的解释,请参见手册。
对于经常用到的命令,最好提供更方便的使用方法,在我的vimrc中的定义:
autocmd FileType c,cpp map
nmap
nmap
nmap
现在使用",
如果你希望跳转到出错的文件时,使用一个分隔的窗口打开,请参阅'switchbuf'选项的值。
在vim7中,每个窗口都可以拥有自己的位置列表,这样,你就能够同时打开多个位置列表了,而quickfix列表在整个vim中只有一个。你可以使用位置列表来显示编译错误信息,具体命令参阅手册:":help location-list"以及":help :lmake"。
结合文章http://dongpingli.blogspot.com/2009/03/makefile_27.html编写的通用makefile,这下在写新程序时,直接copy makefile到程序目录,在vim里面写完程序后直接make,然后查错修改在一个tab下,省得来回tab切换,效率会提高不少。
http://www.cnblogs.com/lidp/articles/1696053.html
- Tlist_Ctags_Cmd选项用于指定你的Exuberant ctags程序的位置,如果它没在你PATH变量所定义的路径中,需要使用此选项设置一下;
- 如果你不想同时显示多个文件中的tag,设置Tlist_Show_One_File为1。缺省为显示多个文件中的tag;
- 设置Tlist_Sort_Type为”name”可以使taglist以tag名字进行排序,缺省是按tag在文件中出现的顺序进行排序。按tag出现的范围(即所属的namespace或class)排序,已经加入taglist的TODO List,但尚未支持;
- 如果你在想taglist窗口是最后一个窗口时退出VIM,设置Tlist_Exit_OnlyWindow为1;(very useful ~~~)
- 如果你想taglist窗口出现在右侧,设置Tlist_Use_Right_Window为1。缺省显示在左侧。
- 在gvim中,如果你想显示taglist菜单,设置Tlist_Show_Menu为1。你可以使用Tlist_Max_Submenu_Items和Tlist_Max_Tag_Length来控制菜单条目数和所显示tag名字的长度;
- 缺省情况下,在双击一个tag时,才会跳到该tag定义的位置,如果你想单击tag就跳转,设置Tlist_Use_SingleClick为1;
- 如果你想在启动VIM后,自动打开taglist窗口,设置Tlist_Auto_Open为1;
- 如果你希望在选择了tag后自动关闭taglist窗口,设置Tlist_Close_On_Select为1;(这个应该比较方便,好用)
- 当同时显示多个文件中的tag时,设置Tlist_File_Fold_Auto_Close为1,可使taglist只显示当前文件tag,其它文件的tag都被折叠起来。(这个也不错! )
- 在使用:TlistToggle打开taglist窗口时,如果希望输入焦点在taglist窗口中,设置Tlist_GainFocus_On_ToggleOpen为1;(useful~~)
- 如果希望taglist始终解析文件中的tag,不管taglist窗口有没有打开,设置Tlist_Process_File_Always为1;
- Tlist_WinHeight和Tlist_WinWidth可以设置taglist窗口的高度和宽度。Tlist_Use_Horiz_Window为1设置taglist窗口横向显示;
在taglist窗口中,可以使用下面的快捷键:
可以用“:TlistOpen”打开taglist窗口,用“:TlistClose”关闭taglist窗口。或者使用“:TlistToggle”在打开和关闭间切换。
在我的.vimrc中定义了下面的映射,使用“,tl”键就可以打开/关闭taglist窗口:
map
显示帮助 | |
如果光标下是目录, 则进入该目录; 如果光标下文件, 则打开该文件 | |
- | 返回上级目录 |
c | 切换vim 当前工作目录正在浏览的目录 |
d | 创建目录 |
D | 删除目录或文件 |
i | 切换显示方式 |
R | 文件或目录重命名 |
s | 选择排序方式 |
x | 定制浏览方式, 使用你指定的程序打开该文件 |
向前循环切换到每个buffer名上 | |
向后循环切换到每个buffer名上 | |
在打开光标所在的buffer | |
d | 删除光标所在的buffer |
向前循环切换到每个buffer上,并在但前窗口打开 | |
向后循环切换到每个buffer上,并在但前窗口打开 |
:Grep | 按照指定的规则在指定的文件中查找 |
:Rgrep | 同上, 但是是递归的grep |
:GrepBuffer | 在所有打开的缓冲区中查找 |
:Bgrep | 同上 |
:GrepArgs | 在vim的argument filenames (:args)中查找 |
:Fgrep | 运行fgrep |
:Rfgrep | 运行递归的fgrep |
:Egrep | 运行egrep |
:Regrep | 运行递归的egrep |
:Agrep | 运行agrep |
:Ragrep | 运行递归的agrep |
:Grep [ |
:Rgrep [ |
:Fgrep [ |
:Rfgrep [ |
:Egrep [ |
:Regrep [ |
:Agrep [ |
:Ragrep [ |
:GrepBuffer [ |
:Bgrep [ |
:GrepArgs [ |