Vim是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被普遍使用,和Emacs(夸张的说法是假装成编辑器的操做系统)并列成为类Unix系统用户最喜欢的文本编辑器。Bram Moolenaar 从一个开源的vi开发了1.0的Vim,而且在1992 年 1.22 版本的 Vim 被移植到了 UNIX 和MS-DOS上。自vim发布有不少程序员使用,到2010年vim发布7.3版本,目前最新的一个版本。php
Mac下能够直接使用brew安装:linux
brew install macvim
其余系统下的安装可查看官方网站http://www.vim.org/download.p...git
当咱们经过vim 文件或文件夹
进入编辑器时,默认的就是普通模式,或者叫作命令模式,在这种模式下,键盘上的大部分输入会被认做是快捷键。普通模式也是vim使用中最多使用的模式,能很大的提升编辑效率。
命令解释中的参数:程序员
CHAR 任何非空白字符
WORD 非空白字符的序列 (字串)
N 命令前输入的数值
{motion} 光标移动命令
Nmove {motion} 移动通过的文本
github
当进入普通模式时左下角显示--INSERT--,下面介绍一些经常使用的快捷键:正则表达式
基本的模式转换快捷键,对于进入编辑模式,下面还有其余快捷键在完成后也会进入编辑模式。
普通模式进入编辑模式shell
i 在当前位置生前插入N次 I 在当前行首插入N次 a 在当前位置后插入N次 A 在当前行尾插入N次 o 在当前行以后插入一行N次 O 在当前行以前插入一行N次
普通模式进入可视化模式编程
v 开始面向字符的可视 (Visual) 模式 V 进入面向行的可视 (Visual) 模式 CTRL+v 进入面向列的可视 (Visual) 模式
经过快捷键咱们能够完成光标的快速移动.vim
h 光标左移 N 个字符 l 光标右移 N 个字符,这个命令不多用,通常用w代替。 k 光标上移 N 行 j 光标下移 N 行 w 光标向前移动 N 个 WORD,停留在该 WORD 的第一个字符,当到达该行行尾时,会自动换行。 e 光标向前移动 N 个 WORD,停留在该 WORD 的最后一个字符,当到达该行行尾时,会自动换行。 b 光标向后移动 N 个 WORD,停留在该 WORD 的第一个字符,当到达该行行首时,会自动换行。 W,E,B 与w,e,b 功能是一致的,可是在区分 WORD 上是不一样的,对于parent.child这种,大写的快捷键会忽略标点符号。 ^ 移动到本行第一个非空白字符上。 0(数字0)移动到本行第一个字符上,HOME键也可。 $ 移动到当前行,下 N 行行尾。 | 移到当前行的第 N 个字符。 gg 移动到文件的第一行,同 [[。 G 移动到文件的最后一行,同 ]]。(NG会移动到第 N 行) f 也可用于移动光标,fx会查找光标后的字符x,3fx会查找光标后的第三个字符x。但f只局限与当前行不会跨行。 F 同f,反向查找。 ; 重复前面的f、F、t或T查找命令。 , 以相反的方向重复前面的f、F、t或T查找命令。 z<return> 将当前行下的第 N 行置为屏幕的顶行(即z+ENTER) 或者zt z. 将当前行上的第 N 行置为屏幕的中央 或者zz z- 将当前行上的第 N 行置为屏幕的底行 或者zb H 移动到当前屏幕的开头下 N 行。 M 移动到当前屏幕的中间。 L 移动到当前屏幕的结尾上 N 行。 gm 移动到屏幕中间 + 移动到下一行的第一个非空字符 - 移动到上一行的第一个非空字符 % 光标会移动后面的第一个小括号中括号大括号 ,所匹配的小括号中括号大括号,即成对出现的符号。
书签缓存
m[a-zA-Z] 在光标所在行定义书签,使用'+书签名 跳转。例如 ma,'a。
组合键
Ctrl + e 向下滚动一行 Ctrl + y 向上滚动一行 Ctrl + d 向下滚动半屏 Ctrl + u 向上滚动半屏 Ctrl + f 向下滚动一屏,同 PAGEDOWN。 Ctrl + b 向上滚动一屏,同 PAGEUP。 Ctrl + o 依次沿着你的跳转记录向回跳 Ctrl + i 依次沿着你的跳转记录向前跳
EX命令 当输入: / ? 会进入命令行编辑,在编辑器的最下边,出现 : / ? ,其中: + 命令 被称做EX命令。
:+行号 能够直接跳到该行 ,当输入行号大于最大行号时,会跳到最后一行。在便器展现行号的状况下,这个命令被常用。 :ju 列出跳转历史。
查找,vim中能够经过EX命令 :set + 选项 ,去设置一些选项来影响查找。输入/ ? 时,会在底行出现该命令,而后能够输入字符,输入ENTER开始查找,支持正则表达式,而且支持历史操做。
/{查找的内容}[/偏移量] 光标处向下查找指定内容 ?{查找的内容}[/偏移量] 光标处向上查找指定内容 /和? 在开始查找时可以使用n或者N在找到的内容之间跳转。 n 重复前一个查找的动做 N 与 n 恰好相反,反向进行前一个查找动做 :set ignorecase 忽略大小写的查找 :set noignorecase 不忽略大小写的查找 :set hlsearch 高亮搜索结果,全部结果都高亮显示,而不是只显示一个匹配。 :set nohlsearch 关闭高亮搜索显示 :nohlsearch 关闭当前的高亮显示,若是再次搜索或者按下n或N键,则会再次高亮。 :set incsearch 逐步搜索模式,对当前键入的字符进行搜索而没必要等待键入完成。 :set wrapscan 从新搜索,在搜索到文件头或尾时,返回继续搜索,默认开启。 *或者# 会选中光标处的WORD,而后 直接输入N/n,开始查找。
替换,替换操做能够实现缩进,注释。
r{CHAR} 替换光标处的字符。 R{WORD} 替换光标处的字符,直到输入<ESC>或者CTRL+[为止。 :s/old/new/ 用old替换new,替换当前行的第一个匹配 :s/old/new/c 用old替换new,替换当前行的第一个匹配 带确认选项的删除(选项y[es] ,n[o] ,a[ll] ,q[uit],l[ast]替换完当前退出,Ctrl+e ,Ctrl+y) :%s/\s\+$// 删除行尾空格 :s/old/new/g 用old替换new,替换当前行的全部匹配 :%s/old/new/ 用old替换new,替换全部行的第一个匹配 :%s/old/new/g 用old替换new,替换全部行的全部匹配 :%s/\([^,]*\), \(.*\)/\2 \1/ :n,m s/old/new/g 在第n行到第m行之间,用old替换new,替换全部匹配。 & 重复最后的:s命令 :10,20 s/^/ /g 在第10行知第20行每行前面加四个空格,用于缩进。 :起始行号,结束行号s/^/注释符/g :起始行号,结束行号s/^注释符//g
查找并执行命令
:g/text1/s/text2/text3 查找包含text1的行,用text3替换text2 :g/text/command 在全部包含text的行运行command所表示的命令 :g/^/m 0 :v/text/command 在全部不包含text的行运行command所表示的命令
vim是不支持系统的剪切板,linux中,一般经过vim的寄存器来实现,"+y 复制到系统剪切板 ,"+p 把系统粘贴板里的内容粘贴到vim,对于mac,macvim是command+c 和command+v
x 删除光标后 N 个字符 d{motion} 删除移动命令通过的字符,例如 dj 删除当前行及下面一行。 dd 删除当前行 d$ 删除光标到行尾的内容 同D。 Ndd 删除当前行开始的N行。 dG 删除当前行以后全部行 dgg 删除当前行以前全部行 :1,10d 删除1-10行 :11,$d 删除11行及之后全部的行 :1,$d 删除全部行 J 合并当前行及下面 N 行。即删除空格。 s 删除光标处的 N 个字符并进入插入模式 S 删除光标下的 N 行并进入插入模式 c{motion} 改变移动命令通过的字符,同d 命令,并进入插入模式。 y 拷贝当前光标选中部分,常在可视模式中使用。 yy 拷贝当前行下 N 行 :1,10y 复制1-10行 :,10y 复制光标所在行到10行 p 在当前光标后粘贴 N 次,若是以前使用了yy命令来复制一行,那么就在当前行的下一行粘贴。 P 在当前行前粘贴 N 次 :1,n co m 将1-n行插入到第m行以后。 :1,$ co $ 将整个文件复制一份并添加到文件尾部。
u 撤销(Undo) U 撤销对整行的操做 Ctrl + r ,即撤销的撤销。 . 重复上次修改,包含你在插入模式的插入。许多若是想屡次使用的修改命令,能够它代替。
当输入:会在底行出现:,再次输入的内容都会出如今:以后,这些输入的内容,会被认做EX命令。
经过EX命令设置的vim选项,都只在当前编辑窗中有效,退出后,则消失,如需永久有效,需修改vim的配置文件.vimrc。
常使用的EX命令:
:q 退出文件 :w 保存文件 (或者+ filename 另存为) :wq 保存退出文件(也可在普通模式下使用 ZZ 快捷键) :x 保存退出 与wq的区别是保存退出时,若是该文件没有修改,则不会修改文件的时间戳,wq则必定会。 :q! 强制退出 :help+命令 查看帮助 :e 后接文件名,打开文件,支持ftp,不接文件名时,直接刷新当前文件。 :e!放弃全部修改,从新打开文件。 :open+<file> 打开file #可经过:files或者:ls或者:buffers,来查看vim缓冲区,便可跳转文件。 :bn 切换到下一个文件 :n 编辑下一个文件 :bp 切换到上一个文件 :new 打开个新窗口或者在新窗口打开文件 :split 打开个新窗口或者在新窗口打开文件(vsplit也能够,split打开的窗口都是横向的,使用vsplit能够纵向打开窗口。) :!command 在当前目录下执行shell命令。 :sh 打开子shell,ctrl+d或者exit退出 (或者使用Ctrl+z 挂起 ,fg返回) :r 文件名 在光标所在处插入一个文件的内容。 :10r 文件名 将文件插入至 10 行以后。 :r! {command} 将命令 {command} 的标准输出插入到光标之下 :10,29write [!或者>>]name 将10-29 行的内容保存到文件name中。!表示强制 >> 表示追加 :f 显示文件名、当前的行号、文件的总行数和文件位置的百分比,是否修改。 :f+<filename> 改变编辑中的文件名。 :iab[breviate] re React 定义插入模式下缩写。 :abclear #set 选项 :set+<option> ,设置当前打开的vim 编辑器的选项,例如是否展现行号,自动缩进等。 :set all ,查看全部选项。 :set shiftwidth=4 ,设置自动缩进 4 个空格, 固然要设自动缩进先。 :set tabstop=4 , 实际的 tab 即为 4 个空格。 :set nonumber , 设置不展现行号。 :set number , 设置展现行号。 :set numberwidth=4 ,设置行号所占宽度 :set ai , 设置自动缩进 :map ,查看定义的全部映射,(映射?例如a映射ab,则a与ab 相同做用。在一些插件中都会使用映射)
:ls 查看缓存区 q: 查看命令窗口 :reg 查看寄存器 :marks 查看书签 :delm[ark] + 书签名 删除书签。 <{motion} 将动做 {motion} 覆盖的全部行向左移动 1个移位宽度 >{motion} 将动做 {motion} 覆盖的全部行向右移动 1个移位宽度 >> 向右移动一个移位宽度 << 向左移动一个移位宽度 :n,m>> ,n到m行右移一个移位宽度 CTRL+g 显示文件名、当前的行号、文件的总行数和文件位置的百分比,是否修改。 := 打印文件中的行数 gf 打开光标处文件,文件要在当前目录内。 gd 到达光标所在处函数或者变量的定义处。 :'. 它移动光标到上一次的修改行 K 看光标所指标识符的 man 帮助页 ~ 大小写替换,同时光标前移 gu{motion} 通过的位置内容小写(guu 当前行) gU{motion} 通过的位置内容大写(gUU 当前行) g~{motion} 通过的位置内容大小写互换。 zfap 按段落折叠 zo 打开折叠
只有在插入模式下,才能够作文字输入,不会被认为是快捷键,在普通模式下能够经过i进入插入模式。
CTRL+c 同<ESC>离开插入模式 CTRL+o {command}短暂离开插入模式,执行命令command后回到插入。
可视模式下可使用普通模式的大部分快捷键,当进入可视模式时左下角显示--VISUAL--,具体细节可查看vim的文档
可视模式主要是作选择操做,此时移动光标的操做都会把光标通过的部分选中。
CTRL+c 同<ESC>离开可视模式 ab 选择 "一个块" (从 "[(" 至 "])") (block) ib 选择 "内含块" (从 "[(" 到 "])") aB 选择 "一个大块" (从 "[{" 到 "]}") (Block) iB 选择 "内含大块" (从 "[{" 到 "]}") U 选中部分大写 u 选中部分小写
NERDTree最经常使用的插件之一,以树形结构展现文件夹,实现咱们在IDE的项目视图。能够去官方网站https://github.com/scrooloose...查看如何下载安装。
主要快捷键:
ctrl + w + h 工做窗口左移 ctrl + w + l 工做窗口右移 ctrl + w + w 光标自动在左右侧窗口切换 ctrl + w + r 移动当前窗口的布局位置 o 在已有窗口中打开文件、目录或书签,并跳到该窗口 go 在已有窗口 中打开文件、目录或书签,但不跳到该窗口 t 在新 Tab 中打开选中文件/书签,并跳到新 Tab T 在新 Tab 中打开选中文件/书签,但不跳到新 Tab i split 一个新窗口打开选中文件,并跳到该窗口 gi split 一个新窗口打开选中文件,但不跳到该窗口 s vsplit 一个新窗口打开选中文件,并跳到该窗口 gs vsplit 一个新 窗口打开选中文件,但不跳到该窗口 ! 执行当前文件 O 递归打开选中 结点下的全部目录 x 合拢选中结点的父目录 X 递归 合拢选中结点下的全部目录 e Edit the current dif 双击 至关于 NERDTree-o 中键 对文件至关于 NERDTree-i,对目录至关于 NERDTree-e D 删除当前书签 P 跳到根结点 p 跳到父结点 K 跳到当前目录下同级的第一个结点 J 跳到当前目录下同级的最后一个结点 k 跳到当前目录下同级的前一个结点 j 跳到当前目录下同级的后一个结点 C 将选中目录或选中文件的父目录设为根结点 u 将当前根结点的父目录设为根目录,并变成合拢原根结点 U 将当前根结点的父目录设为根目录,但保持展开原根结点 r 递归刷新选中目录 R 递归刷新根结点 m 显示文件系统菜单 cd 将 CWD 设为选中目录 I 切换是否显示隐藏文件 f 切换是否使用文件过滤器 F 切换是否显示文件 B 切换是否显示书签 q 关闭 NerdTree 窗口 ? 切换是否显示 Quick Help #切换标签页 :tabnew [++opt选项] [+cmd] 文件 创建对指定文件新的tab :tabc 关闭当前的 tab :tabo 关闭全部其余的 tab :tabs 查看全部打开的 tab :tabp 前一个 tab :tabn 后一个 tab
插件管理工具,vim有不少插件可供咱们使用,当插件数量大的时候就须要一个专门的工具去管理,pathogen就是实现功能,下载安装https://github.com/tpope/vim-...
vim 有不少有用的插件,像ctags、taglist、foldmethod、xmledit、visualmark、vim-markdown等。固然也有一些人把一些好的配置分享出来,比较受欢迎的有:
https://github.com/spf13/spf1...
https://github.com/carlhuda/j...
最近发现个,能够看看试着去配置本身的vim
https://github.com/square/max...