光标移动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//按字符移动:
j
h l
k

//半屏滚动
Ctrl-D move half-page down。半屏向下,下的意思是进入更大的行数
Ctrl-U move half-page up。半屏向上。

//全屏滚动
Ctrl-B page up。全屏向上,back, 进入更少行数
Ctrl-F page down。全屏向下,Forward, 进入更多行数

//单行滚动
Ctrl-Y move view pane up。单行向上滚动,光标所在行不动
Ctrl-E move view pane down。单行向下。

//按字移动
e 移动到当前word结尾
w 移动到下一个word开头
b 移动到上一个word开头
//这三个功能和上面小写的一样,但是移动得更快,是以空白符作为分割
//比如I_LOVE_CHINA Good, 当前光标在I, w会移动到L,
//而W会移动到Good, 也就是下一个空格出现的word。其他以此类推
E
W
B

//行移动
0 移动到行首
^ 移动到行首
$ 移动到行尾
+ 移动到上一行首
- 移动到下一行首


//当一行很长但并没有换行符时,在屏幕上显示被分割成好几行时,可以用gj, gk在显示行之间移动
gm 移动到行中间
gj
gk

G 移动到最后一行
gg 移动到第一行
ngg 移动到n行,比如9gg,移动到第9行

//光标按屏幕移动
H 光标移动到屏幕顶行
M 光标移动到屏幕中间行
L 光标移动到屏幕底行

zz 光标所在行移动到屏幕中间
zt 光标所在行移动到屏幕顶部
zb 光标所在行移动到屏幕底部

//按特定字符移动
//比如f r, 则跳到下一个r处,大写的为反方向跳动,t表示跳到下一个r之前一个字符。
f{char}
F{char}
t{char}
T{char}
; //重复上面的f,t命令
, //反方向重复f, t命令

// 按括号移动
%, 前后括号间跳转。比如从"("跳转到")"
[{ 跳转到前一个大括号
]} 跳转到后一个大括号
[( 跳转到前一个小括号
]) 跳转到后一个小括号
[/ 跳转到前一个注释开头
]/ 跳转到下一个注释结尾
[m 跳转到前一个函数开头
]m 跳转到后一个函数开头
]] 同]}
[[ 同[{

自动补全

vim 在插入模式下具有自动补全功能:

关键字补全

使用Ctrl-N或Ctrl-P键,将按照complete选项指定的范围来搜索匹配的关键字。其默认值为:

1
:set complete=.,w,b,u,t,i

也就是说,默认将在以下来源中查找关键字:

  • 在当前缓冲区中进行查找;
  • 在其他窗口中进行查找;
  • 在其他已载入的缓冲区中进行查找;
  • 在没有载入缓冲区的文件中进行查找;
  • 在当前的标签(tags)列表进行查找;
  • 在由当前文件(如#include)包含进来的头文件中进行查找。

complete 的所有 key 值为:

value description
. 当前缓冲区
b 缓冲区列表中的其它已载入的缓冲区
d 当前文件以及由include选项指定的包含进来的文件查找由define选项定义的宏(definition/macro)
i 当前文件以及由include选项指定的包含进来的文件
k dictionary选项指定的文件
kspell 当前激活的拼写检查
k{dict} 名为{dict}的文件
s thesaurus选项指定的文件
t or ] 标签(tags)文件
u 缓冲区列表中的没有载入的缓冲区
w 在其他窗口中载入的文件

^X模式(Ctrl-X Mode)

在插入模式下,输入Ctrl-X将进入^X模式(插入和替换模式的一个子模式)。屏幕底部将显示以下提示信息:

1
-- ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)

可以选择以下自动补全方式:

Ctrl-] 标签(tags)补全
Ctrl-D 定义补全
Ctrl-E 向上滚动文本
Ctrl-F 文件名补全
Ctrl-I 当前文件以及包含进来的文件补全
Ctrl-K 字典补全
Ctrl-L 整行补全
Ctrl-N 当前文件内的关键字补全,向下选择匹配项
Ctrl-O 全能补全
Ctrl-P 当前文件内的关键字补全,向上选择匹配项
Ctrl-S 拼写建议补全
Ctrl-U 用户自定义补全
Ctrl-V Vim命令补全
Ctrl-Y 向下滚动文本

https://yyq123.github.io/learn-vim/learn-vi-80-02-AutoCompletion-Detail.html#compl-tag

补全弹出菜单(popupmenu-completion)

  • 使用Ctrl-N和Ctrl-P上下移动时,输入的文本也会随之变化。
  • 使用上下移动时,输入的文字并不会变化。
  • 使用键,可以在菜单中翻页。
  • 使用Ctrl-Y或Enter回车键,将使用当前匹配项完成补全。
  • 使用Ctrl-E键,将关闭菜单并退回到文字输入的原始状态。
  • 使用Esc键,将关闭弹出菜单,但会保留之前应用的匹配项。

使用:h popupmenu-keys命令,可以查看关于弹出菜单快捷键的帮助信息。

录制

在 normal 模式下,输入

1
q[reg]

进入宏录制状态,此时左下角会显示 recoding 状态。其中[reg]表示寄存器名,在 vim 中可以有[a-z]26个英文字母名寄存器或[0-9]10个数字名寄存器

要进行的操作录制完成后,输入q结束录制,宏保存在这个寄存器中

要执行这个宏,只需要在 normal 模式下输入

1
[n]@[reg]

其中[n]表示执行的次数,@访问对应寄存器名

修改宏

  1. 使用命令 “ap 将寄存器a中的命令宏粘贴到当前位置
  2. 编辑这一行的宏内容,编辑结束后用 0 回到行首
  3. 使用命令 “ayy 将当前行的内容复制到寄存器a中,达到修改寄存器a宏内容的目的

let 方式修改

也可以直接使用let指令,给寄存器赋值,如

1
:let @a="0iSystem.out.println(^[A);^[" 

注:^[表示Esc

窗口与文件

1
2
3
4
5
6
7
8
9
//打开文件
:e [file]
:open [file]
:find 在当前窗口打开文件

:e //刷新文件

:e xx.out //新建文件
:w xx.out //另存为新文件

窗口分割

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//查看目录并打开文件
Sex Split,水平切割窗口,打开文件
Vex Vertical,垂直切割窗口,打开文件
Tex Tab,在tab中打开文件
Ex Ex,在当前窗口打开文件
Vex! 同Vex,在右边切割窗口,打开文件目录

// 查看目录并打开文件
:sf split中find文件
:vert sf vsplit中find文件

//打开光标出文件,往往用于头文件
C-w f。 在split中打开光标处文件.

//用split方式打开tag
C-w ]

//创建新文件
:new split中打开新文件
:vnew vsplit中打开新文件

//水平/垂直布局切换
C-w JK/HL, 进行split的水平,竖直排列转换

C-w +/-移动窗口高度
C-w -当前窗口最高

C-w </>移动窗口宽度
C-w |当前窗口最宽
C-w = 还原当前窗口等大

C-w o 关闭当前窗口外其他所有窗口
:q 退出当前窗口
C-w q 退出当前窗口

C-w p 切换到前一窗口
C-w t 切换到topleft窗口
C-w b 切换到buttom-right窗口

vim配置

vim的配置文件vimrc的位置可以通过在vim中输入::version查看

参考:

A Good Vimrc

Vim 配置入门

Vim documentation: options

Turn your vim editor into a productivity powerhouse