光标移动
光标移动是 Vim 最基本的操作,也是高效编辑的基础。Vim 提供了极其丰富的移动命令,让你能快速定位到文本的任何位置。
基本移动:h j k l
Vim 使用 h、j、k、l 四个键代替方向键:
k
h l
j
| 按键 | 方向 | 记忆方法 |
|---|---|---|
h | 左 | 最左边 |
j | 下 | 像下箭头 |
k | 上 | 像上箭头 |
l | 右 | 最右边 |
为什么不用方向键?
使用 hjkl 的好处是手指不需要离开主键盘区,大大提高效率。刚开始可能不习惯,但坚持练习一周就能形成肌肉记忆。
配合数字使用:
在移动命令前加数字,可以重复移动多次:
5j - 向下移动 5 行
10k - 向上移动 10 行
3h - 向左移动 3 个字符
20l - 向右移动 20 个字符
行内移动
基础行内移动
| 按键 | 作用 | 说明 |
|---|---|---|
0 | 移到行首 | 数字 0 |
^ | 移到行首第一个非空字符 | |
$ | 移到行尾 | 正则表达式结尾符 |
g_ | 移到行尾最后一个非空字符 |
示例:
行内容: Hello World
^ ^ ^ ^
| | | |
^ H d $
0 g_
按单词移动
| 按键 | 作用 |
|---|---|
w | 移到下一个单词开头(word) |
b | 移到上一个单词开头(back) |
e | 移到下一个单词结尾(end) |
ge | 移到上一个单词结尾 |
示例:
文本:Hello Vim editor
按 w:H[ello] [Vim] [editor]
按 b:从 editor 往回移动
按 e:[Hello] [Vim] [editor]
大写 W、B、E
大写的 W、B、E 按字串(以空格分隔)移动:
文本:hello-world vim_editor
按 w:h[e]llo-[w]orld [v]im_[e]ditor (按单词)
按 W:[hello-world] [vim_editor] (按字串)
行间移动
按行号移动
| 按键 | 作用 |
|---|---|
gg | 跳到文件第一行 |
G | 跳到文件最后一行 |
nG 或 :n | 跳到第 n 行 |
Ctrl+g | 显示当前位置信息 |
示例:
10G " 跳到第 10 行
:25 " 跳到第 25 行
gg " 跳到文件开头
G " 跳到文件结尾
按屏幕移动
| 按键 | 作用 |
|---|---|
H | 跳到屏幕顶部(High) |
M | 跳到屏幕中间(Middle) |
L | 跳到屏幕底部(Low) |
翻页
| 按键 | 作用 |
|---|---|
Ctrl+f | 向下翻一页(forward) |
Ctrl+b | 向上翻一页(backward) |
Ctrl+d | 向下翻半页(down) |
Ctrl+u | 向上翻半页(up) |
Ctrl+e | 向下滚动一行 |
Ctrl+y | 向上滚动一行 |
段落和代码块移动
| 按键 | 作用 |
|---|---|
{ | 移到上一个段落/空行 |
} | 移到下一个段落/空行 |
[[ | 移到上一个函数/代码块开始 |
]] | 移到下一个函数/代码块开始 |
[] | 移到上一个函数/代码块结束 |
][ | 移到下一个函数/代码块结束 |
字符搜索
行内搜索
| 按键 | 作用 |
|---|---|
f{char} | 向右搜索字符,停在字符上(find) |
F{char} | 向左搜索字符,停在字符上 |
t{char} | 向右搜索字符,停在字符前(till) |
T{char} | 向左搜索字符,停在字符后 |
; | 重复上次搜索(同方向) |
, | 重复上次搜索(反方向) |
示例:
文本:Hello,World,Vim
按 fo:Hello,[W]orld,Vim (停在 o)
按 Fo:Hell[o],World,Vim (向左找 o)
按 to:Hello,[W]orld,Vim (停在 o 前)
按 ;:Hello,World[,]Vim (重复找 o)
全文搜索
| 按键 | 作用 |
|---|---|
/{pattern} | 向前搜索 |
?{pattern} | 向后搜索 |
n | 跳到下一个匹配 |
N | 跳到上一个匹配 |
* | 向前搜索光标下的单词 |
# | 向后搜索光标下的单词 |
示例:
/function " 搜索 function
n " 下一个匹配
N " 上一个匹配
* " 搜索当前单词
文本对象移动
文本对象(Text Objects)是 Vim 最强大的功能之一,用于选择或操作特定的文本结构。
配对符号
| 按键 | 作用 |
|---|---|
% | 跳到匹配的括号 () [] {} |
示例:
def hello(): # 光标在 ( 上
print("world") # 按 % 跳到 )
return True # 再按 % 跳回 (
标记(Mark)
标记允许你在文件中设置"书签",方便快速跳转。
设置和跳转标记
| 按键 | 作用 |
|---|---|
m{a-zA-Z} | 设置标记 |
`{mark} | 跳到标记位置(精确位置) |
'{mark} | 跳到标记所在行首 |
标记类型:
a-z:文件内标记,只在当前文件有效A-Z:全局标记,可以跨文件跳转
示例:
ma " 在当前位置设置标记 a
' a " 跳到标记 a 所在行
` a " 跳到标记 a 的精确位置
mb " 设置标记 b
' b " 跳到标记 b
特殊标记
Vim 自动维护一些特殊标记:
| 标记 | 含义 |
|---|---|
` | 上次跳转前的位置 |
. | 上次修改的位置 |
^ | 上次插入模式结束的位置 |
[ | 上次修改或复制的开始位置 |
] | 上次修改或复制的结束位置 |
< | 上次可视模式选择的开始 |
> | 上次可视模式选择的结束 |
示例:
` ` " 回到上次跳转位置(两个反引号)
' . " 跳到上次修改处
跳转列表
Vim 记录你的跳转历史,可以前进或后退。
| 按键 | 作用 |
|---|---|
Ctrl+o | 跳转到上一个位置(older) |
Ctrl+i 或 Tab | 跳转到下一个位置(newer) |
:ju 或 :jumps | 查看跳转列表 |
什么算跳转:
gg、G、nG/或?搜索%匹配括号(、)、{、}段落移动m设置标记后跳转
示例:
1. 按 gg 跳到文件开头
2. 按 /function 搜索,按回车
3. 按 n 几次,浏览搜索结果
4. 按 Ctrl+o 几次,回到之前的位置
5. 按 Ctrl+i,向前跳转
改变列表
记录文本修改的位置,方便在修改点之间跳转。
| 按键 | 作用 |
|---|---|
g; | 跳到上一个修改位置 |
g, | 跳到下一个修改位置 |
:changes | 查看修改列表 |
移动技巧
1. 相对行号配合移动
启用相对行号后,可以一眼看出需要移动多少行:
set relativenumber
3 line one
2 line two
1 line three
8 current line <-- 光标在这里
1 line five
2 line six
看到目标行标着 2,直接按 2j 即可到达。
2. 组合移动与操作
移动命令可以与操作命令组合:
d$ " 删除到行尾
dgg " 删除到文件开头
dG " 删除到文件结尾
dfx " 删除到字符 x
ciw " 修改当前单词
3. 屏幕居中
| 按键 | 作用 |
|---|---|
zz | 将当前行移到屏幕中央 |
zt | 将当前行移到屏幕顶部(top) |
zb | 将当前行移到屏幕底部(bottom) |
4. 快速回到上次位置
`` " 回到上次跳转位置
'. " 回到上次修改位置
'^ " 回到上次插入结束位置
练习
练习 1:基础移动
创建一个文件,练习基本移动:
1. vim practice.txt
2. 输入 20 行文本
3. 练习 gg, G, 10G, H, M, L
4. 练习 w, b, e, ge 在单词间移动
5. 练习 0, ^, $ 在行内移动
练习 2:搜索练习
1. 打开一个代码文件
2. 用 / 搜索函数名
3. 用 n/N 浏览所有匹配
4. 用 * 搜索当前单词
5. 用 f/F/t/T 在行内搜索
练习 3:标记使用
1. 打开一个长文件
2. 在重要位置设置标记 ma, mb, mc
3. 在文件各处跳转
4. 用 'a, 'b, 'c 快速返回标记
5. 用 Ctrl+o 在历史间跳转
移动命令速记
| 类别 | 命令 | 记忆 |
|---|---|---|
| 基本 | hjkl | 左下上右 |
| 行首 | 0 ^ | 0=绝对行首,^=首个非空 |
| 行尾 | $ g_ | $=行尾,g_=最后非空 |
| 单词 | w b e | word, back, end |
| 页面 | H M L | High, Middle, Low |
| 翻页 | Ctrl+f/b | forward, backward |
| 半页 | Ctrl+d/u | down, up |
| 搜索 | f F t T | find, till |
| 匹配 | % | 配对符号 |
| 文件 | gg G | go to start, go to end |
下一步
掌握了光标移动后,下一章我们将学习编辑技巧,包括删除、复制、粘贴等核心操作。这些操作与移动命令结合,将展现 Vim 真正的威力。