博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vim编辑器
阅读量:7136 次
发布时间:2019-06-28

本文共 7037 字,大约阅读时间需要 23 分钟。

什么是Vim

Vim是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs(夸张的说法是伪装成编辑器的操作系统)并列成为类Unix系统用户最喜欢的文本编辑器。Bram Moolenaar 从一个开源的vi开发了1.0的Vim,并且在1992 年 1.22 版本的 Vim 被移植到了 UNIX 和MS-DOS上。自vim发布有很多程序员使用,到2010年vim发布7.3版本,目前最新的一个版本。

安装Vim

Mac下可以直接使用brew安装:

brew install macvim

其他系统下的安装可查看官方网站

基本概念

普通( Normal )模式

当我们通过vim 文件或文件夹进入编辑器时,默认的就是普通模式,或者叫做命令模式,在这种模式下,键盘上的大部分输入会被认作是快捷键。普通模式也是vim使用中最多使用的模式,能很大的提高编辑效率。

命令解释中的参数:

CHAR 任何非空白字符

WORD 非空白字符的序列 (字串)
N 命令前输入的数值
{motion} 光标移动命令
Nmove {motion} 移动经过的文本

当进入普通模式时左下角显示--INSERT--,下面介绍一些常用的快捷键:

1.模式转换

基本的模式转换快捷键,对于进入编辑模式,下面还有其他快捷键在完成后也会进入编辑模式。

普通模式进入编辑模式

i 在当前位置生前插入N次     I 在当前行首插入N次a 在当前位置后插入N次       A 在当前行尾插入N次o 在当前行之后插入一行N次    O 在当前行之前插入一行N次

普通模式进入可视化模式

v 开始面向字符的可视 (Visual) 模式V 进入面向行的可视 (Visual) 模式CTRL+v 进入面向列的可视 (Visual) 模式

2.光标移动及屏幕调整

通过快捷键我们可以完成光标的快速移动.

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
将当前行下的第 N 行置为屏幕的顶行(即z+ENTER) 或者ztz. 将当前行上的第 N 行置为屏幕的中央 或者zzz- 将当前行上的第 N 行置为屏幕的底行 或者zbH 移动到当前屏幕的开头下 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 列出跳转历史。

3.查找及替换

查找,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} 替换光标处的字符,直到输入
或者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所表示的命令

4.删除 剪切 拷贝 粘贴

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 $ 将整个文件复制一份并添加到文件尾部。

5.撤销 重复

u 撤销(Undo)U 撤销对整行的操作Ctrl + r ,即撤销的撤销。. 重复上次修改,包含你在插入模式的插入。许多如果想多次使用的修改命令,可以它代替。

6.EX命令

当输入:会在底行出现:,再次输入的内容都会出现在:之后,这些输入的内容,会被认作EX命令。

通过EX命令设置的vim选项,都只在当前编辑窗中有效,退出后,则消失,如需永久有效,需修改vim的配置文件.vimrc。
常使用的EX命令:

:q 退出文件:w 保存文件 (或者+ filename 另存为):wq 保存退出文件(也可在普通模式下使用 ZZ 快捷键):x 保存退出 与wq的区别是保存退出时,如果该文件没有修改,则不会修改文件的时间戳,wq则一定会。:q! 强制退出:help+命令 查看帮助:e 后接文件名,打开文件,支持ftp,不接文件名时,直接刷新当前文件。:e!放弃所有修改,重新打开文件。:open+
打开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+
改变编辑中的文件名。:iab[breviate] re React 定义插入模式下缩写。:abclear#set 选项:set+

7.其他

: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 同
离开插入模式CTRL+o {command}短暂离开插入模式,执行命令command后回到插入。

可视模式

可视模式下可以使用普通模式的大部分快捷键,当进入可视模式时左下角显示--VISUAL--,具体细节可查看

可视模式主要是做选择操作,此时移动光标的操作都会把光标经过的部分选中。

CTRL+c 同
离开可视模式ab 选择 "一个块" (从 "[(" 至 "])") (block)ib 选择 "内含块" (从 "[(" 到 "])")aB 选择 "一个大块" (从 "[{" 到 "]}") (Block)iB 选择 "内含大块" (从 "[{" 到 "]}")U 选中部分大写u 选中部分小写

常用插件

NERDTree

NERDTree最常用的插件之一,以树形结构展示文件夹,实现我们在IDE的项目视图。可以去官方网站查看如何下载安装。

主要快捷键:

ctrl + w + h    工作窗口左移ctrl + w + l    工作窗口右移ctrl + w + w    光标自动在左右侧窗口切换ctrl + w + r    移动当前窗口的布局位置o       在已有窗口中打开文件、目录或书签,并跳到该窗口go      在已有窗口 中打开文件、目录或书签,但不跳到该窗口t       在新 Tab 中打开选中文件/书签,并跳到新 TabT       在新 Tab 中打开选中文件/书签,但不跳到新 Tabi       split 一个新窗口打开选中文件,并跳到该窗口gi      split 一个新窗口打开选中文件,但不跳到该窗口s       vsplit 一个新窗口打开选中文件,并跳到该窗口gs      vsplit 一个新 窗口打开选中文件,但不跳到该窗口!       执行当前文件O       递归打开选中 结点下的所有目录x       合拢选中结点的父目录X       递归 合拢选中结点下的所有目录e       Edit the current dif双击    相当于 NERDTree-o中键    对文件相当于 NERDTree-i,对目录相当于 NERDTree-eD       删除当前书签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

pathogen

插件管理工具,vim有很多插件可供我们使用,当插件数量大的时候就需要一个专门的工具去管理,pathogen就是实现功能,下载安装

其他

vim 有很多有用的插件,像ctags、taglist、foldmethod、xmledit、visualmark、vim-markdown等。当然也有一些人把一些好的配置分享出来,比较受欢迎的有:

最近发现个,可以看看试着去配置自己的vim

转载地址:http://djjrl.baihongyu.com/

你可能感兴趣的文章
MS SQL SERVER导出表结构到Excel
查看>>
深入浅出之React-redux中connect的装饰器用法@connect
查看>>
动态构建HTML
查看>>
PyCharm入门教程——“Lens”模式
查看>>
【测评】软件测试厂商Parasoft和SmartBear关键功能对比
查看>>
Kafka or RabbitMQ:消息中间件选型深入分析
查看>>
0321用户和组管理
查看>>
死磕 java集合之CopyOnWriteArrayList源码分析
查看>>
Timestamp、LocalDateTime、DateTime、String、LocalDate、Date转换
查看>>
springMVC入门篇
查看>>
实现类似于 moment.add(3, 'days')的+日期函数
查看>>
pom.xml不被git管理
查看>>
看图理解 rocksdb
查看>>
Redux的一些手法记录
查看>>
唠唠SE的多线程-01——线程
查看>>
flume
查看>>
Android反编译工具的使用--Android Killer
查看>>
James Yonan的PPT
查看>>
登录检查 springMVC Interceptor拦截器实现登访问
查看>>
通过nmtui和nmcli配置网络服务
查看>>