跳到主要内容

光标移动

光标移动是 Vim 最基本的操作,也是高效编辑的基础。Vim 提供了极其丰富的移动命令,让你能快速定位到文本的任何位置。

基本移动:h j k l

Vim 使用 hjkl 四个键代替方向键:

      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

大写的 WBE字串(以空格分隔)移动:

文本: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+iTab跳转到下一个位置(newer)
:ju:jumps查看跳转列表

什么算跳转

  • ggGnG
  • /? 搜索
  • % 匹配括号
  • (){} 段落移动
  • 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 eword, back, end
页面H M LHigh, Middle, Low
翻页Ctrl+f/bforward, backward
半页Ctrl+d/udown, up
搜索f F t Tfind, till
匹配%配对符号
文件gg Ggo to start, go to end

下一步

掌握了光标移动后,下一章我们将学习编辑技巧,包括删除、复制、粘贴等核心操作。这些操作与移动命令结合,将展现 Vim 真正的威力。