vim 移动与跳转
1. 基础移动
基础的上下左右hjkl不做记录,多练就行,用不来就使用方向键,没必要为难自己
需要记录的只有gj和gk
gj
:向下移动一物理行(rn结尾的可以理解成逻辑行
),一行字符太多显示时会做line wrap
gk
:向上移动一物理行 ,同gj
2. 单词移动
iskeyword
设置如下,所以只要遇到一个非a-z,A-Z
就标识是一个单词结束:
set iskeyword=a-z,A-Z
例子:例如,non-blank
,这里有三个个word
,一个是non
,一个是-
,另一个是blank
。
需要记三个按键:w、e、b,分别是下一 个单词的开头、下一个 单词的结尾、上一个 单词的结尾
注:将”下一个“与”单词“分开,便于理解
3. 文本对象(text object)级移动
(
,移动到上一个语句开头)
,移动到下一个语句开头{
,移动到上一个段落开头}
,移动到下一个段落开头- 以下四条命令因为使用不多,建议不要记忆
]]
,跳转到下一个第一列的{
(貌似很少有个{
在第一列)][
,跳转到下一个第一列的}
,和上面的对应[[
,跳转到上一个第一列的{
[]
,跳转到上一个第一列的}
%
,可以用于{}()[]/**/
等匹配,如光标置于{
下,按%
可以跳转到对应的}
[(
,上一个(
])
,下一个)
[{
,上一个{
]}
,下一个}
]m
,下一个函数开头
]M
,下一个函数结尾
[m
,上一个函数开头
[M
,上一个函数结尾
]#
,上一个#if
或者#else
[#
,下一个#else
或者#endif
[*
或者[/
,上一个/*
]*
或者]/
,下一个*/
H
,窗口第一行M
,窗口中间一行L
, 窗口最后一行gg
,跳转到文档开头G
,跳转到文档结尾nG
,跳转到文档第n行
4. 标记跳转
vim中可以给文档打mark,然后根据mark名称做快速跳转。mark名称只有一个字符:a-zA-Z
,以下``和
‘`等效。
a-z
,只在当前文件内有效A-Z
,跨文件有效,mark信息会保存在.viminfo
文件中0-9
,.viminfo
使用的mark,不能被用户设置,`0
,是上次退出vim时光标所在位置,这个命令可以快速返会到上次退出时的地方m{a-zA-Z}
,给文档打一个mark,如ma
,后续使用`a
或者'a
跳转回去m
` ,设置上一个mark,后续可以通过“ 跳转回去,能跳转到具体列m'
,设置上一个mark,后续可以通过''
跳转回去 ,只能跳转到行g
a或者
g`` 等,添加
g`,可以在不修改jumplist下跳转:marks
,显示所有mark:delm{arks} {marks}
,删除mark,可以批量:delm{arks}!
,删除所有marks
`和’等效,下面全部使用’为例:
'[
,跳转到上次编辑的第一个字符']
,跳转到上次编辑的最后一个字符
以'
或者 “` 开头的命令还很多,因为用的不是很多,可以不用记住全部。
5. 跳转
ctrl+i
,向前ctrl+o
,向后:ju[mps]
,输出所有跳转:cle[arjumps]
,清楚所有跳转^
,跳转到开头,不包含空白字符0
,跳转到一行第一个字符$
,跳转到一行最后
滚屏:
ctrl+u
,向上滚半屏ctrl+d
,向下滚半屏ctrl+y
,向上滚一行ctrl+e
,向下滚一行ctrl+f
,向下滚整屏ctrl+b
,向上滚整屏
6. 搜索跳转
单字符搜索:
f{char}
,向右搜索字符F{char}
,想做搜索字符t{char}
,向右搜索字符,光标在该字符左侧一个字符T{char}
,向右搜索字符,光标在该字符右侧一个字符;
,重复上一次的fFtT
几个命令,
,反方向重复上一次的fFtT
几个命令
字符串搜索:
/xxxxx
,全局搜索xxxxx字符串- 按
n
,继续向后搜索;按N
向前搜索