VIM的功能太强大了, 以至于小弟已经把它作为主力文本编辑器, 现把自己整理的一些技巧与大家分享, 大部分都来自于手册.
##################################################
h (左移) j (下行) k (上行) l (右移)
输入 dw 可以从光标处删除至一个单字/单词的末尾
输入 d$ 从当前光标删除到行末
删除命令 d 的格式如下∶
[number] d object 或者 d [number] object
其意如下∶
number - 代表执行命令的次数(可选项,缺省设置为 1 )。
d - 代表删除。
object - 代表命令所要操作的对象(下面有相关介绍)。
一个简短的对象列表∶
w - 从当前光标当前位置直到单字/单词末尾,包括空格。
e - 从当前光标当前位置直到单字/单词末尾,但是 *不* 包括空格。
$ - 从当前光标当前位置直到当前行末。
欲删除整行,请输入∶dd
输入 p 将最后一次删除的内容置入光标之后
输入 r 和一个字符替换光标所在位置的字符
要改变一个单字/单词的部分或者全部,请输入 cw
更改类指令的工作方式跟删除类命令是一致的。操作格式是∶
[number] c object 或者 c [number] object
对象参数也是一样的,比如 w 代表单字/单词,$代表行末等等。
输入 CTRL-g 显示当前编辑文件中当前光标所在行位置以及文件状态信息。
输入 SHIFT-G 则直接跳转到文件中的某一指定行。
输入 / 以及尾随的字符串可以用以在当前文件中查找该字符串。 要查找同上一次的字符串,只需要按 n 键。要向相反方向查找同上一次的字符串,请输入 Shift-N 即可。 如果您想逆向查找字符串,请使用 ? 代替 / 进行。
按 % 可以查找配对的括号 )、]、}。
输入 :s/old/new/g 可以替换 old 为 new。
要替换两行之间出现的每个匹配串,请输入 :#,#s/old/new/g (#,#代表的是两行的行号)。输入 :%s/old/new/g 则是替换整个文件中的每个匹配串。进行全文替换时询问用户确认每个替换需添加 c 选项,请输入 :%s/old/new/gc
输入 :! 然后紧随著输入一个外部命令可以执行该外部命令。
要将对文件的改动保存到文件中,请输入 :w FILENAME 。
要保存文件的部分内容,请输入 :#,# w FILENAME **
#,# 就是上面要求您记住的行号(顶端行号,底端行号)
要向当前文件中插入另外的文件的内容,请输入 :r FILENAME
特别提示∶您所提取进来的文件将从光标所在位置处开始置入
输入 o 将在光标的下方打开新的一行并进入插入模式。输入大写的 O 可以在光标上方打开新的一行并将光标置于新开的行首,进入插入模式。
输入小写的 a 可以在光标所在位置之后插入文本。输入大写的 A 可以在光标所在行的行末之后插入文本。
输入大写的 R 可连续替换多个字符。**直至按 <ESC> 键退出替换模式而进入正常模式。
J: 把两行连起来
CTRL-R: redo
"o" 命令在光标下方建立一个新的空行,并把 Vim 切换到插入模式
"O" 命令(大写)在光标上方打开一个新行
w: 移动光标向前跳动一个词,移动到词首
b: 与w相反
"e" 命令可以移到下一个单词的词末,而 "ge" 则移动到前一个单词的末尾
"$" 命令把光标移动到当前行行尾
"^" 命令把光标移动到当前行的第一个非空字符
"0"(零) 命令则移到一行的第一个字符
f/F:单字符查找命令,最有用的移动命令之一,"fx" 命令向前查找本行中的字符 x。"F" 命令则用于向左查找。
"tx" 命令与 "fx" 相似,但它只把光标移动到目标字符的前一个字符上。提示:"t" 表示 "To"。这个命令的反向版本是 "Tx"。
这四个命令可以通过 ";" 命令重复,"," 命令则用于反向重复。无论用哪个命令,光标永远都不会移出当前行,哪怕是这两行是连续的一个句子。
G: 移动到指定的行,"33G" 把你送到 33 行
"50%" 移动到文件的中间,而 "90%" 移到差不多结尾的位置。
H,M,L:分别代表移到当前视野的Home, Middle, Last处
:set number 这会在每行的前面加上一个行号
有些 "操作符-动作" 命令由于经常被使用,所以被设置为单字符命令:
x 表示 dl (删除当前光标下的字符)
X 表示 dh (删除光标左边的字符)
D 表示 d$ (删除到行尾)
C 表示 c$ (修改到行尾)
s 表示 cl (修改一个字符)
S 表示 cc (修改一整行)
使用 "V" 命令来启动可视模式。左右移动不会有任何效果。而通过上下移动,你可以一次选择多行。如果你要处理一个矩形块内的文本,可以使用 CTRL-V 启动可视模式。
"daw" 的 "d" 是删除操作符。"aw" 是一个文本对象。提示:"aw" 表示 "A Word"一个单词),这样,"daw" 就是 "Delete A Word"(删除一个单词)。确切地说,该单词后的空格字符也被删除掉了。
"cis" 包括 "c"(change,修改)操作符和 "is" 文本对象。这表示 "Inner Sentence"(译者注:实在很难用中文表示这个意思了,各位还是记英文名吧)。还有一个文本对象是 "as",区别是 "as" 包括句子后面的空白字符而 "is" 不包括。如果你要删除一个句子,而且你还想同时删除句子后面空白字符,就用 "das";如果你想保留空白字符而替换一个句子,则使用"cis"。
还有很多方法可以删除文本。这是一些经常用到的:
x 删除光标下的字符("dl"的缩写)
X 删除光标前的字符("dh"的缩写)
D 从当前位置删除到行尾("d$"的缩写)
dw 从当前位置删除到下一个单词开头
db 从当前位置删除到前一个单词的开头
diw 删除光标上的单词(不包括空白字符)
daw 删除光标上的单词(包括空白字符)
dG 删除到文末
dgg 删除到文首
如果你用 "c" 代替 "d",这会变成修改命令;而改用 "y",则变成拷贝命令,等等等等。
还有一些常用的命令,放在哪一章都不合适,列在这里:
~ 修改光标下字符的大小写,并移动到下一个字符。这不是一个操作符
(除非设置了 'tildeop'),所以你不能连接一个动作命令。这个命
令在可视模式下也有效,它会改变被选中的所有文本的大小写。
I 移到当前行的第一个非空字符并启动插入模式
A 移动到行尾并启动插入模式
彩色的文字难以辨认
Vim 自动猜测你使用的背景色。如果是黑的(或者其它深色的色彩),它会
用浅色作为前景色。如果是白的(或者其它浅色),它会使用深色作为前景
色。如果 Vim 猜错了,文字就很难认了。要解决这个问题,设置一下
'background' 选项。对于深色:
:set background=dark
而对于浅色:
:set background=light
这两个命令必须在 ":syntax enable" 命令前调用,否则不起作用。如果要在
这之后设置背景,可以再调用一下 ":syntax reset"。
:colorscheme evening
保留原始文件
如果你在编辑源程序,你可能想在修改之前保留一个备份。但备份文件会在你存盘的时
候被覆盖。这样它只能保留前一个版本,而不是最早的文件。
要让 Vim 保存一个原始的文件,可以设置 'patchmode' 选项。这个选项定义需要
改动文件的第一个备份文件的扩展名。通常可以这样设:
:set patchmode=.orig
这样,当你第一次编辑 data.txt,作了修改并执行存盘,Vim 会保留一个名为
"data.txt.orig" 的原始文件。
如果你接着修改这个文件,Vim 会发现这个原始文件已经存在,并不再覆盖它。进
一步的备份就存在 "data.txt~"(或者你设置的 'backupext' 指定的文件)中。
如果你让 'patchmode' 设为空(这是默认的情况),则原始文件不会被保留。
文件间拷贝文本
本节解释如何在文件间拷贝文本。我们从一个简单的例子开始。编辑一个你要拷贝文本的
文件,把光标移到要拷贝的文本的开始处,用 "v" 命令启动可视模式,然后把光标移到
要拷贝文本的结尾处,输入 "y" 拷贝文本。
例如,要拷贝上面这段文字,你可以执行:
:edit thisfile
/本节解释
vjjj$y
现在编辑你要粘贴文本的文件。把光标移到你要插入文本的地方。用 "p" 命令把文本粘贴
到那里:
:edit otherfile
/There
p
当然,你可以用任何命令拷贝文本。例如,用 "V" 命令选中整行的内容。或者用
CTRL-V 选择一个矩形区域。或者使用 "Y" 拷贝一个单行,"yaw" 拷贝一个单词等。
"p" 命令把文本粘贴到光标之后,"P" 命令则粘贴到光标之前。注意, Vim
会记住你拷贝的是一整行还是一个矩形,并用相同的方式把文本贴出来。
关闭窗口
以下命令用于关闭窗口:
:close
实际上,任何退出编辑的命令都可以关闭窗口,象 ":quit" 和 "ZZ" 等。但 "close"可以避免你在剩下一个窗口的时候不小心退出 Vim 了。
关 闭 所 有 其 它 窗 口
如果你已经打开了一整套窗口,但现在只想编辑其中一个,如下命令可以完成这个功能:
:only
这个命令关闭除当前窗口外的所有窗口。如果要关闭的窗口中有一个没有存盘,Vim 会
显示一个错误信息,并且那个窗口不会被关闭。
对所有窗口执行命令
你打开了几个窗口,现在你想退出 Vim,你可以分别关闭每一个窗口。更快的方法是:
:qall
这表示 "quit all"(全部退出)。如果任何一个窗口没有存盘,Vim 都不会退出。同时光标会自动跳到那个窗口,你可以用 ":write" 命令保存该文件或者 ":quit!" 放弃修改。
如果你知道有窗口被改了,而你想全部保存,则执行如下命令:
:wall
这表示 "write all"(全部保存)。但实际上,它只会保存修改过的文件。Vim 知道保
存一个没有修改过的文件是没有意义的。
另外,还有 ":qall" 和 "wall" 的组合命令:
:wqall
这会保存所有修改过的文件并退出 Vim 。
最后,下面的命令由于退出 Vim 并放弃所有修改:
:qall!
注意,这个命令是不能撤消的。
用 vimdiff 显示区别
有一种特殊的启动 Vim 的方法可以用来显示两个文件的区别。让我们打开一个 "main.c"
并插入一些字符。在设置了 'backup' 选项的情况下保存这个文件,以便产生 "main.c~"
备份文件。
在命令行中输入如下命令:(不是在Vim中)
vimdiff main.c~ main.c
Vim 会用垂直分割的方式打开两个文件。你只能看到你修改过的地方和上下几行的地方。
我 在 哪?
要知道当前文件在文件列表中的位置,可以注意一下文件的标题。那里应该显示类似
"(2 of 3)" 的字样。这表示你正在编辑三个文件中的第二个。
如果你要查看整个文件列表,使用如下命令:
:args
这是 "arguments"(参数)的缩写。其输出应该象下面这样:
one.c [two.c] three.c
这里列出所有你启动 Vim 时指定的文件。你正在编辑的那一个,例如,"two.c",被中括号括起来了。
移 动 到 另 一 个 参 数
要回到前一个文件:
:previous
这个命令与 ":next" 相似,只不过它是向相反的方向移动。同样地,这个命令有一个
快捷版本用于 "保存再移动":
:wprevious
要移动到列表中的最后一个文件:
:last
而要移动到列表中的第一个文件:
:first
不过,可没有 ":wlast" 或者 "wfirst" 这样的命令了。
你可以在":next"和":previous"前面加次数前缀。例如要向后跳两个文件:
:2next
选项 'fileformats' 包含各种各样的格式,Vim 会在编辑一个新文件之初尝试该
选项定义得各种格式。例如,下面这个命令告诉 Vim 先尝试用 UNIX 格式,其次, 尝试
MS-DOS 格式:
:set fileformats=unix,dos