一.Vim的移动
粗体为常用
- 基础移动
- h左 k 上 j下 l 右 前面可加数字
- 单词移动
- w: 移动到下一个单词开头
- e: 移动到下一个单词结尾
- b: 移动到上一个单词开头
- 前面可加数字
- 整行移动
- 数字0: 移动到行首
- $: 移动到行末
- +: 移动到下一行开头
- -: 移动到上一行开头
- ^: 移动到行首非空位置
- n|: 移动到第n列
- 滚屏
- C-f: 往前滚一屏幕
- C-b: 往后滚一屏幕
- C-d: 往前滚半屏幕
- C-u: 往后滚半屏幕
- C-e: 往后滚一行
- C-y: 往前滚一行
- 调整光标位置
- z+enter: 顶端
- z.: 中间
- z-: 底端
- 970z将970移到屏幕中间
- 屏幕中移动
- H: 移动到屏幕顶端的行
- M: 移动到屏幕中央的行
- L: 移动到屏幕低端的行
- nH: 屏幕顶端往下第n行
- nL: 屏幕底端往上第n
- 根据文本快移动
- (: 移动到当前句子开头
- ): 移动到当前句子末尾
- {:移动到当前这一段的开头
- }:移动到当前这一段的末尾
- [[:移动到当前这一节的开头
- ]]:移动到当前下一节的开头
- 根据行号来移动
- nG: 跳到第几行
- G : 文件末尾
- gg: 文件开头
二.插入
- 字符位置插入
- i : 当前字符前插入
- a : 当前字符后插入
- 行位置插入
- A : 当前行行首插入
- I : 当前行行末插入
- o : 当前行下一行插入
- O : 当前行上一行插入
- tips:10i* <Esc> 行输入10个*
- :10o* <Esc> 列输入10个*
- :c-v选定行I输入ESC
- 合并行
- J
三.删除(读作删除其实是剪切)
- 字符删除
- x: 删除光标所在字符删除
- X: 删除光标所在字符前删除
- 单词删除
- dw: 删除到下一个单词开头
- de: 删除到本单词末尾
- dE: 删除到本单词末尾包括标点
- db: 删除到前一个单词
- dB: 删除到前一个单词包括标点
- 行删除
- dd: 删除一整行
- d$: 删除光标位置到本行结尾
- d0: 删除光标位置到本行行首
四.修改
- 字符替换
- r: 单个字符替换
- R: 连续替换
- ~: 更改大小写
- 单词修改
- cw: 从光标处改到单词尾
- cb: 从光标处改到单词头
- 行修改
- c$ 或是 C: 从光标处修改到本行末尾
- c0: 从光标处修改到单词头
- cc 或是 S: 删除整行从头修改
- s: 删除光标所在位置,然后插入
五.复制
粘帖
- p: 粘帖
单词和字符复制
- ynl: 向右复制n个字符
- ynh: 向左复制n个字符
- ynw: 向前复制n个单词
- ynb: 向后复制n个单词
- 行复制
- y0: 复制到行首
- y$: 复制到行末
- yy: 复制整行
- yH: 从当前行复制到屏幕顶端
- yL: 从当前行复制到屏幕低端
六.恢复
- 撤销与恢复
- u:撤销
- U: 撤销本行操作
- c-r: 重做
- .: 重复做上衣动作
- e!: 全文回复
七.ex命令
- 保存命令补遗
:n r file
将file文件的内容加到当前文件n行号:=
打印总行号/pattern/
匹配到的第一个Pattern的位置,可替代行号使用:[range]ya a
pu a
拷贝到a储存器,将a放到新的文件中
- 范围及其操作
:n,m
:n-m行:.
:当前行:$
:最后一行:%
:所有行+/-n
:前/后n行+m,-n
前m后n行[range] d\y
: 剪切 复制[range] mv\co\t target
:n pu
把剪切板中的内容粘贴到第n行下面
- 多文件切换
:e file
编辑file文件:p
:n
:last
:前一个文件,下一个文件,最后一个文件%
指代文件名#
前一个文件:split
:vsplit
切分打开文件
- 搜索
- fx Fx: 单行移动到前一个/后一个字符x的位置
/pattern
: 向后匹配第一个pattern位置,无pattern重复上一次?pattern
: 向前同上- n\N: 向同一/逆方向继续匹配
- *\#: 同上不过只匹配整个单词
- 组合Ex命令
- |线:分割符
- 全局搜索
- g/pattern/p\nu: 显示所有包含pattern的行nu表示打印行号
- g 和 s 指令例子
:g/^/m 0
:匹配所有行扔到第一行(倒序文件):g/^/+1 d
g/^/d|m.
:删除偶数行,奇数行:%s/.*/&\r&/
s/\(.*\)/\1\r\1/
:double所有行:g/^/t.
: 同上:%s/__.*\(__\)\@!/\ /g
: @!不含前面一项的行:%s/\n\n\@!/\ /g
g/./,/^$/j
: 删去单回车:v/%s/s/:/\ /g
: g和s联合使用:g/ccc/if getline ('.') !~'ddd' | s/aaa/bbb/g
:g/#ifdef WIN32/+1,/#else|#endif/-1 t $
:提取WIN32平台下代码到文件末尾
八.插件指令及其使用
- vim-css-color: css中输入颜色和rgb会显示颜色
- a.vim: 头文件跳转
- :A,AS,AV,AT,AN:各种角度跳到头文件
- :IH,IHS,IHV,IHT,IHN:各种角度跳到选定文件
- minibufexpl.vim: 文件切换条
- enter:打开一个文件 d:关闭一个
:bn
:bp
:打开上一个/下一个:bnum
:打开第几个标签
- nerdtree(tabs): 浏览文件
- o:打开文件 t:在新TAB打开 i,s:横切数切
- I:显示隐藏 m:打开nerdmenu R:刷新
- nerdcommenter:多行注释
- \cc/cn: 多行注释
- \cu: 多行去掉注释
- \cs: 前面有*的注释
- multiple-cursors:多行修改
- c-n:多项选定修改 i进入修改mod
- ctrlp: c-p 模糊搜索当前文件并打开
- easy_motion: s+2字符快速搜索
- vimproc vimshell:
:VimShell
打开vimshell - 补全:
- youcompleteme
- neocomplcache.vim
- vim-snippet neosnippet neosnippet-snippets ultisnips
- 整体语法美化:
- vim-indent-guides:语法对齐 \ig开启
- vim-better-whitespace:无效空格提醒
- syntastic: 错误提醒
- tagbar: ctags
- 语言语法:
- haskel:vim-hdevtools, ghcmod-vim, necos-ghc, hlint
- clojure:vim-clojure-staticm, vim-fireplace
- go: vim-go
- jade:vim-jade
- closure template: vim-soy
- coffeescript: vim-coffee-script
- swift.vim: swift
- commonlisp: vim-slime slimv
- laTeX: vimtex
- cjsx: vim-cjsk
- rails: vim-rails
- qucik-scope: f命令(行内搜索)高亮
- 主题美化相关:vim-colors-solarized,vim-airline, vim-hybird, molokai
- 其他
- vim-fugitive: 显示git信息
九.附录
- 匹配符
- .: 匹配任何除换行符外的单个字符
- \s: 匹配一个空白符(space或tab)
- \S: 一个非空白符
- ^: 仅匹配行首,也即必须以模式开头
- $: 仅匹配行尾,也即必须以模式结尾
- \<: 匹配词首,单词定义为一连串的字母,标点空白和数字均视为分隔符
- >: 匹配词尾。
- \<…>: 匹配整个单词(前面命令中的*和#就是用这个来只匹配单词)。当然\<和>不必一起使用,可以分开使用
- 限量符
- *: 前一个字符出现0次或多次,如a*,可以匹配”, ‘a’, ‘aa’或’aaa’等
- +: 前一个字符出现1次或多次
- \=: 前一个字符出现0次或1次
- {n,m}: 前一个字符出现n到m,如a\{3,5},则可以匹配’aaa’, ‘aaaa’或’aaaaa’
- {n}: 前一个字符出现n次
- {n,}: 前一个字符出现n次到最多次数(32000)
- {}: 0次或多次,与*一致
- 操作符
- |:或操作符
- 其他匹配符
- […]: [a-zA-Z]
- …:
- \n: