0%

vi 入门

vi编辑器是所有Unix及Linux系统下标准的编辑器。 vim 是 vi 的升级版本,不仅兼容 vi 的所有指令,还新增了一些新的特性

虽然 vim 的学习曲线相对于其他的编辑器来说非常的陡峭,但是当你熟悉了 vim 的这种开发模式后,你会发现你真的有种离不开 vim 的感觉。

vim 的模式

  • normal
  • insert
  • visual
    在 insert 模式下你才能输入你想输入的文本,normal 模式下按i键进入 insert 模式, 按Esc键进入 normal 模式。normal 模式和 visual 模式可以实现很多炫酷和强大的功能。

基本操作

光标移动

h 前 ←
j 下 ↓
k 上 ↑
l 后 →
0(数字 0) 移动到行首
^ 移动到行首(不包括空格)
$ 移动到行尾
g_ 移动到行尾(不包括空格)
gg 文件的起始位置
G 文件的结尾位置
H 移动光标到屏幕上面
M 移动光标到屏幕中间
L 移动光标到屏幕下面
w 移动到下一个单词的开头(默认来说,一个单词由字母,数字和下划线组成)
e 移动到单词的结尾(如果你认为单词是由空格字符分隔符,那么你需要使用大写的E, W, B)
b 移动到单词的开头
t. 到逗号前的第一个字符。 逗号可以变成其他字符 eg: t, (t: 查找光标后面的字符,T: 查找光标前面的)
fa 到下一个为 a 的字符处,a 可以为其他字符 eg: fs (f: 查找光标后面的字符,F: 查找光标前面的)
) 移动光标到下一个句子
( 移动光标到上一个句子

常规操作

i 光标前插入字符
a 光标后插入字符
I 行首(不包括空格)插入字符
A 行尾(不包含空格)插入字符
o 在当前行后插入一个新行
O(大写的 o) 在当前行前插入一个新行
r 替换当前光标所在的字符(单个)
R 替换多个字符
x 删除当前光标所在的第一个字符
X 删除当前光标的前一个字符
dd 删除整行
D 删除到行尾
S 删除整行并进入 insert 模式
cw 删除当前光标到下一个的单词开头的前一个字符并进入 insert 模式(同理: ce, cb…)
C 删除到行尾并进入 insert 模式
yy 复制整行
p 粘贴到光标的下一行
P 粘贴到光标之上一行
u 撤销
ctrl + r 回到最新的状态
/pattern 搜索字符串pattern(pattern 可以为其他字符串, 如果搜索出多个匹配可以按n键到下一个)
gu 变小写
gU 表大写

文件相关

:e(path/to/file) 打开路径为path的文件
:saveas(path/to/file) 文件另存为(路径)
:w 写入文件(w!: 强制写入)
:q 退出(q!: 强制退出)
:wq 保存并退出(wq!: 强制写入并退出)
:bn 切换到下一个 buffer
:bp 切换到上一个 buffer
:b [number] 切换指定的 buffer(eg: b3 切换到 number 为 3 的 buffer)
:gt 切换 tab

翻页

ctrl+e 向下翻一行
ctrl+y 向上翻一行
ctrl+b 向上翻一页
ctrl+f 向下翻一页
ctrl+u 向上翻半页
ctrl+d 向下翻半页

分屏

:split(:sp) 水平分屏

:vsplit(:vsp) 垂直分屏

  • 使用ctrl-w-<dir>: dir代表方向,可以是hjkl
  • ctrl-w-_ 最大化尺寸, ctrl-w-|
  • ctrl-w-+, ctrl-w- —: 增加尺寸,缩小尺寸

进阶操作

.: 重复上一次的命令

n command: 重复某个命令 n 次

例如:

2dd 删除两行

2x 删除两个字符

3ihello [Esc] → 会输入:hello hello hello

光标移动

:N: 到第 N 行(eg: :5跳转到第 5 行), 等同于5G(NG)

%: 匹配括号移动,包括(,{,[等。 (注:你需要把光标移动到括号上)

*: 匹配当前光标所在的单词。(*是下一个,#是上一个)

`.: 移动到上次编辑的位置

更快

start+command+end

例如:

0y$:

  • 0 先到行头
  • y 从这里开始拷贝
  • $ 拷贝到本行最后一个字符

你同样可以输入ye从当前位置拷贝到本单词最后一个字符,也可以输入y2/foo来拷贝2个“foo”之间的字符串。

dt”:删除所有内容,直到遇到双引号"

区域选择

<action>a<object>

<action>i<object>

  • action可以是任何的命令(如: d: 删除, y: 拷贝…)

  • object可以是: w一个单词, W一个以空格为分割的单词, s一个句子, p一个段落, 也可以是一个特别的字符: “, ‘, ), }, ],等。

如图所示的字符串,光标在第一个o的位置:

vim

  • vi" → foo
  • va" → “foo”
  • vi) → “foo”
  • va) → (“foo”)
  • v2i) → map (+) (“foo”)
  • v2a) → (map (+) (“foo”))

区域选择

<ctrl-v>

举例操作:

区域选择

  • ^ 到行头
  • <ctrl-v> 开始块操作
  • j 向下移动
  • I 插入“- -”,按ESC键来为每一行生效

可视化选择

v , V, ctrl-v

如同ctrl-v 一样,我们可以使用v, V来进行可视化选择, 可以很多事情:

  • J 把所有的行连接起来(变成一行)
  • <, > 左右缩进
  • = 自动给缩进

我想说:

虽然vim的命令比较多,但是只要坚持使用你很快就会感受它的强大。放弃鼠标愉快的coding吧。