vim 和 emacs 一个号称编辑器之神,一个被称为神的编辑器。打开 vim 执行命令:vimtutor 则可以查看官方说明教程,vimtutor是vim使用入门教程。老实说,自从接触vim到现在也有好多年了,但一直没有强迫自己使用,以及它的难定制性,让我至今都还无法像那些大神一样,完全脱离鼠标和IDE,本文只对 vim 最基础和常用的部分进行详细讲解,不涉及定制和插件等部分内容。

普通模式的操作: [数字] command motion,数字代表了后面实际操作执行的次数;command 是执行命令,如:复制,粘贴,剪切等;motion 是操作符,代表了执行命令的操作范围就是定位命令如:i,j,k,l,G等等。

普通模式是任何模式的中继,虽然普通模式下你只能通过一些命令进行简单的操作,但如果你想从某个模式进入另外一个模式都必须要先进入普通模式,如:从插入模式进入可视模式,必须先按 esc 进入普通模式,然后按 v 进入可视模式。

ex 命令都是以 : 开头的字符

移动

在普通模式下,可以用键盘实现光标的移动,h j k l 分别代表光标的 左 下 上 右 的移动。请按 esc 键(这是为了确保您处在正常模式)。

  • h 的键位于左边,每次按下就会向左移动。
  • l 的键位于右边,每次按下就会向右移动。
  • j 键看起来很象一支尖端方向朝下的箭头。
  • k 朝上移动。
  • gg 跳到首行
  • G 跳到末行

退出

在命令模式下,在普通模式中,输入冒号则进入命令行模式:

  • 输入 w 则保存
  • 输入 q 则退出该软件
  • 输入 wq 保存并退出
  • 输入 q! 强制退出。

删除

普通模式下,删除单一字符可以使用 x 命令,如果删除更多字符则可以使用 d 命令:d motion

motion 表示操作范围的指令,一下内容再次出现的 motion 都参见这边的表格:

按键 定义
0 将光标定位到行首位置
$ 光标定位到行尾位置
b 将光标定位到光标所在单词的起始处
e 将光标定位到光标所在单词的结尾处
w 将光标定位到下一个单词的起始处
gg 将光标定位到文件开头
G 将光标定位到文件结尾

如果删除更多字符则可以使用 c 命令:c motion,和 d 命令类似,区别是删除后,进入插入模式。

vim 中所有的删除都相当于剪切,并不是真正意义上的删除,所以一旦粘贴的话往往会是你所删除的那些内容。

复制

普通模式下,可以使用 y 命令:y [数字] motion。复制的操作和删除类似,学习 vim 时尤其需要注意这些共性。

vim有12个粘贴板,分别是 0、1、2、...、9、a、"、+ 用 :reg 命令可以查看各个粘贴板里的内容。下面讲一下vim的粘贴板的基础知识:

  • +号粘贴板是系统粘贴板,用 “+y 将内容复制到该粘贴板后可以使用 Ctrl+V 将其粘贴到其他文档(如firefox、gedit)中,同理,要把在其他地方用 Ctrl+C 或右键复制的内容复制到 vim 中,需要在正常模式下按 “+p 。
  • “ 号粘贴板(临时粘贴板)比较特殊,直接按 y 就复制到这个粘贴板中了,直接按 p 就粘贴这个粘贴板中的内容;
  • 要将vim某个粘贴板里的内容粘贴进来,需要退出编辑模式,在正常模式按”Np,其中N为粘贴板号,如上所述,可以按”5p将5号粘贴板里的内容粘贴进来,也可以按”+p将系统全局粘贴板里的内容粘贴进来。

粘贴

p 将最后一次剪切或者复制的内容,粘贴到光标之后;P 将最后一次剪切或者复制的内容,粘贴到光标之前

撤销

普通模式下,u 表示撤销最后一次修改,U 撤销整行的修改,ctrl+r 恢复撤销的内容。

插入

在普通模式下进入插入模式,可以使用以下指令:

  • i:光标前插入
  • I :行首插入
  • a:光标后插入
  • A:行尾插入

可视

出了插入,普通,命令模式外,还有可视模式,通过 v 和 V 进入该模式。

跳转

跳转到指定行:

  • 普通模式下输入:行号+G
  • 进入命令行模式::行号

搜索

查找光标所指向的单词,直接 shift+* 即可高亮。

输入/内容,则会匹配所有相关内容,按 n 搜索下一个匹配, 按 N 搜索上一个匹配。

搜索诸如:. * [ ] ^ % / ? ~ $ 等,需要在前面加上 \ 转义字符。

取消搜索的高亮,则可以输入:nohl(nohighlight的缩写)。

替换

  • :s/原内容/替换 : 光标后找到第一匹配内容并替换
  • :%s/原内容/替换 : 请示替换内容
  • :1,10s/原内容/替换/g : 1-10 行的所有内容进行替换

多窗口

打开 vim 时,输入 vim -o a b c 可以并排打开三个文件,使用 ctrl + w + w 切换到下个窗口,也可以使用 ctrl + w + 方向按键进行切换。

小技巧

zz 代替 :wq
:map 宏定义
. :代表当前行,$代表最后行,1代表第一行
:! :输入 shell 命令 ; :r 文件名; :r! : 插入 shell 命令输出结果
:e :切换编辑新文件,无需退出
:e!
s
cc/S
cw
de
deep
ddp
. 操作
~ : 改变大小写
:co
:m

参考链接:
http://blog.csdn.net/nkguohao/article/details/8937695