由于被广泛移植,无论是DOS,还是AIX,都能见到VI的身影。作为开源世界最重要的编辑器之一(另一个是 Emacs),VI以其强大的功能和无穷的魅力将使您终生受益。
vim 是一个『程序开发工具』,它加入了很多额外的功能,例如支持正则表示法的搜寻架构.多档案编辑.区块复制等等。
一.VI/vim的历史
ed是Unix上最古老的编辑器,它最初是Unix之父Ken Thompson编写的,他第一次在ed中应用了regular expression,这个创举将RE理论带入实践,对Unix界造成了深远的影响。实际上ed是受伯克利大学的QED编辑器的影响,Ken是从那里毕业的。 |
ex是ed的扩展,实际上vi构建在ex之上,vi引入了我们熟悉的全屏编辑模式。 |
vi:1976年左右Bill Joy开发了vi,他也是伯克利大学的毕业生,后来他跟其他人一起成了了Sun Microsystems公司并成为了Sun的首席科学家。 一开始Bill开发了ex,尔后开发了vi作为ex的visual interface, |
vim是vi的扩展,支持自动补全.彩色语法等功能。 |
二.为什么要学习VI
1.所有 Unix Like 系统都会内建 vi 文本编辑器,其他的文本编辑器则不一定会存在;
2. 很多个别软件的编辑接口都会主动呼叫 vi (例如未来会谈到的 crontab, visudo, edquota 等指令);
3. vim 具有程序编辑能力,可以主劢的以字体颜色辨别语法的正确性,方便程序设计;
4. 因为程序简单,编辑速度相当快速。
三.Vim的mode(可以简单地理解为“状态”)
与大部分其它编辑器不同,进入 Vim 后,缺省状态下键入的字符并不会插入到所编辑的文件之中。Vim 的模式概念非常重要。
一般模式: vi 打开档案就直接进入一般模式了。在这个模式中, 你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』和『删除整行』来处理档案内容, 也可以使用『复制.贴上』来处理你的文件数据。 |
编辑模式: 在一般模式中可以进行删除.复制.贴上等等的动作,但是却无法编辑文件内容! 按下『i, I, o, O, a, A, r, R』等任何一个字母后会进入编辑模式。按下这些按键时,在画面左下方会出现『 INSERT 或REPLACE 』的字样,此时才可以进行编辑。而如果要回到一般模式时, 则必须要按下『Esc』这个按键即可退出编辑模式。 |
指令列命令模式: 在一般模式当中,输入『 : / ? 』三个中的任何一个按钮,就可以将光标移动到最底下那一行。在这个模式当中, 可以提供你『搜寻』动作,读取.存盘.大量取代字符.离开vi .显示行号等等的动作也是在此模式中达成! |
可视(visual)模式,用于选定文本块;可以在正常模式下输入“v”(小写)来按字符选定,输入“V”(大写)来按行选定,或输入“Ctrl-V”来按方块选定。 |
选择(select)模式,与Windows的编辑器较为接近的选择文本块的方式;很少使用。 |
四.vim操作基础
1.输入模式命令
#vim + file1 | 将光标置于最后一行 |
#vim +n file1 | 将光标置于第n一行 |
#vim + /patten file1 | 将光标置于第一个patten一行 |
#vim -r file1 | 在上次用vi编辑时发生崩溃,恢复file1 |
#vim -R file1 | 以只读方式编辑file1,:write!强制保存 |
#view file1 | 浏览file1的内容而不进行编辑,:write!强制保存 |
#vim -M file强制性避免对文件进行修改 试着修改文件时会看到这样的错误信息: E21: Cannot make changes, modifiable is off 下面的命令还是可以去掉这层保护: :set modifiable :set write |
2.进入Insert mode或Replace mode (按Esc返回一般模式)
I,i | I从第一个非空格字符处插入 |
A,a | A从所在行的最后一个字符插入 |
O,o | O从光标上一行插入一新行 |
R,r | R会一直取代光标所在行直到按ESC(nR/nr) |
3.保存与退出命令说明
:q/: q! | 退/强退 | :w/:w! file | 存/强存 |
:wq/:wq! | 退存/强存强退 | :n1,n2 w file | 保存部分 |
:r [file] | 合并 | ZZ | 保存退出 |
:!cmd | 执行cli | :r !cmd | 读取cmd结果 |
:.write otherfile只把当前行写入指定文件 |
4.删除
d( | 删除到句首 | d4) | 删至第四个句尾处 |
d} | 删除到段尾 | d{ | 删除到段首 |
db/dB | 删至单词的开始 | d5w | 删除5个字符 |
dG | 删光标到最后行 | d1G | 删光标到第一行 |
d0 | 删至行首 | d^ | 删至第1个非空 |
5dd或:5d, | 删当5行 | dM | 屏幕中间行 |
10cj | 向下删除10行 | dL | 屏幕底行 |
J | 删换行符合并行 | dH | 屏幕首行 |
命令的快捷方式:有些操作符+位移命令使用率高以至于以单独的字符作为其快捷方式: x 代表dl(删1字符,3x删3字符) X 代表dh(删除当前光标左边的字符) D 代表d$(删至行尾) C 代表c$(修改到行尾的内容) s 代表cl(修改一个字符) S 代表cc(修改一整行) |
5.复制.粘贴.撤消与重做
yy,nyy | 复制行 | y0 | 复制到行首 |
yw | 拷贝一个单词 | y$ | 拷贝当前光标到行尾的字符 |
y1G | 复制到第一行 | yG | 复制到行尾 |
[ctrl]+r | 撤消的撤消 | . | 重复前一个动作 |
P,p(paste) | P贴在上一行 | "U" | 撤消对一行的全部操作 |
"u"撤消上次删除的内容,下个u将恢复倒数第二次被删字符。 |
6.求助系统
:help | :help -t | :help deleting |
:help x | :help index |
|
1.挂起与恢复
CTRL-Z或:suspend 挂起VIM程序,回到启动Vim的shell中去 |
{执行任何shell命令} |
fg 回vim:别忘了等会再让回到Vim,否则你会丢失所有的改动。 |
2."!"用于在vim中运行程序的地方
执行shell命令,它会提示你按回车键继续,让你有机会看一下程序的输出是什么 :!ls 查看当前目录的内容,用于Unix :!dir 查看当前目录的内容,用于MS-Windows |
:!{program} 执行{program} |
:r !{program} 执行{program}并读取它的输出 |
:w !{program} 执行{program}并把当前缓冲区内容作为它的输入 |
:[range]!{program} 以{program}过滤指定的行 |
你可以这样打开一个新的shell: :shell :!xterm& |
六.灾难恢复
O 以只读方式打开:可能你知道别人正在编辑该文件,你不过想看一下它的内容而已。 |
E 还是要编辑:小心!如果该文件正被另一Vim编辑,你很可能会得到两个版本。 |
R 从交换文件中恢复:如果你确信交换文件中的内容正是你要找回的东西就那用这个。 |
Q 退出:如果有另一个Vim会话正在编辑最好是选择退让。 |
A 丢弃:退出同时会撤消对后续命令的执行,这在载入一个脚本编辑多个文件时比较有用,如打开一个多窗口的编辑会话时。 |
D 删除交换文件:有确信你已不再需要这个交换文件时才应做此选择。 |
Vim并不总是能正确地检测到交换文件的存在。比如另一编辑该文件的会话将交换文件放入了另一目录或者不同机器对被编辑文件的路径的理解不同。 |
如果你实在是不想看到这样的警告信息,你可以在shortmess选项中加入"A"标志1。 |