之前对Vim的学习和使用一直都是一时的热情,不过一来二去的对vi的常用命令和操作玩的相当熟练.但是一些高级的命令总是没有认真去好好的学习.最近下 班之后一直在学习vi,没有网络上网耍,就天天练习到让我真正的体会到了vi的强大之处.那本vim的中文手册只看了约1/3,下面的这个笔记是自己随手 记下的一些平时不怎么熟悉的命令.时常拿出来看看练习一下. 对vi的学习,开始是很痛苦的,你必须去记忆很多很多命令.还有键盘上指法的习惯,需要不断地练习练习,再练习.慢慢的,你就会自己无意识的键指如飞 了.vi的哲学和perl一样:There is more than one way to do the same thing.所以不要强迫自己去记所有的命令,只要不断地练习, 从众多的命令中找出自己感觉最方便的就可以.ok,暂时说这么多,下面的笔记感兴趣的话可以浏览一下. 想学好vi最好自己下载一本vim的中文手册,每天看几页,慢慢练习吧!

:browse edit
:browse split D:/htodcs/
set borwsedir=buffer 用当前文件所在的工作目录
current 用当前的工作目录
last 使用上次访问过的目录
:browse edit


:confirm 可以作为任何命令的前缀

:winpos 可以得到当前vim窗口的坐标位置。
也可以使用该命令来控制窗口的位置
如: :winpos 200 200 VIM的窗口就会自动的移动到屏幕的x=200,y=200像素的位置.

可以使用lines 或者columns 来改变窗口的大小.如:
:set lines=50
:set columns=80

w 移动到下一个word的字首
b 移动到上一个word的字首
e 移动到当前word的尾部 end of word
ge 移动到上一个word尾部

f find 光标移动到一个特定的字符上
F 方向和f相反

t to 将光标移动到目标的上一个字符上
T 方向和t相反

匹配括号的时候时候%号!

简单搜索:
:set ignorecase 忽略大小写设定   
:set noignorecase

查找整个WORD
移动光标在这个word上,然后按 * 号键,就会自动查找。
可使用#号键,发现查找。

查找一个单词the ,  而且会将there也匹配到。
这样可以在the这个单词后面加上一个\>符号,它只匹配一个word结束处
相同的是\<匹配一个单词的开始处

Ctrl+O 跳转到你更早些时间停置光标的位置(O意为older)
Ctrl+I 跳回到后来停置光标更新的位置(I在键盘上位于O上面)

》》具名标记
VIM允许你在文本中定义自己的标记,命令“ma”将当前光标下的位置标记为‘a’,从a到z一共26个自定义标记,定义后的标记在文本中看不出来。要跳转到一个具名标记处,在标记前面加上`(1左边的按键)符号,
:jumps  会列出所有曾经跳转的位置

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

:Project
:bwipe
:buffers
:ls 都是显示缓冲区的内容

:buffer 2 打开缓冲区为2的文件
:bnext
:bprevious
:bfirst
:blast

:sbuffer 2 在一个新窗口打开代号为2的缓冲区文件

:bdelete 2 从缓冲区列表中删除2这个文件的缓存(删除这个缓冲区之后
VIm依然记得它,你可以使用:buffer!命令来查看,想要彻底删除一个缓冲区,需要使用
:bwipe 命令);

ggguG  命令将文件所有大写变为小写

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

D 代表d$(删除到行尾的内容)
C 代表c$(修改到行尾的内容)
s 代表cl(修改一个字符)
S 代表cc(修改一整行)

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

"." 命令是一个很强大的命令,它会重复执行上一次的命令

Visual模式下:
v:选中单词
V:选中整行
使用o可以让光标移动到另一头(o代表"other end"的意思)

p 将删除后的内容粘贴到光标所在行的下一个行
P 将删除后的内容粘贴到光标所在行的上一个行
3p 代表将内容粘贴3次在光标所在行的下方位置.
xp 命令交换两个字符,如"the"错写为"hte"就可以使用xp交换2个字符的位置.

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
文本对象:

如果光标位于一个单词的中间,而你想删除整个单词,可以使用'daw'命令,而d表示删除命令而aw代表一个文本对象,aw的意思是'a word',这样daw的完整意思就是'delete a word'.

####################################
#                                  #
# vim 也赞成Pear的哲学:there is    #
# more than one way to do the same #
# thing.                           #
#                                  #
####################################


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
替换:
:起始行,结束行 s/搜索串/替换串/g 将所有搜索串替换为替换串
还可以先进入可视模式选择一段文本,然后使用命令:s/搜索串/替换串/g,vim会将选区内的内容进行替换操作


&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
自动补全
:我认为,插入补全是 VIM 最为突出的一项功能。
i<C-P>  向上搜索,补全一个词。例如,上文中出现过 filename 这个词,当你想再输入 filename 时,只要按 f<C-P> 即可。假如 VIM 向上搜索,找到以 f 开头的第一个匹配不是 filename,你可以继续按 <C-P> 搜索下一个匹配进行补全。当然,如果你想一次 <C-P> 就成功,你可以多输入几个字符比如 filen 再按 <C-P> 补全
i<C-N>  向下搜索,补全一个词
i<C-X><C-L>     补全一行。比如你写过一行 for (int i = 0; i < 100; i++),你想再写一模一样的一行,只要输入 for<C-X><C-L> 即可。如果补全出来的不是你想要的那一行,你可以按 <C-P> 或 <C-N> 选择上一个或下一个匹配行
i<C-X><C-F>     在文件系统中搜索,补全一个文件名

整行补全                        CTRL-X CTRL-L
根据当前文件里关键字补全        CTRL-X CTRL-N
根据字典补全                    CTRL-X CTRL-K
根据同义词字典补全              CTRL-X CTRL-T
根据头文件内关键字补全          CTRL-X CTRL-I
根据标签补全                    CTRL-X CTRL-]
补全文件名                      CTRL-X CTRL-F
补全宏定义                      CTRL-X CTRL-D
补全vim命令                     CTRL-X CTRL-V
用户自定义补全方式              CTRL-X CTRL-U
拼写建议                        CTRL-X CTRL-S



K 看光标所在位置的man page帮助

zf 可以创建一个折叠

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
一个寄存器只是vim用来存放文本的地方,这里我们用a到z这26个字母作为寄存器的名字(还有其他的寄存器的名字).
命令格式:"fp ["为必须,f表示寄存器的名字,p表示复制]

:sav file_name 另存为的命令
:file other_name 改变当前编辑文件的名字的命令

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

zo 命令来展开折叠
zc 把他们折起
zf 将选中的行进行折叠

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

对两个文件进行比较命令以此是:
:edit one.php
:vertical diffsplit two.php

跳到文件中不同的地方: ]c 命令掉到下一个不同之处,[c跳到上一个不同之处.
消除差异:
将光标移动到不同的地方 然后按键dp(意为:diff put的缩写)
或者使用do(diff obtain)也可以.

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

使用页签编辑:
:tabedit filename.txt

如果不使用鼠标在各个tab页面之间切换, 使用 gt  (goto tab的缩写)命令

:tab help gt  这个命令会在一个新的窗口打开关于gt的帮助文档

:tabonly 会关闭所有的其他标签页.

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

命令的记录和回放(也即宏操作);步骤如下:
1) 使用q{register}命令开始, 后续的动作将会被记录在名称为{register}的寄存器中,寄存器的名字必须是a到z之间的一个字母. 如:qa 那么这个寄存器的名字就是a.
2)执行你要执行的操作
3)按下q键,结束对动作的录入.
4)然后通过@{recording}命令来执行刚刚记录下来的宏操作. 如:@a 就是执行名称为a的宏.

如果你记录的宏发现出错了,你可以重新来过一遍,但是也是有如何补救的?

将光标移动文件空白的地方(最好是文件末尾,不会对你编辑文件产生影响);使用命令 "np   n为寄存器的名称,p的意思是粘贴出来. 然后你会发现你可以像修改普通文本一样修改这条宏命令了.