Vim 编辑器简介

Vim简介

Vim(Vi IMproved)是由vi(Visual Interface)发展而来,与Emacs并列成为Linux用户最喜欢的文本编辑神器。Vim的第一个版本由布莱姆·米勒在1991年发布。最初的简称是Vi IMitation,随着功能的不断增加,正式名称改成了Vi IMproved。现在是在开放源代码方式下发行的自由软件。下面就说说Vim编辑器的简单操作。

模式匹配

Vim是一个模式化的编辑器,在不同的模式下,相同操作所实现的功能各不相同。

基本模式

  • 编辑模式:使用命令,比如ddui,也称为命令模式;

  • 输入模式:插入内容,插入键盘输入的内容;

  • 末行模式:内置的命令行接口,比如:set nu:wq

打开文件

1
vim [OPTION]... FILE...
  • +n 打开文件后,直接让光标处于第n行的行首;

比如,打开一个文件,直接进入第12行:

1
vim +12 /tmp/test.txt
  • +/PATTERN 打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首;

比如,打开一个文件,直接进入行尾:

1
vim + /tmp/test.txt

模式转换

  • 编辑模式 –> 输入模式

i insert, 在光标所在处输入;

a append, 在光标所在处后面输入;

o 在当前光标所在行的下方打开一个新行;

I 在当前光标所在行的行首输入;

A 在当前光标所在行的行尾输入;

O 在当前光标所在行的上方打开一个新行;

  • 输入模式 –> 编辑模式

ESC

  • 编辑模式 –> 末行模式

:

  • 末行模式 –> 编辑模式

ESC

关闭文件

  • :q 退出;

  • :q! 强制退出,丢弃做出的修改;

  • :wq 保存退出;

  • :x 保存退出;

  • :w /PATH/TO/SOMEWHERE 保存或另存为指定文件路径;

  • 命令模式下执行ZZ 保存退出;

光标跳转

编辑模式(命令模式)下的光标跳转。

字符间跳转

  • h

  • l

  • j

  • k

  • 跳转指定个数的字符:

比如:向左跳10个字符

1
10h

单词间跳转

  • w 下一个单词的词首;

  • e 当前或下一单词的词尾;

  • b 当前或前一个单词的词首;

  • 跳转指定个数的单词:

比如:向左跳10个单词

1
10w

行首行尾跳转

  • ^ 跳转至行首的第一个非空白字符;

  • 0 跳转至行首;

  • $ 跳转至行尾;

行间移动

  • G 最后一行;

  • 1Ggg 第一行;

  • 跳转到指定行:

比如,跳转到第10行

1
10G

句间移动

  • ) 跳转到下一个句子;

  • ( 跳转到上一个句子;

段落间移动

  • } 跳转到下一段落;

  • { 跳转到上一段落;

编辑命令

字符编辑

  • x 删除光标处的字符;

  • nx 删除光标处起始的n个字符;

  • xp 交换光标所在处的字符及其后面字符的位置;

  • r 替换光标所在处的字符;

删除命令

  • d 删除命令,可结合光标跳转字符,实现范围删除;

  • d$ 删除光标所在处到行尾的内容;

  • d^ 删除光标所在处到行首第一个非空白字符的内容;

  • d0 删除光标所在处到行首的内容;

  • dw 删除光标所在处到下一个单词的词首的内容;

  • de 删除光标所在处到当前单词的词尾的内容;

  • db 删除光标所在处到当前或前一个单词的词首的内容;

  • dd 删除光标所在的行;

以上命令都可以使用ncommand的形式进行批量操作。

  • ndd 删除光标所在处开始的n行(向下删除);

粘贴命令

使用d删除的内容也保存在缓冲区,可以用粘贴命令进行粘贴(dp的结合构成了剪切操作)(只粘贴最后一次操作的内容)。

  • p 缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面;

  • P 缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面(和p的工作方式相反);

复制命令

  • y 复制,工作行为相似于d命令;

  • y$ 复制光标所在处到行尾的内容;

  • y0 复制光标所在处到行首的内容;

  • y^ 复制光标所在处到行首第一个非空白字符的内容;

  • ye 复制光标所在处到当前单词的词尾的内容;

  • yw 复制光标所在处到下一个单词的词首的内容;

  • yb 复制光标所在处到当前或前一个单词的词首的内容;

  • yy 复制光标所在行;

以上命令都可以使用ncommand的形式进行批量操作。

  • nyy 复制光标所在处开始的n行(向下复制);

改变命令

  • c 修改,工作行为相似于d命令,不同的是执行c后,由编辑模式进入到输入模式

  • c$ 删除光标所在处到行尾的内容,并进入输入模式

  • c^ 删除光标所在处到行首第一个非空白字符的内容,并进入输入模式

  • c0 删除光标所在处到行首的内容,并进入输入模式

  • cb 删除光标所在处到当前或前一个单词的词首的内容,并进入输入模式

  • ce 删除光标所在处到当前单词的词尾的内容,并进入输入模式

  • cw 删除光标所在处到下一个单词的词首的内容,并进入输入模式

  • cc 删除光标所在行,并进入输入模式

以上命令都可以使用ncommand的形式进行批量操作。

  • ncc 删除光标所在处开始的n行(向下删除),并进入输入模式

可视化模式

经常结合编辑命令使用:dcy等;

  • v 按字符选定;
  • V 按行行定;

撤消此前的编辑

  • u 撤消此前的操作;

  • nu 撤消前n次操作;

撤消此前的撤消(恢复撤销的内容)

  • Ctrl+r

重复前一个编辑操作

  • .

翻屏操作

  • Ctrl+f 向文件尾部翻一屏;

  • Ctrl+b 向文件首部翻一屏;

  • Ctrl+d 向文件尾部翻半屏;

  • Ctrl+u 向文件首部翻半屏;

练习教程

vimtutor

末行模式

vim内建的命令行接口。

地址定界

后跟编辑命令使用:dcy等;

w /PATH/TO/SOMEWHERE 将范围内的行另存至指定文件中;

r /PATH/FROM/SOMEFILE 在指定位置插入指定文件中的所有内容;

  • :1 第1行;

  • :1,100 从1到100行;

  • :1,+3 从第1行开始,向下加3行;

  • :. 当前行;

  • :$ 最后一行;

  • :.,$-1 当前行到倒数第2行;

  • :% 全文, 相当于:1,$

  • :/pat1/,/pat2/ 使用正则,从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束;

查找

  • /PATTERN 从当前光标所在处向文件尾部查找;
  • ?PATTERN 从当前光标所在处向文件首部查找;
  • n 与命令同方向查找;
  • N 与命令反方向查找;

替换

  • :s/要查找的内容/替换为的内容/修饰符 分隔符可用其他字符替换;

说明:

  • 要查找的内容:可使用模式;

  • 替换为的内容:不能使用模式,但可以使用\1, \2, …等后向引用符号;还可以使用&引用前面查找时查找到的整个内容;

  • 修饰符:i(忽略大小写),g(全局替换,默认情况下,每一行只替换第一次出现);

应用:

:.,$s/r\(oo\)t/R\1T/g

:.,$s#r\(oo\)t#R\1T#g

把从当前位置到文档结尾的root全局替换成RooT

多文件模式

vim FILE1 FILE2 FILE3 ...

  • :next 下一个;

  • :prev 前一个;

  • :first 第一个;

  • :last 最后一个;

  • :wall 保存所有;

  • :qall 退出所有;

  • :wqall 保存并推出所有;

窗口分隔模式

vim -o|-O FILE1 FILE2 ...

  • -o: 水平分割;

  • -O: 垂直分割;

  • 在窗口间切换:Ctrl+w → ← ↑ ↓

单文件窗口分割

  • Ctrl+w s split,水平分割;

  • Ctrl+w v vertical,垂直分割;

定制vim的工作特性:

配置文件:永久有效

  • 全局:/etc/vimrc
  • 个人:~/.vimrc(自行创建);

末行:当前vim进程有效

  • 行号

显示::set number,简写为:set nu
取消显示::set nonumber,简写为:set nonu

  • 括号匹配

匹配::set showmatch,简写为:set sm
取消::set nosm

  • 自动缩进

启用::set ai
禁用::set noai

  • 高亮搜索

启用::set hlsearch
禁用::set nohlsearch

  • 语法高亮

启用::syntax on
禁用::syntax off

  • 忽略字符的大小写

启用::set ic
不忽略::set noic

获取帮助

  • :help
  • :help subject