motions, scrolling -- 光标定位,滚屏与翻页
motions -- 光标定位
命令 | 功能 |
---|---|
$ | 当前行的末尾 |
0 | 当前行的开头 |
gg | 文件头 |
G | 文件尾 |
10gg 10G | 跳到第10行 |
`` | 这是两个 back quote,在键盘上是ESC下边那个键。 回到光标跳转前的位置 |
H | 跳到屏幕上的第一行 |
M | 跳到屏幕的中间行 |
L | 跳到屏幕上的最后一行 |
gk | 屏幕所见的上一行 |
gj | 屏幕所见的下一行 |
在Vim的命令模式下,有很多移动光标的命令,带给我们很大的便利。最常用的莫过于0 和$ ,把光标定位在行头和行尾。
常用的还有G 把光标定位在文件尾,gg 回到文件头。在这两个命令前面加一个数字就可以去到那一行,例如10gg 会带你去到第10行。
`` 的作用是回到光标跳转前的位置。例如,假设光标现在在第10行,按 G 去到文件尾,再按 `` 就可以回到第10行。
如果你发觉有时候k 和j 不是很好用(按一下就跨越屏幕上的几行),可以试一下用gk 和gj 。
scrolling -- 滚屏与翻页
命令 | 功能 |
---|---|
zt z回车 | 把光标所在行移到 屏幕顶端 |
z. | 把光标所在行移到 屏幕中间 |
zb | 把光标所在行移到 屏幕底部 |
CTRL-E | 向下滚屏一行(往下阅读文档) |
CTRL-Y | 向上滚屏一行(往上阅读文档) |
CTRL-F | 往前翻一页 |
CTRL-B | 往后翻一页 |
光标定位命令给文档编辑操作带来方便,而滚屏和翻页命令则让我们在阅读文档时感到舒适。
强烈推荐 以下几个按键映射:
:map <Space> <C-F> :map <S-Space> <C-B> :map <CR> <C-E> :map <UP> <C-Y> :map <DOWN> <C-E>
特别是第一个映射:map <Space> <C-F> ,设置后就可以用空格键翻页了,很是方便。另外几个映射的作用是:用Shift-Space向上翻页,按回车键向下滚屏一行、按上下箭头进行向上向下滚屏。
yank, put, delete, registers -- 复制、粘贴、剪切
命令 | 功能 |
---|---|
dd | 删除当前行 |
yy | 复制当前行 |
d$ | 删除从光标位置到行尾的内容 |
yt< | 复制从光标位置到下一个“<”前的内容 (另外,ct< 修改从光标至“<”前的内容,在编辑HTML、XML文件时很方便) |
"x复制 | 把复制内容放进寄存器x (x可以是26个英文字母之一,区分大小写) |
"xp | 粘贴寄存器x的内容 |
"+ | 特殊寄存器,读写系统剪贴板 |
:reg | 查看各个寄存器的内容 |
复制、粘贴、剪切,是编辑文档时常用的招数。在Vim里所有删除的内容都会进入Vim的寄存器(registers),所以可以把删除操作看成是剪切操作。
x , dd , yy 是很常用的命令,在这里就不多说了。复制或剪切多行内容可以在 dd 或 yy 前面加数字,例如可以用5yy 复制5行。
不过我更喜欢借助可视模式 (Visual mode)来进行复制剪切操作。先按v 或V 进入可视模式,然后移动光标选中要复制或剪切的内容,最后按d 剪切或者按y 复制。
在复制前可以先指定一个寄存器,方法是在双引号后跟一个字母,例如"a 指定了寄存器a,"B 指定了寄存器B。所以,"ayy 把当前行放进了寄存器a,以后就可以用"ap 来粘贴寄存器a里的内容了。如果不确定寄存器里放了什么内容,可以使用:reg 来查看。
Vim提供了一个很有用的特殊寄存器"+ ,它的内容就是系统剪贴板的内容。比如,在 firefox 里用 Ctrl-C 复制的内容就会出现在 "+ 里,可以在Vim里用"+p 粘贴出来。也可以在Vim里把复制或剪切的内容放进 "+ 里,然后在其它GUI程序里用 Ctrl-V 进行粘贴。
search, substitute - 查找、替换 (未完成 )
命令 | 功能 |
---|---|
* | 查找光标所在的单词 (这里的单词是指以空白字符或标点符号分隔开的字符串) |
:set ignorecase | 不区分大小写 |
:set ignorecase smartcase | 自动区分大小写。输入全是小写时不区分大小写,输入中只要有大写字母就区分大小写。 |
:set hlsearch | 打开 高亮显示匹配字串 :nohlsearch 暂时关闭高亮,下次查找时自动高亮 |
:set nohlsearch | 关闭 高亮显示匹配字串 |
人们常喜欢举出用Vim查找、替换的例子来说明Vim的强大,可见该功能的有多重要。查找、替换的核心内容其实就是正则表达式 (regular expression),它的功能非常强大,但是不容易掌握。幸好我们不用把正则表达式完全学会才能使用它,只要学点简单的皮毛,就受用无穷了。
在Vim自带的帮助文档(:help 03.9)里说道:
目前我只收集了少量技巧,以后在使用Vim的过程中还要不断学习,不断增加。
建议初学者先学习:help 03.8 ,:help 03.9 ,再学习:help usr_27 。
下面说一些实例。
/http://\f* 可以匹配一个普通的网址(不含 ? & 等符号的网址),所以:s%http://\f*%<a href="&">&</a> 可以把http://kikistar.com 替换成<a href="http://kikistar.com">http://kikistar.com</a> 。
如果网址中含有 ? & 等符号,例如http://www.newsmth.net/bbscon.php?bid=731&id=16603 ,把正则表达式稍微修改一下就行了: :s%http://\(?\|&\|\f\)*%<a href="&">&</a>
buffers -- 多文件操作
命令 | 功能 |
---|---|
:buffers :ls | 显示buffer列表 |
:bn | 转到下一个buffer |
:bp | 转到上一个buffer |
:b 3 | 转到编号为 3 的buffer |
:b index.html | 转到名为index.html的buffer |
:sav | 另存为…… |
:set hidden | 切换buffer时不给出保存当前buffer的提示 |
CTRL-G | 查看当前buffer状态信息,如文件名、总行数、修改后未保存等。 |
在Vim里可以同时编辑多个文件,每个文件占用一个 buffer。
:buffers 和:ls 的作用是一样的,可以得到一个像下面那样的列表:
:ls 1 "doc2xhtml.xsl" line 1 2 # "document.css" line 1 3 %a "vimtips.xml" line 32
在各个buffer之间跳转有很多方法,可以用 :b 1 转到编号是 1 的buffer,也可以用 :b document.css 转到名为document.css的buffer。输入这个命令时,buffer名字可以用TAB键自动保全,很方便。此外还有两个我比较爱用的命令:
:bn 转到下一个buffer :bp 转到上一个buffer
在buffer间跳转时,如果当前buffer内容编辑后未保存,Vim会要求你先保存。如果不保存,必须在命令后加 ! 强行跳转。
有一个命令可以使得在buffer间的跳转更方便,就是
:set hidden
这样设置后,在buffer之间跳转就不用先保存,也不用加 ! 了。但是,用了这个设置后使用:q! 时要加倍小心。我的建议是,用了:set hidden就不要用:q!,习惯了用:q!就不要用:set hidden了,数据永远比一时方便更重要。
参考资料:
补充:http://www.ibm.com/developerworks/cn/aix/library/au-speakingunix_vim/ 【操作更详细】
http://hi.baidu.com/smilewwh/blog/item/2fd27baf445106fffaed5057.html[参数说明]