先附上链接
手把手教你把Vim改装成一个IDE编程环境(图文)手把手教你把Vim改装成一个IDE编程环境(图文) -- 续1在Fedora下成功将Vim打造成适用于C/C++的IDE把VIM打造成一个真正的IDE(1) :这是一个系列,后面还有几篇
一、两行合并为一行:
int
main(int argc,char argv)
假如要把上面两行并为一行,只需要定位于int这行,然后按J(大写),即可。
二、撤消和重做
以前很傻,只知道按u来撤消,不知道重做。不一小心,撤消过头就傻了。原来重做是Ctrl+r。
另外,大写U用来撤消整行。
三、连续插入n个感叹号
以前以为用i/a不能进行连续多个字符的插入,原来错了!
Hello World
比如要在上面这句话后面插入10个"!",总不能真的打10个吧?
只要在普通模式下把光标定位于d,然后按10a!……不对啊,才一个!,别急,再按两下Esc!哈哈,出来10个!了吧!这个貌似不太常用,但挺好玩,呵呵~
四、快速保存退出
之前我会用两个退出方法:
保存并退出:wq
不保存并退出:q!
现在保存并退出有更快的方法──直接在普通模式下按ZZ即可。
另外,用:e!可以不保存文件并重新载入这个文件。
五、移动和滚动
直接按w/b来按单词滚动,w是向前移动一个单词,b是向后移动一个单词,我居然不常用!亏我还常常dwdw的来删除词。
另外,Ctrl+D向下滚屏,Ctrl+U向上滚屏,比我之前hjkl(左下右上)的有效率多了……汗
不知道在哪里?
:set number,来显示行号,:set nonu取消行号,行号+gg(或者 行号+G)直接到达该行。
六、查找时忽略大小写和历史查找
有时查找单词时需要忽略大小写,只要设置下面的就可以了
:setignorecase
还有另外一种忽略搜索时大小写的方法更好用,只要在待搜索字符串后加个\c就可以了
/stringYouWantToSearch\c
假如进行过几次查找,想继续以之前查过的关键词查找时,只要按/,然后上下键来选择即可
同理,按下:,然后上下键,也可以翻看执行过的历史纪录,不过仅限于当前的编辑。
七、快速查找
你要找当前光标定位处的字段,难道要慢吞吞输入/和字段吗?不必了!直接按*号,Vim就会把当前的字段作为查找内容,找下一处。
对了,:set
hlsearch可以将查找的内容设置成高亮。这样就好看了。反之,加上:set
nohlsearch就可以了。上面的ignorecase也可以加no。
八、定义标记
现在才发现定义标记这个超有用的东西!真是后悔莫及啊!
以前在一个C文件里,从一个方法跳到另一个方法,跳来跳去,都是记行数的……
原来,按下ma,就会给光标所在处标记了一个a,接下来可以通过`a来访问这个地方!注意,符号`是数字1左边那个符号,此外,通过'a,可以访问那个位置的行首,注意,符号'是单引号。
打命令:marks可以看到所有的标记。
而''或``,就可以在最近的两个标记之间相互跳转!
当你用"G" 命令跳到另一个地方,Vim会记住你从什么地方跳过去的。这个位置成为一个标记,要回到原来的地方,使用如下命令:'',''命令可以在两个位置上跳来跳去。而CTRL-O 命令则跳到一个"较老"的地方 (提示: O 表示 older)。CTRL-I 则跳到一个 "较新" 的地方.
:jumps
命令能输出一个你可以跳往的位置的列表。最后一个你使用的标记会用">" 符号标记出来。
Vim
允许你在文本中放置自定义的标记。命令"ma" 用 a 标记当前的光标位置。你可以在文本中使用26 个标记 (a 到 z)。这些标记是不可见的,只是一个由Vim 记住的位置。要跳到一个你定义的标记,可以使用命令`{mark},这里 {mark} 是指定义标记的那个字母。所以,移到标记a 的命令是: `a你可以用如下命令取得所有的标记的列表::marks
到有一些特殊的标记,包括:
'
跳转前的光标位置
''
最后编辑的光标位置
[
最后修改的开始位置
]
最后修改的结束位置
注:mark仅在当前文件跳转有效,jumps可在多个文件之间来回跳转
九、替换文本(这个没看懂怎么用................)
* 用cw或ce来将光标所处的单词替换掉,效果是一样的;
*
按cc的话,直接替换整行。 另外,用S也能达到同样的效果;
*
按C=c$,替换当前至行尾的内容;
* s
的话,是替换当前的字符,跟r的功能一样;
*
以前删除一行至末尾用d$,原来D就行了;
上面的大多数都可以加数字!
十、可视选择(这个我没怎么用过.....)
* 按v进行选择,如果想控制头和尾,按o/O进行切换;
*
如果是大写的V,则按行进行选择;
十一、删除单词和替换句子、复制单词
* 一般来说,用dw/de删除单词需要将光标定位于单词开头(de不会删除单词后的空格,dw会删除单词后的空格),用dw/de时需移到单词开头是因为dw/de会从光标所在的那个字符(包括该字符)开始删除直到该单词结束,但是如果用daw,则无需这样,只要光标在这个单词上就可以了(daw会将空格一起删除,daw=Delete
a Word),如果不包括空格,就是diw;
*
替换句子的话,就用cis就行了(目前我试验出来的可以被用以标示一句话结束的标点符号是英文的问号?和句号. )
接下来看下复制: yy命令复制当前整行的内容到vi缓冲区 yw复制当前光标所在位置到单词尾字符的内容到vi缓存区,相当于复制一个单词,而yaw/yiw也是复制一个单词,但光标可以处在该单词的任何位置,比起yw的需要移动到单词的首字符要方便。 y$复制光标所在位置到行尾内容到缓存区 y^复制光标所在位置到行首内容到缓存区 #yy 例如:5yy就是复制5行 #yw 例如:2yw就是复制两个单词
如果要复制第m行到第n行之间的内容,可以在末行模式中输入m,ny例如:3,5y复制第三行到第五行内容到缓存区。
十二、模式转换
Vim作为一种强大的编辑工具,是通过键盘来实现,而不是通过鼠标来实现的。这一点很重要。
vim
有三种常见的模式,Normail
Mode(命令模式),Insert
Mode(输入模式)和Visual Mode(视图模式)。
这几种模式的切换是也是很直接方便的,比如在命令模式下,要求输入字符,只要输入i就进入输入模式而根据要输入位置和当前光标的关系不同,有不同的切换。总之可以把命令模式和输入模式的切换有Append,Insert,Replace,Subsitute 记作AIRS,这种记忆方法特别方便英文单词的意思是空气,vim在命令模式和输入模式的切换就像空气一样,无影无形。而AIRS的英文字母的大小写意思是不一样的。小写的表示characterwise(字符),大写的表示linewise(行)[if !vml]
[endif]
十三、 删除、复制指定个数个字符
比如 : 5yl 复制光标后的5个字符(包括光标所在的那个字符)
5yh
复制光标前的五个字符(不包括光标所在的那个字符)
5dl
删除光标后的5个字符(包括光标所在的那个字符)
5dh
删除光标前的5个字符(不包括光标所在的那个字符)
十四、强大的替换功能
替换::%s/old_string/new_string/g。或者:3,7s/old_string/new_string/g
在一个目录下替换文本中的某个字符串
sed -i 's/orig_string/new_string/g' *
http://www.nonozone.net/vim-model-commonly-used-in-the-replacement-summary.html
http://gooss.org/vim-tips-replace-the-ingenious-use-of-4/
http://gooss.org/vim-tips-replace-the-ingenious-use-of-3/
十五、同时编辑多个文件
在vim的普通模式下输入 :e
filename,可以打开并编辑新的文件,但如果当前文件还没有保存的话,会有错误提示,这时需使用:w 先将其保存才行。
如果正在用vim编辑着多个文件,可以用 ctrl+^ 在他们之间来回切换,比如现在同时打开了6个文件,则就有6个不同的缓冲区,比如现在在编辑文件1,想切换到文件5去,则需要先把本文件保存(通过 :e ),然后再按5,再按ctrl+^,就切换到文件5了。
:rew 读入编辑名单中的第一个文件,
:last 读入编辑名单中的最后一个文件。:next会关闭光前文件打开下个文件开始编辑,但当前文件也需要先:w保存。,但 :set
hidden 允许在有未保存的修改时切换缓冲区,此时的修改由vim 负责保存.
你打开了几个窗口,现在你想退出Vim,你可以分别关闭每一个窗口。更快的方法是:
:qall
这表示 "quit
all"(全部退出)。如果任何一个窗口没有存盘,Vim都不会退出。同时光标会自动跳到那个窗口,你可以用":write" 命令保存该文件或者":quit!" 放弃修改。如果你知道有窗口被改了,而你想全部保存,则执行如下命令::wall这表示"write all"(全部保存)。但实际上,它只会保存修改过的文件。Vim知道保存一个没有修改过的文件是没有意义的。另外,还有":qall" 和"wall" 的组合命令::wqall这会保存所有修改过的文件并退出Vim 。最后,下面的命令由于退出Vim 并放弃所有修改:
:qall!
注意,这个命令是不能撤消的。
或者也可以用多窗口来在一个界面中编辑多个文件,如下:
vim -o a b
c 打开多个文件,每个文件一个窗口(水平分割)
vim -O a b c
打开多个文件,每个文件一个窗口(垂直分割)
或者:
打开一个 :sp 另外一个文件 (水平分割):vsp 文件名(垂直分割)如此就可以在一个窗口打开2个或多个文件了。可以使用 ctrl + 两次按 w在多个窗口的文件中切换
窗口大小调整:(输入顺序:ctrl+shift+w 行数 +/-/>/<)
ctrl+shift+w,
5, - 当前窗口缩小5行(高度,(如不指定行数,默认为1)
ctrl+shift+w, 5, +
当前窗口增加5行(高度,(如不指定行数,默认为1)
ctrl+shift+w, 5, >
当前窗口增加5列(宽度,(如不指定列数,默认为1)
ctrl+shift+w, 5, <
当前窗口增加5列(宽度,(如不指定列数,默认为1)
ctrl+shift+w,
= 使所有窗口几乎一样大
ctrl+shift+w,
_(下划线) 使当前窗口最大化
十六、执行shell命令
在 vi 中也可以执行 shell 的命令。在命令模式下,指令:!command,command 是shell 命令。例如指令:!date 会把目前的时间和日期显示到萤幕上。要是你想把shell 命令的结果放到文件中,可以用:r
!command。比如r
!date 会把现在的时间放到光标所在的行的下一行。可以指定行数,例如:20r
!date 会把现在的时间放到第二十行。
如果你要下一连串的shell 命令但又不想离开vi,你可以在line mode 下指令sh。这个指令会建立一个shell,如果要离开sh回到vim,可输入exit,或按ctrl-D 。
也可以选择档案中的文字作为shell 命令的输入。输出的结果会把替换掉你输入的文字。例如:2,5!sort 会把第二列到第五列的文字依序排列,而原来的文字就会被覆盖。
十七、编辑得更快一点
按词移动
w
按下w会前进一个词。
b
按下b会后退一个词。
这里,就像在Vim中的大部分情况下一样,在这两个命令前面加上一个数字可以让它们重复做多次。
移动到行首或行末
$
$会让你移动到所在行的末尾。
^
^会让你移动到所在行的开始。Home键也可以做相似的事。不过^会移动到第一个非空的字符处,而Home会移动到行首。
这两个命令也接受数字参数,比如
2$
会移动到下一行末。
在行上查找
f要查找的字符
f用来在一行上查找一个字符并移动到该字符所在处。比如
fx
用来移动到此行当标后第一个x处。如果有一个数字参数,就可以指定移动到某个指定的匹配位置。
F
F用来向左查找。
移动到指定行
行号G
G命令会把你带到用行号指定的行。如果使用没有行号的G,将会移动到最后一行。
显示当前所在位置
:set number
Vim的可制定性是很强的,所以你可以通过:set设定很多选项。number就是其中之一。它是一个布尔选项,用来控制是否在最左边显示行号。
:set number
可以把它打开。
:setnonumber
则可以关闭此选项。
Ctrl+g
Ctrl+g会显示当然后在的位置。
向上和向下翻屏
Ctrl+u
会向上翻半屏
Ctrl+d
会向下翻半屏
删除文本
dw
dw会删除一个词。你应该可以看得出来,这里的w代表的就是word(词).其实d后面可以加好多东西来控制删除的对象。比如:
d$
会删除从当前位置到行末的所有内容,同理,d^会删除从当前位置到行首的所有内容。
数字放在哪
这里有一个疑问,如果想删除三个词,那么应该怎么办?是d3w,还是3dw。其实它们都能做到,不过原理不太一样。d3w是一次删除三个词,而3dw是执行三次删除一个词。其实这两者可以混起来,比如2d3w。
改变文本
cc
用来删除一行并进入输入状态。
cw
用来删除一个词并进入输入状态等。
替换字符
r替换的字符
r命令把当标处的字符替换成在r命令中指定的字符。
更改大小写
~
通过~可以把光标处的字符用它的大写(如果现在是小写)或小写(如果现在是大写)替换。
宏
Vim有着简洁而强大的宏功能。
q宏名
按下 q+宏名 后会进入宏录制状态,也就是说,此后发生的一切操作都会记录到名为“宏名”的宏中。如果名为“宏名”的宏已经存在,则将它覆盖。
@宏名
会调用名为“宏名”的宏。