Vim入门基础教程

刚入门 Vim,网上找了很多资料,有的太复杂不适合我这样的新手,有的不全,自己动手整理一份。参考了一些资料,备注链接放在下面,侵权删。

如何你想要成为一个vim的 superstar,我需要给你一些警告:

  • 学习开始时是痛苦的。
  • 需要时间,忘记速成。
  • 需要不断不断地练习。

而Kana大神也说过,对vim的掌握有五个层次:

  • 层次0: 对vim一无所知。
  • 层次1: 了解vim的基本使用。
  • 层次2: 知道可视模式。
  • 层次3: 知道多种移动动作。
  • 层次4: 不再需要可视模式。

所以,我猜你可能需要3周甚至更多时间的苦练,而不是3天,才能更有效率的使用它。

Vim 世界观

Vi 最初是由 Bill Joy 在 1976 年编码实现的。而 Vim (Vi IMproved) 则是改进的 Vi,由 Bram Moolenaar 在 1991 年开发并发布。Vi/Vim 是所有 Unix/Linux 操作系统默认配备的编辑器。因其强大的功能和高效的操作,Vi/Vim 也成为众多 Unix/Linux 用户、管理员必须掌握并熟练使用的编辑工具之一。尤其是在没有图形界面的情况下,更是离不开 Vi/Vim。Vi/Vim 命令非常多、用法极为灵活,掌握起来有一定的难度。本文为入门教程,关于 Vi/Vim 各种定制后的功能不在本文讨论范围之列。

Vi和Vim

在 Linux 的世界中,绝大部分的配置文件都是以 ASCII 的纯文本形态存在,因此利用简单的文字编辑软件就能够修改! 与微软 Windows 系统不同的是,如果你用惯了 Microsoft Word 的话,在 Linux 的文本模式下,会觉得文书编辑程序都没有窗口接口来的直观与方便,那么问题来了,干嘛还要学这个不是很友善和方便的vi编辑器呢?因为:

  • 跨平台无所不在。所有的 Unix 和 Linux 系统都会内建 vi 文本编辑器,其他的编辑器则不一定会有而且你无需担心到了其他平台需要学习新编辑器,除了Linux/Mac OS X外Windows系统也都可用。
  • 很多个别软件的编辑接口都会主动调用 vi ;
  • 可扩展性。你可以只用它来编辑配置文件,也可以将它当做你的开发平台。vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计;
  • 程序简单、功能强大、运行飞快。

其实重点是上述的第二点,因为有太多 Linux 上面的指令都默认使用 vi 作为数据编辑的接口,所以你必须、一定要学会。

什么是 Vim 呢?

其实你可以将 vim 视作 vi 的进阶版本,vim 可以用颜色或底线等方式来显示一些特殊的信息。 举例来说,当你使用 vim 去编辑一个 C 程序语言的档案,或者是shell script程序时,vim 会依据档案的扩展名或者是档案内的开头信息, 判断该档案的内容而自动调用该程序的语法判断式,再以颜色来显示程序代码与一般信息。也就是说, 这个 vim 已经是个『程序编辑器』了!甚至一些 Linux 基础配置文件内的语法,都能用 vim 来检查!
简单来说, vi 是老式的文本处理器,不过功能已经很齐全了,但是还是有可以进步的地方。vim 则可以说是程序开发者的『程序编辑器』了,就连 vim 的官网也说 vim 是一个『程序开发工具』而不是文本处理软件。 因为 vim 里面加入了很多额外的功能,例如支持正规表示法的搜寻架构、多档案编辑、区块复制等等。

简单讲选择它就是因为它:

Better, Stronger, Faster.

学习 vim 并且它可能会成为你最后一个使用的文本编辑器。没有比这个更好的文本编辑器了,非常地难学,但是却不可思议地好用。

提示:在 Linux 下,如果以 root 用户登录系统的话,通过 vi 命令打开的 Vim 编辑器往往只加载最基本的功能,像语法加亮着色的功能基本上没有。在 root 用户下使用 Vim 所有功能的技巧是用 vim 命令打开 Vim 编辑器。

怎么进入 Vim?

可以在终端(不明白什么是终端的,请自行谷歌命令行、终端、shell、bash了解)输入下面的命令:

$vim [filename]

其中filename是文件的路径。如果文件不存在,它将为你建立一个新文件。

Vim的三种操作模式

Vim编辑程序有三种操作模式,分别称为编辑模式插入模式命令模式

编辑模式:用以执行命令,也称为Normal正常模式,也是进入Vim的缺省模式。进入Vim后会直接进入编辑模式(这是默认的模式)。在这个模式中, 你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来操作文本, 也可以使用『复制、剪切、粘贴』来处理文本数据,删除正文和插入新的正文。但是却是无法编辑文本内容的!

插入模式:即 Insert 模式,用来输入文本,就像你用“记事本”一样。进入Vim后会直接进入编辑模式,要等到你按下『i, I, o, O, a, A, r, R』等任何一个字母之后才会进入编辑模式。注意了!通常在 Linux 中,按下这些按键时,在画面的左下方会出现『 INSERT 或 REPLACE 』的字样,此时才可以进行编辑,可以输入字符。而如果要回到一般模式时, 则必须要按下『Esc』这个按键才可退出编辑模式。

命令模式:用来执行冒号命令。在编辑模式下输入『 : / ? 』三个中的任何一个按钮,就可以将光标移动到最底下那一行。在这个模式当中,可以进行保存、查找、替换、显示行号、退出、配置Vim操作等等的动作。

简单的说,我们可以将这三个模式想成底下的图标来表示:


i → Insert 模式,按 ESC 回到 Normal 模式。
x → 删当前光标所在的一个字符。
dd → 删除当前行,并把删除的行存到剪贴板里。
p → 粘贴剪贴板。
:wq → 存盘 + 退出 (:w 存盘后可以跟文件名,:q 退出,:q!强制退出)
:help <command> → 显示相关命令的帮助。你也可以就输入 :help 而不跟命令。

推荐
强例推荐使用hjkl键盘移动光标,但不必需,你也可以使用光标键 (←↓↑→)移动。
以 : 开始的命令你需要输入 <enter> 回车结束,例如我写成 :q 也就是说你要输入 :q然后回车。

编辑模式下命令

跳转

如果键盘上有上、下、左、右箭头的导航键,就由这些键来完成光标的移动。另外,可以用下面的键完成同样的按字符移动功能:

k或↑              上移
j或↓               下移
h或←            左移
l或→             右移

上面这4个键将光标位置每次移动一行或一个字符 。Vim还提供稍大范围移动光标的命令:

ctrl+f         在文件中前移一页(相当于 page down)
ctrl+b        在文件中后移一页(相当于 page up)
ctrl+d        屏幕向下移动半页
ctrl+u        屏幕向上移动一页

更大范围的移动:

*          当光标停留在一个单词上,* 键会在文件内搜索该单词,并跳转到下一处;
#          当光标停留在一个单词上,# 在文件内搜索该单词,并跳转到上一处;
(/)        移动到 前/后 句 的开始;
{/}        跳转到 当前/下一个 段落 的开始。
g_         到本行最后一个不是 blank 字符的位置。
fa         到下一个为 a 的字符处,你也可以fs到下一个为s的字符。
t,         到逗号前的第一个字符。逗号可以变成其它字符。
3fa        在当前行查找第三个出现的 a。
F/T        和 f 和 t 一样,只不过是相反方向;

在屏幕中找到需要的 一页 时,可以用下面的命令快速移动光标:

H                  将光标移到屏幕上的起始行(或最上行)
M                  将光标移到屏幕中间
L                  将光标移到屏幕最后一行
G                  将光标定位到文件最后一行起始位置
NG或Ngg            将光标定位到第 N 行的起始位置
gg                 将光标定位到文件第一行起始位置
N(ENTER)           光标下移N行

同样需要注意字母的大小写。H 和 L 命令还可以加数字。如 2H 表示将光标移到屏幕的第2行,3L 表示将光标移到屏幕的倒数第3行。
当将光标移到所要的行是,行内移动 光标可以用下面的命令来实现:

w                右移光标到下一个字的开头;
e                右移光标到一个字的末尾;
b                左移光标到前一个字的开头;
0                数字0,左移光标到本行的开始;
$                右移光标,到本行的末尾;
^                移动光标,到本行的第一个非空字符。
+                光标移动到非空格符的下一行;
-                光标移动到非空格符的上一行n;
n                n表示数字,按下数字后按空格键,光标右移n个字符,会跨行移动。

查找、搜索匹配

和许多先进的编辑器一样,Vim 提供了强大的字符串搜索功能。要查找文件中指定字或短语出现的位置,可以用Vim直接进行搜索,而不必以手工方式进行。搜索方法是:键入字符 / ,后面跟以要搜索的字符串,然后按回车键。编辑程序执行正向搜索(即朝文件末尾方向),并在找到指定字符串后,将光标停到该字符串的开头;键入 n 命令可以继续执行搜索,找出这一字符串下次出现的位置。用字符 ? 取代 / ,可以实现反向搜索(朝文件开头方向)。例如:

/str1                正向搜索字符串 str1;
n                    继续搜索,重复之前的查找,但是向上重复查找;
N                    继续搜索,重复之前的查找,但是向下重复查找;
?str2                反向搜索字符串 str2 。
:n1,n2s/word1/word2/g   这个操作代表在n1与n2行之间查找word1并用word2来代替它
:1,$s/word1/word2/g     这个操作是从第一行到最后一行进行查找替换
:1,$s/word1/word2/gc    与上面一样只不过多了个确认confirm

无论搜索方向如何,当到达文件末尾或开头时,搜索工作会循环到文件的另一端并继续执行。
Vim中执行搜索匹配最强大的地方是结合 正则表达式 来搜索,后续将会介绍。

替换和删除

Vim常规的删除命令是 d、 x (前者删除 行 ,后者删除 字符 ),结合Vim的其他特性可以实现基础的删除功能。将光标定位于文件内指定位置后,可以用其他字符来替换光标所指向的字符,或从当前光标位置删除一个或多个字符或一行、多行。例如:

rc                 用 c 替换光标所指向的当前字符;
nrc                用 c 替换光标所指向的前 n 个字符;
5rA                用 A 替换光标所指向的前 5 个字符;
x                  删除光标所指向的当前字符;
nx                 删除光标所指向的前 n 个字符;
3x                 删除光标所指向的前 3 个字符;
dw                 删除光标右侧的字;
ndw                删除光标右侧的 n 个字;
3dw                删除光标右侧的 3 个字;
db                 删除光标左侧的字;
ndb                删除光标左侧的 n 个字;
5db                删除光标左侧的 5 个字;
dd                 删除光标所在行,并去除空隙;
ndd                删除(剪切) n 行内容,并去除空隙;
3dd                删除(剪切) 3 行内容,并去除空隙;

其他常用的删除命令有:

d$                从当前光标起删除字符直到行的结束;
d0                从当前光标起删除字符直到行的开始;
J                 删除本行的回车符(CR),并和下一行合并。

Vim常规的替换命令有 c 和 s ,结合Vim的其他特性可以实现基础的替换功能,不过替换命令执行以后,通常会由编辑模式进入插入模式

s                用输入的正文替换光标所指向的字符;
S                删除当前行,并进入编辑模式;
ns               用输入的正文替换光标右侧 n 个字符;
nS               删除当前行在内的 n 行,并进入编辑模式;
cw               用输入的正文替换光标右侧的字;
cW               用输入的正文替换从光标到行尾的所有字符(同 c$ );
ncw              用输入的正文替换光标右侧的 n 个字;
cb               用输入的正文替换光标左侧的字;
ncb              用输入的正文替换光标左侧的 n 个字;
cd               用输入的正文替换光标的所在行;
ncd              用输入的正文替换光标下面的 n 行;
c$               用输入的正文替换从光标开始到本行末尾的所有字符;
c0               用输入的正文替换从本行开头到光标的所有字符。

Vim 入门教程
vim 程序编辑器
http://www.jianshu.com/p/7678a7e6973e
http://www.jianshu.com/p/bcbe916f97e1
http://coolshell.cn/articles/5426.html

推荐阅读更多精彩内容