1、配置快捷键
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
1.四种模式:normal,insert,visual,command 2.映射 map:imap,nmap,vmap,cmap noremap:inoremap,nnoremap,vnoremap,cnoremap 3.Visual Studio 快捷键 0.VsVim配置 Optins->VsVim-> Defaults:Use Editor Command Margin->False (否则,有命令框) Keyboard:set your Keyboard ->include All Scopes 1.VsVimrc路径 home下,_vsvimrc 2.Vs命令查看方式: 英语环境 Tools->Options->Environment->Keyboard View->OtherWindow->Command Window 3.在vim中调用快捷命令 :vsc VAssistX.OpenFileInSolutionDialog |
2、vim的常用命令
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
1.normal模式下 1.移动 .基本移动 hjkl j:下 k:上 h:左 l:右 .单词移动 w:word "跳转到单词的头" W: WORD e:word's end "跳转到单词的结尾" E: WORD 's end ge:word's end "跳转到上一个单词的结尾" gE: WORD 's end b:back "跳转到单词的头" B:back "跳转到WORD的头" .行移动 _: 跳转到行的第一个字符 0: 跳转到行首 $: 跳转到行的最后一个字符 .缩进行 >> :向右缩进 < visual v-> normal 字符可视模式 v ->normal or 块模式下插入: c-V:进入块模式,并选择好区域 I 在所选区域前,进入块插入模式(插入的内容会在所有列都插入) A 在所选区域后,进入块插入模式(插入的内容会在所有列都插入) c 删除所选区域内容,并进入块插入模式(插入的内容会在所有列都插入) C 删除所选区域以及所选区域后的所有内容,并且进入块插入模式(插入的内容会在所有列都插入) 退出到normal模式 c-g:切换可视模式和选择模式 可用命令: 移动:hjkl 查找:f{ char } ; , n/N 删除:c C d x s 其他命令: o: 切换选中区域的首和尾 U: 选中的字符全部大写 u: 选中的字符全部小写 ~:选中的字符切换大小写 组合命令: ve/vw/viw:选中一个单词 vu:光标下的字符小写 vU:光标下的字符大写 veu/U:选中一个单词小写/大写 4.command模式 在normal模式或者visual模式下输入冒号:,进入命令模式 normal模式下的命令,可以在命令模式下运行 command下也可以运行ex命令 :com[mand] 列出所有用户自定义的命令 基本命令: :w[a] [全部]写入(保存) :q[a] [全部]退出 :c[a] [全部]关闭buffer :x[a] [全部]和:wq类型,当文件有修改时候,会写入 :[range]copy/co/t {address} 将范围内的行复制到目标地址处 {address}使用符号 :[range]move {address} 将范围内的行移动到目标地址处 :normal 命令,在命令行中执行normal模式下的命令 如果是visual模式,会呈现 :'normal 会在每一行都执行命令 5.命令范围 .command模式下 vim中,在单个文件中, 1.以行号为地址 2.此外,还有一些特殊符号表示地址,例如: % 整个文件(:1,$的简写形式) . 光标所在位置。当前位置 1 文件第一行 $ 文件最后一行 0 虚拟行,位于文件第一行上方 'm 包含标记m的行 ' 高亮选区的结束行 范围的表示用逗号隔开,例如 add1,add2 :12,15d 表示删除12行到15行内容 :[range]d[elete] [x] {count} "x到代表寄存器x里" .normal模式下 normal中的一些命令,可以指定运行次数,例如: 2dd 运行两次dd->删除两行 2yy 运行两个yy->复制两行 |
3、mark和跳转
1
2
3
4
5
6
7
|
mx:添加本文件 "书签" x mX:添加全局 "书签" X `x:跳转到书签x所在的行和列 'x:跳转到书签x所在行 ``:跳转到本文件上次离开的位置 gi:跳转到上一次插入的位置 gv:跳转到上一次进入visual的位置 |
4、VsVim的配置
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
|
1.重要配置 set backspace=indent,eol,start "退格键设置" set clipboard=unnamed "默认的剪切寄存器" set ignorecase "忽略大小写" 2.推荐配置 1.注释 :vnoremap ci :s/^/\/\/ :vnoremap cu :s/\/\ // :nnoremap ci :s/^/\/\/ :nnoremap cu :s/\/\ // 2.相关配置 .单个文件中: :inoremap jj "退出插入模式" :noremap gd zz "跳转到定义" :nnoremap gq == "代码格式format" :vnoremap gq == :nnoremap za "折叠" :nnoremap zm :vsc VAssistX.ListMethodsInCurrentFile "函数列表" :nnoremap cj :vsc VAssistX.FindReferencesinFile "当前文件中的引用" :nnoremap ca :vsc VAssistX.FindReferences "查看所有引用" :nnoremap cm :vsc File.OpenContainingFolder "打开所在文件夹" :nnoremap zj :vsc Edit.QuickInfo "查看函数定义文档" :nnoremap zp :vsc VAssistX.RefactorImplementInterface "实现接口" "visual模式中的查找" :vnoremap * "/y // :vnoremap # "/y?/ .多文件 :nnoremap :vsc View.NavigateBackward :nnoremap :vsc View.NavigateForward "打开查看类的对话框 :nnoremap cs :vsc VAssistX.FindSymbolDialog "打开查看文件的对话框 :nnoremap cf :vsc VAssistX.OpenFileInSolutionDialog "open VAOutline :nnoremap co :vsc VAssistX.VAOutline "打开解决方案资源管理器 :nnoremap cv :vsc View.SolutionExplorer "在文件中查找 :nnoremap ck :vsc Edit.FindinFiles "end 3.配置文件 source filefullPath "读取filefullPath的配置内容,并运行" |
5、寄存器介绍和使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
vim提供了几十组寄存器,用于保存文本 为命令添加 "{ register } 表示指定要使用的寄存器。若不指定,将缺省用unnamed无名寄存器 "x 表示引用了寄存器x "" unnamed 无名寄存器,如果没有指定要使用的寄存器,vim会缺省使用此寄存器 "_ 黑洞寄存器(实际上并没有存储,如果" _d{motion}会执行真正的删除) "0 复制专用寄存器 (复制的时候,不仅会把内容拷贝到无名寄存器中,还会拷贝到此寄存器) "a-" z a-z寄存器(26个英文字母都是寄存器的名字) "+ 系统剪贴板寄存器 (使用" +p来粘贴系统剪贴板的内容)(X11剪切板,用剪切、复制与粘贴命令操作) "* 选择专用寄存器 (X11主剪切板,用鼠标中断操作) "= 表达式寄存器.在插入模式下c-r= ,会进入命令行模式,输入表达式回车之后的结果将插入文本中 "% 存储了当前文件名 "# 存储了轮换文件名 ". 存储了上次插入的文本 ": 存储了上次执行的Ex命令 "/ 存储了上次查找的模式 使用示例: "fyy 将复制的内容存储到f寄存器 "fp 将f寄存器中的内容粘贴出来 :reg[ister] "{ register } 查看{ register }中的内容 |
6、宏
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
|
把命令序列录制成宏 在normal,q键开始/停止录制宏。 开始录制: q{ register } 表示指定将宏录制到哪个寄存器中 停止录制: 再次按q,停止录制 @{ register } 表示执行寄存器中的命令 @@ 重复最近调用过的宏 [count]@{ register } 执行count次宏 串行方式 :reg { register } 查看寄存器中的内容 追加: qa 录制按键操作,并覆盖a寄存器中原有内容 qA 录制按键操作,并追加到a寄存器中 在插入模式中,插入寄存器中的内容: c-r{ register } 将寄存器中的内容插入到文本中 .多次执行宏: 串行和并行。在处理错误的方式中,串行遇到错误,就返回。 1.串行 [count]@{ register } 2.并行 :'normal @{ register } .迭代求值的方式给列编号 使用了表达式寄存器(=),以便插入的时候,可以进行运算 (不要试图控制每次执行多少遍宏(vim 函数)) let i=0 qa 0f[ls=ij :let i+=1 q .编辑宏 宏中使用的是键盘编码, 如果使用{ register }的方式获取的寄存器内容不一样。 不过,可以使用将寄存器中的内容粘贴出来的方式。 1.输出到文本中编辑 "{ register }p 会粘贴到光标后,所以,用:put 输出到下一行 :put { register } 将寄存器内容输入到文本中 编辑完成之后, "{ register }dd 注意,Windows下,可能会将末尾的^M也粘贴进去。可以使用选中->删除到寄存器中 将文本内容删除并读取到寄存器中 2.使用函数 :let @{ register }=...... |
7、替换
1
|
:[range]s/{original}/{ new }/[g] g表示全部替换,否则只替换第一个遇到的 |
8、小技巧
1
2
3
4
5
6
7
|
1. ctrl+h 删除前一个字符,相当于退格键 ctrl+w 删除前一个单词 ctrl+u 删除至行首 2. num :第一个遇到的数字加num num :第一个遇到的数字减num |
tips:
1
|
:help [ index帮助文档中,所有命令 |