Gvim命令
三种工作模式
(1)命令模式。(2)输入模式。(3)底行命令模式(ex转义方式)
模式切换
输入模式切换命令模式,必须按esc 键。 命令模式切换到输入模式,用A、a、I、i、O、o键。
删除命令
- x : 删除字符
- dw : 删除词,删除多个词,在dw前加上被乘因子。
- d$ : 删除光标至行尾的所有字符。
- dd : 删除行。
- ndd : 删除当前n行,n是数字。
- dG : 删除前行到最后一行。
保存,退出命令
- :wq! : 保存并退出。
- :w! : 保存
- :q! : 强制退出。
修改命令
- r : 替换光标所在字符
- cl : 修改当前字符
- cc : 修改当前行
- c$ : 修改到行尾的内容。
- %s/abc/123/g : 将文中所有abc都替换为123
- ddp : 上下两行交换
查询命令
- /string : 前往搜索 string
- ?String : 前往搜索 string---
- n : 查找下一个
- N : 查找上一个
- / + 上下箭头 : 搜索历史
- : + 上下箭头 : 命令的历史。
- Shift + * : 往后查找当前的word,前提是光标移动要查找的word
- Shift+# : 往前查找当前的word,前提是光标移动到要查的word
拷贝粘贴命令
- yw : 复制光标所在的单词
- y$ : 复制光标至行尾字符。
- yy : 复制当前行
- nyy : 复制当前 n 行
- Y : 同yy
- p(小写) : 粘贴在光标后
- P(大写) : 粘贴在光标前
文件加密
- :X(大写) Enter key : 输入密码
打开加密文件:
- gvim -x(小写)filename enter key : 输入密码
设置行号
- :set number : 设置行号
- :set nonu : 去除行号
自动添加字符串
- :ab (ab是abbreviate(缩写)的缩写)
例如 :ab usa United States of America
排序
- :%!sort
- :set ic : 不区分大小写
- :set noic
分行显示
- :set wrap : 分行显示
- :set nowrap
- :set wrap? : 查询是否分行
- :set ic? : 查询是否区分大小写
高级命令
- u : 撤销指令。
- Ctrl +r : 重做指令。
- :help : 查看所有帮助。
- Ctrl+v,将选择的小写字母全部替换成大写字母 :U ,反之 :u
- :f : 查看当前文件名。
- :pwd : 查看当前目录。
- :ctrl+d : 查看可选的命令。
- :ctrl+p 或者 :ctrl+n 字符自动补全。(非常好用)
- gf 直接文件跳转 Ctrl+o 回到原来的文件。
- gvimdiff file1 file2 比较两个文件的不同。
多窗口操作
- :sp ctrl+w+s : 横开新窗口
- :vsp ctrl+w+v : 竖开新窗口
- ctrl+w : 切换窗口
- :Explore : 查看父目录内容
- :Explore /path : 查看指定/path目录内容
- :Sexplore : 水平分割窗口中打开文件浏览器
- :Vexplore : 垂直分割窗口中打开文件浏览器
- :Texplore : 新标签页中打开文件浏览器
- :e : 刷新
Visual操作
- 先按v,进入visual模式,选中,d:剪切。Y复制。P粘贴。
- Ctrl+v ,进入竖选模式,shift+i(可以ctrl+y复制插入上一行字符),进入竖选插入,esc见生效。
- Ctrl+v ,进入竖选模式,shift+r,进入竖选替换,esc见生效。
map和nmap映射
有五种映射存在 :
- 用于普通模式: 输入命令时。
- 用于可视模式: 可视区域高亮并输入命令时。
- 用于操作符等待模式: 操作符等待中 ("d","y","c" 等等之后)。 见下: |omap-info|。
- 用于插入模式: 也用于替换模式。
- 用于命令行模式: 输入 ":" 或 "/" 命令时。
下表是map绑定中,对应的模式代号:
<Space> | 普通、可视、选择和操作符等待 |
n | 普通 |
v | 可视和选择 |
s | 选择 |
x | 可视 |
o | 操作符等待 |
! | 插入和命令行 |
i | 插入 |
l | 插入、命令行和 Lang-Arg 模式的 ":lmap" 映射 |
c | 命令行 |
普通模式的映射命令
1、:map
[语法] :map {lhs} {rhs} |mapmode-nvo| *:map*
1.1、作用模式
n、v、o (普通、可视和选择、操作符等待)
1.2、命令格式
:map {lhs} {rhs}
含义: 在:map作用的模式中把键系列 {lhs} 映射为 {rhs},{rhs}可进行映射扫描,也就是可递归映射。
1.3、举例
:map td :tabnew .<cr>
含义:在其作用模式(普通、可视、操作符)下,输入td等价于输入 :tabnew .<cr>。而普通模式下输入:tabnew .<cr>就是打开当前目录。
如果再定义绑定 :map ts td,就是指在其作用模式下输入ts等价于td,也就是打开当前目录。不过如果没有特殊需要,一般不建议递归映射。
2、:noremap
:noremap 和:map命令相对,作用模式和命令格式都相同,只不过不允许再对{rhs}进行映射扫描,也就是{lhs}定义后的映射就是{rhs}的键序列,不会再对{rhs}键序列重新解释扫描。它一般用于重定义一个命令,当然如果:map不需要递归映射的话,建议试用:noremap
2.1、举例
:noremap ts td
含义:在其作用模式下,输入ts就是输入td,但是和:map不同的是,此时td再不会做进一步扫描解释。虽然之前已经定义了td,但是不会对td再做扫描
3、:unmap
3.1、命令格式
:unmap {lhs}
含义:对应取消:map绑定的{lhs},作用模式相同。
3.2、举例
:unmap td
含义:就是取消在其作用模式中td的绑定,比如之前td被绑定为:tabnew .<cr>,此时此绑定消失。
4、:mapclear
含义:对应取消所有:map绑定的,慎用!
5、:nmap
:nmap是:map的普通模式板,也就是说其绑定的键只作用于普通模式。
5.1、举例:
:nmap td :tabnew .<cr> 和 :map td :tabnew .<cr> 在普通模式下等效
6、 :nnoremap
:nnoremap和:nmap的关系和:noremap和:map的关系一样,只是:nmap的非递归版
7、 :nunmap
:nunmap和:nmap的关系和:unmap和:map的关系一样,取消:nmap的绑定。
8、 :nmapclear
:nmapclear是对应取消所有:nmap绑定的,慎用!
规律
前4个是一组,后4个时一组,后一组比前一组多一个n就是指只作用于普通模式。其中每组内*nore*是其对应的非递归 版、*un*是取消绑定某个<lhs>绑定、clear后缀是取消所有绑定。发现了这个规律,再翻到前面的模式代号表,就大体可以猜到 vmap、xmap、smap、omap是什么意思了吧,以及相对应的nore版本、un版本、clear版本。
另外
{rhs} 之前可能显示一个特殊字符:
- * 表示它不可重映射
- & 表示仅脚本的局部映射可以被重映射
- @ 表示缓冲区的局部映射
记不住没关系,可以随时:help map一下
键表 |key-notation|
- <k0> - <k9> 小键盘 0 到 9 *keypad-0* *keypad-9*
- <S-...> Shift+键 *shift* *<S-*
- <C-...> Control+键 *control* *ctrl* *<C-*
- <M-...> Alt+键 或 meta+键 *meta* *alt* *<M-*
- <A-...> 同 <m-...> *<A-*
- <t_xx> termcap 里的 "xx" 入口键
特殊参数
- <buffer>
- <silent>
- <special>
- <script>
- <expr>
- <unique>
它们必须映射命令的后边,在其他任何参数的前面。
<buffer>
如果这些映射命令的第一个参数是<buffer>,映射将只局限于当前缓冲区(也就是你此时正编辑的文件)内。比如:
:map <buffer> ,w /a<CR>
它的意思时在当前缓冲区里定义键绑定,“,w”将在当前缓冲区里查找字符a。同样你可以在其他缓冲区里定义:
:map <buffer> ,w /b<CR>
比如我经常打开多个标签(:tabedit),想要在各自标签里定义",w"键绑定,那么你只要在每个标签页里分别定义就可,其作用域也只在各自的标签里。同样要清除这些缓冲区的键绑定也要加上<buffer>参数,比如:
:unmap <buffer> ,w
:mapclear <buffer>
<silent>
指执行键绑定时不在命令行上回显。比如:
:map <silent> ,w /abcd<CR>
在输入,w查找abcd时,命令行上不会显示/abcd,如果没有<silent>参数就会显示出来
<special>
一般用于定义特殊键怕有副作用的场合。比如:
:map <special> <F12> /Header<CR>
<unique>
一般用于定义新的键映射或者缩写命令的同时检查是否该键已经被映射,如果该映射或者缩写已经存在,则该命令会失败。
<expr>
如果定义新映射的第一个参数是<expr>,那么参数会作为表达式来进行计算,结果使用实际使用的<rhs>,比如:
:inoremap <expr> . InsertDot()
这可以用来检查光标之前的文本并在一定条件下启动全能 (omni) 补全。
#例子:
#在插入模式下,CTRL-L插入顺序的列表编号,并返回;CTRL-R复位列表编号到0,并返回空。
let counter = 0
inoremap <expr> <C-L> ListItem()
inoremap <expr> <C-R> ListReset()
func ListItem()
let g:counter += 1
return g:counter . '. '
endfunc
func ListReset()
let g:counter = 0
return ''
endfunc
<Leader> mapleader
mapleader变量对所有map映射命令起效,它的作用是将参数<leader>替换成mapleader变量的值,比如:
:map <Leader>A oanother line<Esc>
如果mapleader变量没有设置,则用默认的反斜杠代替,因此这个映射等效于:
:map /A oanother line<Esc>
意思时输入/A键时,在下一行输入another line并返回到普通模式。
如果设置了mapleader变量,比如:
let mapleader = ","
那么就等效于:
:map ,A oanother line<Esc>
<LocalLeader> maplocalleader
<LocalLeader>和<Leader>类似,只不过它只作用于缓冲区。
因此在设置mapleader和maplocalleader时最好区分开,不要出现冲突。
NERD tree树形目录插件
插件命令
命令模式(command mode)
- :NERDTree : 打开新的目录树。可以提供一个路径参数,那么命令将打开以该路径作为根目录的目录树。如果没有路径参数提供,那么当前目录将作为新的目录树的根目录。
- :NERDTreeToggle : 如果当前标签已经存在目录树,该命令会重新刷新目录树显示;如果当前标签不存在目录树,该命令作用效果与:NERDTree命令一致。
- :NERDTreeClose : 关闭当前标签的目录树。
为了方便得打开目录树和关闭目录树,我们将 gn 或 F5 绑定快捷键,将其映射到:NERDTreeToggle命令:
" 绑定gn到NERDTreeToggle
map gn :NERDTreeToggle<cr>
" 绑定F5到NERDTreeToggle
nmap <F5> :NERDTreeToggle<cr>
那么每次我们按下 gn 或 F5 都可以方便地开关目录树:
插件快捷键
普通模式(normal mode)
文件节点映射(File node mappings)
- 左键双击 or 回车 or o : 打开指定文件。
- go : 打开指定文件,将光标留在目录树中。
- t : 在新标签中打开文件。
- T : 在新标签中打开文件,保持鼠标焦点留在当前标签。
- 鼠标中键 or i : 在水平分屏窗口中打开指定文件。
- gi : 在水平分屏窗口中打开指定文件,将光标留在目录树中。
- s : 在垂直分屏窗口中打开指定文件。
- gs : 在垂直分屏窗口中打开指定文件,将光标留在目录树中。
目录节点映射(Directory node mappings)
- 左键双击 or 回车 or o : 打开指定目录。
- O : 递归打开指定目录。
- x : 关闭当前节点的父节点。
- X : 递归关闭当前节点的所有子节点。
- 鼠标中键 or e : 浏览指定目录。
书签表映射(Bookmark table mappings)
- 左键双击 or 回车 or o : 打开指定书签。
- t : 在新标签中打开书签。
- T : 在新标签中打开书签,保持鼠标焦点留在当前标签。
- D : 删除指定书签。
树形导航映射(Tree navigation mappings)
- p : 跳转到当前节点的父节点。
- P : 跳转到根节点。
- K : 跳转到当前目录的第一个子节点。
- J : 跳转到当前目录的最后一个子节点。
- Ctrl + K : 跳转到当前节点的上一个兄弟节点。
- Ctrl + J : 跳转到当前节点的下一个兄弟节点。
文件系统映射(Filesystem mappings)
- C : 将当前选择的目录做为树形目录的根节点,即切换当前根目录节点为选择的目录节点。
- u : 将当前视图中的树根节点上移一层目录,即拿当前树根目录的父目录做为新的根目录。
- U : 将当前视图中的树根节点上移一层目录,即拿当前树根目录的父目录做为新的根目录,并且保持原树目录状态不变。
- r : 递归刷新当前目录。
- R : 递归刷新当前节点。
- m : 显示菜单。
- cd : 将CWD切换到当前选择节点的目录。
树形过滤器映射(Tree filtering mappings)
- I : 是否显示隐藏文件开关。
- f : 是否启用文件过滤器开关。
- F : 是否显示文件开关。
- B : 是否显示书签表的开关。
- q : 关闭树形目录树窗口。
- A : 缩放树形目录树窗口。
- ? : 显示帮助文档的开关。
常用配置选项
" 打开鼠标更改窗口宽度功能
set mouse=a
参考
https://www.cnblogs.com/heartchord/p/4872416.html