1. 配置快捷键
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.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: 跳转到行首
$: 跳转到行的最后一个字符
.缩进行
>> :向右缩进
<< :向左缩进
.段落移动:
{: 向上移动一个段落
}: 向下移动一个段落
[[:
]]:
{[:
}]:
.屏幕移动
gg: 跳转到文件首部
G: 跳转到文件结尾
12gg: 跳转到第12行
zz: 当前光标移动到屏幕最中央
zt: 当前光标移动到屏幕最上方(top)
zb: 当前光标移动到屏幕最下方(bottom)
c-f: 下翻半页
c-u: 上翻半页
2.进入插入模式
i: 插入到光标前
I: 插入到行的最前面
a: 插入到光标后
A: 插入到行的最后面
s:删除光标下的字符,并进入插入模式
S:删除当前行所有字符,并进入插入模式
ce/cw: 删除当前光标到word末尾处的字符,进入插入模式
C:删除当前光标后的所有字符,并进入插入模式
o:插入到下一行
O:插入到上一行
3.撤销和reDo
u: 撤销
c-r: redo
4.替换
r: 用输入替换光标下的字符
R:进入替换模式
5.查找:
.单行
f{char}: 从当前光标向后查找char。
F{char}: 从当前光标向前查找char
t{char}: 从当前光标向后查找char,光标落到char之前
T{char}: 从当前光标向前查找char,光标落到char之后
; :下一个char
, :上一个char
.整个文件中查找
/ : 从当前行向下查找
? : 从当前行向上查找
* : 从当前向下,查找当前光标下的word
# : 从当前向上,查找当前光标下的word
n : 下一个查找结果
N : 上一个查找结果
6.删除
x:剪切当前光标下的字符
X:剪切当前光标前的一个字符
d{motion}:删除
dl: 删除当前光标下的一个字符
de/dw: 删除当前光标下到word end的字符
db: 删除当前光标下,到word head的字符
D: 删除当前光标下到行尾的字符
7.复制
y{motion}:复制
yl: 复制当前光标下的一个字符
yy/Y:复制当前行
ye/yw: 复制当前光标到word end的字符
yb:复制当前光标前一字符到word head的字符
8.粘贴
p:粘贴到当前光标后
P:粘贴到当前光标前
9.点范式(.)
. :重复上次的修改(移动,删除,增加)
10.组合命令
yyp:复制当前行到下一行
ddp:和下一行交换(删除当前行,复制到下一行)
xp:交换两个chr的位置
yi(:复制括号()中的内容 yi{ yi[ yi" yi'
di(:删除括号()中的内容 di{ di[ di" di'
%:跳转匹配的{}、()、[]
11.修改文本
J:将光标所在的下一行和本行连接,并且中间隔一个空格
gJ:将光标所在的下一行和本行连接(下一行的空格也连接)
2.insert模式下
c-o:暂时进入normal模式。一次命令后,回到插入模式。
3.visual模式(visual(可视行,可视块))),select(选择))
normal模式进入可视模式:
v:字符可视模式
V:行visual
c-v:块visual
退出可视模式:
行/块visual v-> 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和跳转
mx:添加本文件"书签"x
mX:添加全局"书签"X
`x:跳转到书签x所在的行和列
'x:跳转到书签x所在行
``:跳转到本文件上次离开的位置
gi:跳转到上一次插入的位置
gv:跳转到上一次进入visual的位置
4.VsVim的配置
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.寄存器介绍和使用
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.宏
把命令序列录制成宏
在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.替换
:[range]s/{original}/{new}/[g] g表示全部替换,否则只替换第一个遇到的
8.小技巧
1.
ctrl+h 删除前一个字符,相当于退格键
ctrl+w 删除前一个单词
ctrl+u 删除至行首
2.
num :第一个遇到的数字加num
num :第一个遇到的数字减num
tips:
:help [ index帮助文档中,所有命令