工欲善其事必先利其器之vim-Mapping
Attention
vim的配置和插件请参照:
MyVimKey
vimtutor
vimtutor 是在安装vim的时候自动安装的vim官方帮助文档
1 | # shell下执行 |
模式切换键
Normal Model
- d : [delete]删除
- D : 删除至行尾
- dd : 删除当前行,前面加数字则可以删除多行
- dw : 删除光标所在位置直到空白符
- dt) : 删除当前括号内容
- c : [change]修改
- C : 修改至行尾
- cc : 修改当前行
- cw : 修改当前单词
- x、dl : 删除当前字符
- y : [yank]复制
- yy、Y : 复制当前行
- p : [put]粘贴
- xp : 交换两个相邻的字符
- ddp :交换两个相邻的行
- u : 撤销
- Ctrl+r : 反撤销
- . : 重复上一个命令
- >> : 缩进当前行
- << : 反缩进当前行
- >G : 从当前行到文末缩进
- gg>G : 全文缩进
- :10,100] : 10到100行缩进
- gd : goto definitionh
- gi : 回到上次编辑的地方
- ZZ : 保存并退出
Insert Model
- o : [open a line below]光标下一行插入
- O : [open a line above]光标上一行插入
- a : [append]光标后插入
- A : [append after line]行尾插入
- i : [insert]在当前光标后进行插入
- I : [insert before line]在当前行的行首进行插入
- [C-h] : 删除前一个字符,该命令也可在Linux终端下生效
- [C-w] : 删除前一个单词,该命令也可在Linux终端下生效
- [C-u] : 删除当前行,该命令也可在Linux终端下生效
- [C-[ ] : 同[Esc]
- jj : 同[Esc]
Visual Model
- v : 进入可视模式
- V : 进入行可视模式
- Ctrl+v :进入块可视模式
- vw : 单词选择模式
- U : 转换成大写
- u : 转换成小写
Lock Model
- [C-s] or [C-S] : Lock
- [C-q] or [C-Q] : UnLock
方向部分
方向键
k
h l
j
快速方向键(每按一次前进5单位)
K
H L
J
跳转部分
词间跳转
- b : 跳转到上一个词的首字母
- w : 跳转到下一个词的首字母
- e : 跳转到单词的末尾
- 注意 : 上述命令可以组合使用,如we表示跳转到下一个单词尾部
行内跳转
- 0 : 跳转到行首
- - : (原为** $** )跳转到行尾
行间跳转
- ngg 、nG 、 :n :跳转到第n行
句间跳转
- ( : 跳转到上一个句子
- ) : 跳转到下一个句子
段内跳转
- { : 跳转到段首
- } : 跳转到段尾
全文跳转
- gg : 跳转到文首
- G : 跳转到文末
- zz : 将当前行置于屏幕中间
- [C-f] : 向后翻屏
- [C-u] : 向后翻屏
- # : 读取当前字符,并移动到本屏幕内上一次出现的地方
- * : 读取当前字符,并移动到本屏幕内下一次出现的地方
- `. :跳转到上次编辑的地方
- [C-o] : 跳转到光标上次指示的地方
- g, : 用于遍历之前修改的地方
- g; : 用于反向遍历之前修改的地方
括号匹配
- % : 移动到匹配的括号
文件部分
文档操作
- S : (原为:w)保存文件
- Q : (原为:q)退出当前窗口
- :e! : 不保存文件,重新打开
- :e filename : 打开新文件
- Ctrl+^ : 进行文件切换
- [LEADER]wd : 删除当前文件
多文件操作
Buffer-文件的缓存
- :ls : 列举出当前的文件buffer
- :b n : 跳转到第n个buffer
- :bprevious: 跳转到前一个buffer
- :bnext : 跳转到后一个buffer
- :bfirst : 跳转到第一个buffer
- :blast : 跳转到最后一个buffer
- :b buffer_name : 跳转到指定的buffer
Window-可视化的分割区域
新建窗口
- vs : (原为** :set splitright[CR]:vsplit **)在右侧新增窗口,并将光标跳转到右窗口
- vsn : (原为** :set nosplitright[CR]:vsplit **)在右侧新增窗口,并将光标停留在左窗口
- spm : (原为** :set splitbelow[CR]:split **)在下侧新增窗口,并将光标跳转到下窗口
- spn : (原为** :set nosplitbelow[CR]:split **)在下侧新增窗口,并将光标停留在上窗口
窗口间的跳转
- [LEADER] 方向键 : (原为** [C-W]方向键 **) 跳转光标到某窗口
更改窗口大小
- Ctrl+方向键 : (原为** :resize +5 :resize -5 :vertcal resize +5 :vertical resize -5 **) 改变窗口大小
针对窗口的其他操作
- :only :
- :close :
Table-标签
- :tabnew filename : 在新标签中打开制定的文件
- :tabnext : 切换到下一个标签
- 说明 : 在支持gui的终端,可以使用鼠标点击相应的tab来操作。点击空白区可以进行创建空tab
vim 寄存器
说明
- vim默认操作的是寄存器而不是系统剪贴板
- 默认我们使用d删除或者y复制时操作的都是无名寄存器
操作命令
- 查看寄存器
- :reg : 查看所有寄存器
- :reg name : 查看指定名称的寄存器
- 操作制定的寄存器
- 默认操作的是无名寄存器
- “1 : 操作寄存器1,
- “1yy : 复制当前行到寄存器1
- 粘贴到系统粘贴板
- “+
- 说明 : 这样的操作需要自己的vim有
clipboard
- 查看自己是否有clipboard: 在终端执行
vim --version | grep clipboard
- 如果没有,这样安装(以ubuntu为例):
sudo apt-get install vim vim-scripts vim-gtk vim-gnome
- 查看自己是否有clipboard: 在终端执行
- 如果嫌麻烦,可以直接将系统剪贴板映射到无名寄存器
- 将 set clipboard=unnamed 加入到你的
.vimrc
文件中,就可以直接操作系统剪贴板了。
- 将 set clipboard=unnamed 加入到你的
vim macro - 宏
说明
- 宏-宏可以看成时一系列命令的集合
- 我们可以使用宏“录制”一系列操作,然后用于“回放”
- 宏可以很方便的把一系列命令应用到多行文本上
使用
录制
- q : 录制
- 使用**q{register}选择要保存的寄存器,把录制的命令保存其中
- 注:register可以选择1-9或a-z
回放
- 选中要执行的位置
- @{register}
- 注:register可以选择1-9或a-z
查找替换
查找
- :/ :全文查找,n/N 在查找结果中跳转
- # 、g# : 光标向后查找关键字 加g表示不完全搜索,如搜索foo,结果显示footable
- * 、g* : 光标向前查找关键字 加g表示不完全搜索,如搜索foo,结果显示footable
- f : 行内向后查找某字符,可以使用,、;来进行前一个、后一个查找
- F : 行内向前查找某字符,可以使用,、;来进行前一个、后一个查找
- t : 行内向后查找某字符,并停留到该字符的前一位,可以使用,、;来进行前一个、后一个查找
- T : 行内向前查找某字符,并停留到该字符的后一位,可以使用,、;来进行前一个、后一个查找
- g, : 用于遍历之前修改的地方
- g; : 用于反向遍历之前修改的地方
替换
- :s/s1/s2 : 将下一个s1替换为s2 :[range]s[ubstitute]/{pattern}/{string}/[flags]
- :%s/s1/s2 : 将所有的s1替换为s2
- :s/s1/s2/g : 在当前行内s1替换为s2
- :n1,n2 s/s1/s2 : n1到n2行的s1替换为s2
- :s/s1/s2 : 降下一个s1替换为s2
- :1,6 s/word//n : 统计1-6行有多少个word
补全
- [C-n] : 普通关键字
- [C-x][C-n] : 当前缓冲区关键字
- [C-x][C-i] : 包含文件关键字
- [C-x][C-j] : 标签文件关键字
- [C-x][C-k] : 字典查找
- [C-x][C-l] : 整行补全
- [C-x][C-f] : 文件名补全
- [C-x][C-o] : 全能(Omni)补全
- 说明 : 在补全提示列表中可以使用[C-n]、[C-p]进行上下选择
标签操作
- ma : 在所在行添加a标签,再次执行会删除
- `a : 跳转到a标签所在行
一些小技巧
- [LEADER]sh : (原为** :terminal **) 在vim中打开终端
- [LEADER]rc : (原为** :edit ~/.vimrc **)快速打开
.vimrc
配置文件 - [LEADER][CR] : 消除搜索结果等中的亮块
- [LEADER]fd : 找到文中两个连续的单词或字符
- [LEADER]sp : 开启、关闭拼写检查,光标停留在提示拼写错误的词下面按
z=
会出现建议 - [C-x]s :在插入模式下可以提供拼写建议,必须打开拼写检查
[LEADER]sp
- [C-o]、[C-h](原为[C-i]) : 在两次编辑的地方间跳转(可以跨文件,也可以打开上次编辑的文件处)
- [LEADER]n : 快速在锚点间切换,锚点为
<++>
- 当编辑完文件后发现没有保存权限!
- hh,别着急。还是有办法的。
:w !sudo tee %
- w!! : 等同于上面的命令
- 对每行进行操作
- 按
[C-v]
进入V-Block
- 选中块
normal 指令 内容
如normal A [+++]
就会在每行的末尾加上[+++]
- 按
- 怎么运行bash中的指令
: !指令
- 从文件流获取数据然后插入到文档中
:r
- 如
:r !figlet Vim
会输入一个Vim的图形
- 将当前文件生成html
:%TOhtml
- [LEADER]gy : 进入focus model
- [C-x-k] : 在字典文件中补全单词
- :%s/./&/g : 统计字数
- 粘贴代码的时候遇到缩进混乱的情况怎么解决
- 执行:set paste再进行粘贴就可以解决粘贴缩进混乱的情况,但是这行命令也会导致输入缩进失效。所以粘贴完后执行:set nopaste
- vim+tmux
- figlet
[[###]] 插件相关
startify
- [LEADER]am : 打开startify,默认打开vim时会显示
文件相关
文件历史修改-undotree
- [LEADER]al : 打开/关闭文件修改历史
目录树 nerdtree
- ff : 打开/关闭目录树
- r : 刷新目录树(需在tree下执行)
- I : 打开/关闭显示隐藏文件
- [LEADER]v : 在目录树中查找当前文件
文件搜索 ctrlp
- [C-p] : 开始搜索文件
模糊搜索 fzf
- :Files [Path]
- :Ag [Pattern]
搜索与替换
- :Far foo bar */.py
- :Fardo
快速搜索定位 easymotion
- s
- t
标签列表 tagbar
- F : 打开/关闭标签列表
代码相关
代码检测 ale
- [LEADER]s : 关闭/打开代码检查
代码补全 YouCompleteMe
- 需要额外安装,参见项目主页
- gd : Goto Definition
- g/ : Get Doc
- gt : Get Type
- gr : Goto References
单词高亮显示 interestingword
- [LEADER]k : 对该单词高亮,多个不同单词时,会高亮不同的颜色
- n : 跳到下一个
- N : 跳到上一个
- [LEADER]K : 清楚所有高亮
代码执行
- r : 运行代码
代码快速注释
- [LEADER]cc : 注释当前行
- [LEADER]ci : 取消注释当前行,再次执行注释
- 说明:需要注释块时,先用vision模式选择块
代码格式化 autoformat
- 需要安装对应的语言支持
- [LEADER]af : 格式化
- 保存退出时会自动格式化
Git相关
vim-fugitive
- :Git : 同git操作
- :Gdiffsplit : 列出文件的修改
- :Gblame : 列出每行的作者
vim-gitgutter
- 显示当前文件的更改行
gv.vim
- :GV : 调起提交历史
多光标操作 vim-multiple-cursor
- [C-n] : 开始查找当前光标所指的词
- [A-n] : 选择整词查找
- g[C-n] :
- g[A-n] :
- [C-n] : 选择下一个词
- [C-p] : 取消选择当前光标所指的词
- [C-x] : 跳过下一个
- [Esc] : 退出
- 说明 : 选择好修改内容后,就相当于Vision Model ,执行
c/a/x
或C/A/X
进行整体快捷修改
成对编辑 vim-surround
- cs”‘ : [change surround]将单词的”改为’,同理也可以操作’’ “” {} () [] 等
- cs’” : 将单词的’改为”,同理也可以操作’’ “” {} () [] 等
- ds’ : [delete surround]删除单词的’,同理也可以操作’’ “” {} () [] 等
- ds” : 删除单词的”,同理也可以操作’’ “” {} () [] 等
- ysiw” : [you add a surround]给光标所在的单词添加”” ,同理也可以添加’’ “” {} () [] 等
工具插件
vimwiki
- [LEADER]ww : 打开vimwiki首页
- [LEADER]wi : 打开vimwiki-diary首页
- :vimwiki : Tab补全查看其他vimwiki命令
- :VimwikiAll2HTML : 把所有 wiki 文件转换成 HTML 网页
- :help vimwiki-commands : 显示全部命令: Tab补全查看其他vimwiki命令
- [LEADER]w[LEADER]w : 条件今天的日志
- [LEADER]w[LEADER]i : 创建diary索引
calendar
- [LEADER]ac : 打开日历
- [LEADER]acc : 打开日历时钟模式
- [LEADER]acy : 打开日历年模式
- [LEADER]acm : 打开日历月模式
- [LEADER]acw : 打开日历周模式
- <、> : 在日历中前进后退
- T : 进入TASK
- i c a : 进行修改
- D : 标记为完成
- L : 清除完成的任务
- E : 进入EVENT
- ? : 进入帮助文档
一些常用的命令
单词字典
- [C-x-k] : 查询单词建议
- 说明:将单词字典放置在某文件,然后进行引用到vimrc文件
“引入字典补全文件
setlocal dictionary+=~/.vim/sourcefile/dict
拼写相关
- set spelllang=zh : 将拼写检查的语言设置为中文
- set spelllang=en,zh : 将拼写检查的语言设置为英文和中文
缩写相关
- :iabbrev myAddr 32 Lincoln Road, Birminham B27 6PA, United Kingdom : 当输入myAddr[Space] 时会自动补全
- 说明:可以将缩写写到一个文件中然后进行引用
“引入缩写文件
source $HOME/.vim/sourcefile/iabbr.vim
- 还可以利用缩写完成代码段的操作
Test
I am "Swyoung" . Do you like vim .
Hi Swyoung .
I like vim .
'hi'
"sw"