简介
工欲善其事,必先利其器。
Vim 是个神奇的编辑器(简称“神器”),Vim 运行在字符终端(命令行)下,这意味着你可以在无图形界面(no-GUI)的情况下使用它,相比 GUI 编辑器,Vim 在速度和通用性上都非常完美。
Vim 在许多人心目中是装13神器,至于是不是这样也只有用的人知道了。
Vim 家族中还有 gVim 和 VimTouch 等项目,Windows/*nix/OSX/Android 上都可以使用几乎相同的 Vim 配置对文件进行编辑。(iOS 上有通过终端模拟器运行的 Vim 使用上较为不便)
现在的 Vim 已经走进了插件时代,本文将向您介绍 Vim 的基础配置和基础操作方法。
还有一件和 Vim 齐名的编辑器—— Emacs,可以参见著名的 编辑器之战
使用 Emacs 前请把 Caps Lock 按键和 左 Ctrl 键位互换以保证您的肌肉组织不受到任何损害。
安装
如果你使用的是 Linux 发行版,那么您可以通过各种包管理器方便的安装 Vim,如 Fedora 使用 yum install vim
,Ubuntu 使用 apt-get install vim
这样依次类推。
对于 Windows,个人建议配置 MinGW 环境后安装 Vim(具体方法自行 Google)或者直接使用 gVim。
基本使用 - 第壹节
使用 vimtutor
可以启动 Vim 自带的交互式 Tutorial 文本,推荐先看(zuo)一次 Tutorial 来熟悉编辑环境(那样的话就可以跳过本节了呢~)
请已经熟悉本节的您跳过 基本使用
如果您未安装 Vim,可以配合使用 Cloud Vi 阅读本节。
终端下使用 vim <filename>
打开一个已存在的文件,也可以直接 vim
进入 Vim 编辑器。
Vim 编辑器有明确的 编辑状态 和 移动状态,默认是在移动状态下的,此时可以通过 j
k
进行上下移动 h
l
进行左右移动。(可能需要适应一段时间,但确实是十分方便的设定)
需要大幅度翻页的情况下可以使用 Ctrl + U
Ctrl + D
上下翻页(后文简写为<C-U>
<C-D>
的形式,其他快捷键以此类推)
移动命令还有很多
$
移动到行尾0
移动到行首^
移动到本行内容开始处(不计行首的空白符)w
移动到下一个词的词首e
移动到光标下单词词尾b
移动到光标下单词词首%
移动到与当前光标下括号相匹配的括号(代码段跳转)gg
移动到文件开头G
移动到文件结尾
那么如何插入内容?在需要内容插入的位置按下 i
,出现 --INSERT--
标识时即进入插入状态,此时就可以输入文本了。
完成文本的输入以后按 Esc
退回到原来的状态(不确认在什么状态下的时候可以多按几下 Esc
)。
还可以使用 a
可以从当前光标后进入插入状态,A
则从当前行尾进入插入状态。
Vim 还有一些用于编辑的命令(移动状态)
o
在本行下方新开一行进入插入状态O
在本行上方新开一行进入插入状态x
删除当前光标下的字符dd
删除当前行(包括行尾)r
替换当前光标下的字符为下一个输入的字符R
进入 替换(REPLACE) 模式
那么编辑完成以后使用 :w <filename>
保存文件(此处 <filename>
是可选的,如忽略则写入当前打开的文件)
使用 :q
退出 Vim 编辑器,没有保存更改的情况下 Vim 会提醒保存,放弃更改可使用 :q!
强制退出编辑器。使用 ZZ
直接保存并退出,相当于 :wq
。
另外一些非常有用的指令
u
撤销 (Undo) 最后的编辑<C-R>
重做 (Redo)yy
复制当前行,dd
在删除行的同时也会将被删除的内容放入剪贴板p
粘贴到光标后P
粘贴到光标前cc
更改当前行(先删除当前行内容,然后进入插入状态).
重复执行上一个编辑命令
Vim 的学习曲线还是比较平的,可以先使用最笨的方法完成编辑,等到习惯了已经掌握的操作以后自然去学习其他的操作就可以了,也有一种状况是写东西的时候无意碰出了什么功能然后就顺手学学,无论怎么样,切忌一口吃成胖子
突然吃了这么一大口看起来也有必要消化一下了~
练手
- 新建一个文本(连续使用
dd
把原来的文本删干净吧!) -
输入一些多行文本
Vim is a highly configurable text editor built to enable efficient text editing. It is an improved version of the vi editor distributed with most UNIX systems. Vim is distributed free as charityware. If you find Vim a useful addition to your life please consider helping needy children in Uganda.
-
使用
j
k
在多行文本间上下移动光标 - 使用
w
移动光标到下一个词 - 使用
b
移动光标到词首 - 使用
gg
回到文章头部 - 使用
dd
删除第一行 - 使用
u
撤销上次编辑 - 使用
:w xxx
把文本保存到文件中 - 使用
/to
在文章中查找单词 "to" - 使用
n
N
移动到上一处/下一处匹配到的位置
基本使用 - 第贰节
接下来是稍微复杂一点的编辑命令(复合指令)和查找/替换。
上一节中吃掉的所有编辑指令都是可以带有 数词 的,比如, 15iPark<Esc>
会一次插入 15 个 Park
; 3dd
会删除 3 行; 10x
会删除 10 个字符。
gg
比较特殊,25gg
会跳到文件的第 25 行。
Vim 命令还支持范围操作,所有的移动指令都可以用于范围指定。比如, dw
从当前光标开始删除一个单词; y$
从当前光标开始复制到行尾; d%
删除当前光标括号到对应括号之间的内容。
另外还有一种更高级的指定范围的方法 —— VISUAL 模式
按 v
进入 VISUAL 模式(<C-V>
进入列选 VISUAL 模式)可以通过移动指令操作光标,选定部分区域之后再输入对应的命令就可以执行操作了。比如,veeed
相当于 3dw
。
Vim 除了这些可以方便使用的命令之外还有以 :
开头的扩展命令。比如,:set
用于设置 Vim 环境;:w
保存文件这样的。
查找/替换 是非常常用的功能
*
搜索当前光标下的单词-
/
搜索指定文本(支持正则表达式)如
/something<Enter>
查找 ”something“ -
n
下一处匹配 N
上一处匹配f
查找下一个输入的字符F
查找上一个输入的字符-
:s
替换如
:s/apple/rabbit/g
替换 当前行内 所有 apple 到 rabbit;:%s/rabbit/neko/g
替换 文件内 所有 rabbit 到 neko:<scope>s<d><search><d><replace><d><options>
<d>
可以是任何字符用于分隔参数(习惯上用@
因为不容易在文字中出现),<search>
可以是正则表达式或者单纯的文本。
自己 练练手 吧!(其实是写累了……)
基本使用 - 附加
文档
使用 :help <关键字>
来查看 Vim 的内置文档吧。
Vim 的文档还是非常全面可靠的(有中文版的,还内置了 Tutorial)
剪贴板
Vim 内的剪贴板有许多的存储区,使用 "ayy
将本行内容复制进存储区 a
, "ap
则粘贴 a
存储区内的内容到光标后的位置。
在 gVim 里的 INSERT
模式下是支持 Ctrl + C 复制和 Ctrl + V 粘贴的, Vim 设定了指向系统剪贴板的名字,在移动状态下使用 "*yy
即将当前行复制进系统剪贴板,"*p
将系统剪贴板内容粘贴到当前光标后。