按:这篇文章是很早之前发布在个人 Google Site 上的,已经不知具体时间了。在转移到本站后,有一些新的修订。
vi 是 Linux 上的经典文本编辑器,差不多是所有发行版的缺省装备。vi 的衍生软件有vim, gvim等。
vi HelloWorld.java
编辑一个文件 HelloWorld.java,如果文件不存在,则创建一个空文件进行编辑。
如果 HelloWorld.java 不存在,直接执行 :wq
是不能保存退出的,但可以先执行 :w
保存,然后执行 :q
退出。
vi 有所谓的三种模式:命令模式,文本输入模式,末行模式。 这与现在常用的文本编辑器 Notepad, Notepad++, gedit 等有很大不同,它们并没有「模式」这个概念。
【命令模式】vi 启动后,默认进入的模式是「命令模式」,在该模式下,可以输入和执行一些 vi 内置的命令,但这些输入不会显示在屏幕上,如果输入的字串不匹配,系统会响铃报错。
【文本输入模式】在「命令模式」下,输入 i
或 o
将以插入(insert)或附加(append)的方式进入「文本输入模式」,在「文本输入模式」下,任何输入都将记录到文本中。在该模式下,无论何时,敲 ESC
键会转到「命令模式」。
【末行模式】在「命令模式」下,输入冒号即进入「末行模式」,在「末行模式」下,可以输入和执行该模式下的指令。在该模式下,无论何时,敲 ESC
键会转到「命令模式」。
以上三种模式的跳转关系如下图所示:
模式 | 指令 | 说明 |
---|---|---|
命令模式 | h | 向左(前)移动光标 |
命令模式 | j | 向下移动光标 |
命令模式 | k | 向上移动光标 |
命令模式 | l | 向右(后)移动光标 |
命令模式 | 0(数字零) | 将光标移动到行首 |
命令模式 | $ | 将光标移动到行尾 |
命令模式 | gg | 将光标移动到页首 |
命令模式 | G | 将光标移动到页尾 |
命令模式 | b | 将光标移动到上一个单词的第一个字母的位置 |
命令模式 | L | 移动光标到页底 |
命令模式 | x | 删除光标处字符 |
命令模式 | yw | 复制光标位置到当前单词的尾部字串 |
命令模式 | x | 删除光标位置的后一个字符 |
命令模式 | dd | 删除当前行 |
命令模式 | yy | 复制当前行 |
命令模式 | p | 粘贴 |
命令模式 | u | 后悔(回退上一步操作) |
命令模式 | i | 以插入(insert)的方式进入「文本编辑模式」,即进入「文本编辑模式」后,光标在当前字符之前。 |
命令模式 | I | 列编辑模式中的多行插入 |
命令模式 | a | 以附加(append)的方式进入「文本编辑模式」,即进入「文本编辑模式」后,光标在当前字符之后。 |
命令模式 | d0 | 从当前光标位置删到行首 |
命令模式 | d$ | 从当前光标位置删到行末 |
命令模式 | de | 从当前光标位置往后删除一个单词 |
命令模式 | {n}dd | 从当前行位置开始删除n行 |
命令模式 | dG | 从当前行开始删除全部文本 |
命令模式 | : | 进入「末行模式」 |
末行模式 | :/{wordToSearch} | 查询字串 wordToSearch , 继续按 n 查询下一个,按 N 查询上一个 |
末行模式 | :w | 保存当前文件. 按指定编码保存文本::w ++enc=xxx 其中 xxx 为文件编码,比如 utf8, gbk 等 |
末行模式 | :wq | 保存退出 |
末行模式 | :q! | 不保存退出 |
末行模式 | :.,$d | 删除从当前行到最后一行的内容。如果光标在第一行,就删除所有内容。 |
末行模式 | :1,$d | 删除从第一行到最后一行的内容,即删除所有内容。与命令模式的 dG 相同。 |