Shift + k | 跳转函数定义手册,qq退出 |
Ctrl + p Ctrl + n | 触发关键词自动补全 |
Ctrl + d | 命令行补全 :e 按 CTRL-D ,VIM会显示以“e”开头的清单 |
键入 / ,接上要向前搜索的短语。
键入 ? 接上要向后搜索的短语
搜索后,按n 以相同的方向搜索下一事件,按N以相反的方向搜索。
CTRL-O 使你返回到以前的位置,CTRL-I 回到以后的位置 。
:#,#s/old/new/g | 在#到#两行间,以new 替换所有的old |
:s/old/new | 在一行中以new替换第一个old |
:s/old/new/g | 在一行中以new替换所有的old |
:%s/old/new/g | 更改全文件中的所有事件 |
:%s/old/new/gc | 更改全文件中的所有事件,并给出替换与否的提示 |
v motion :w FILENAME saves the Visually selected lines in file FILENAME |
按 v 并移动 光标,按 :字符,屏幕底会显示 :'<,'>,按 w TEST ,其中 TEST 是一个不存在 的文件。(确认按<enter>前看到了:'<,'>w TEST),vim 会把选定的行写入文件TEST中 |
:r FILENAME retrieves disk file FILENAME and puts it below the cursor position. |
:r FILENAME 恢复磁盘文件FILENAME到光标下 |
:!ls - 显示目录清单 |
:!rm FILENAME - 移除 FILENAME文件 |
:w FILENAME 将当前的vim 文件以FILENAME 文件名写进磁盘 |
control + [ 这两个按键取代 <ESC> |
i | 是在光标所在的字符之前插入需要录入的文本。 |
I | 是在光标所在行的行首插入需要录入的文本。 |
a | 是在光标所在的字符之后插入需要录入的文本。 |
A | 是在光标所在行的行尾插入需要录入的文本。 |
o | 是光标所在行的下一行行首插入需要录入的文本。 |
O | 是光标所在行的上一行行首插入需要录入的文本。 |
s | 删除光标所在处的字符然后插入需要录入的文本。 |
S | 删除光标所在行,在当前行的行首开始插入需要录入的文本。 |
i 在光标之前,进入插入模式 I 在本行开头,进入插入模式 a 在光标之后,进入插入模式 A 在本行结尾,进入插入模式 o 在本行之后新增一行,并进入插入模式 O 在本行之前新增一行,并进入插入模式 s 删除当前字符,并进入插入模式 S 删除当前行中的所有文本,并进入插入模 |
Tab 常见的几个命令如下:
:tabnew web | 使用 :tabnew 创建一个名字叫 web 的 tab ,当然名字也可以没有,这样会创建一个没有名字的 tab |
:tabedit 文件名 | 在新标签页中打开指定的文件 |
:tab split | 保留当前标签页,并在新标签页中打开当前缓冲区中的文件 |
:tab ball | 如果打开了多个缓冲区,该命令将为每一个打开的缓冲区,分别新建单独的标签页 |
:tabfind | 搜索并在新标签页中打开文件 比如想打开当前目录下的img.txt文件,那么就可以使用:tabfind img.*命令。请注意,此命令只能打开一个文件,如果搜索出多个匹配文件,将提示“E77: 文件名过多”, 需要给出更精确的搜索条件以打开文件。此命令搜索文件的范围,是由path选项指定的。例如以下命令将指定搜索包含当前文件的目录(.),当前目录(两个逗号之间的空格), 以及当前目录下的所有子目录(**)::setpath=.,,** |
:tabclose | 关闭当前标签页 |
:tabonly | 保留当前标签页,而关闭其它所有的标签页 |
:tabc | 关闭当前的 tab |
:tabn | 切换到下一个 tab |
:tabp | 切换到上一个 tab |
:tabs | 查看一共有几个 tab,显示已打开标签页的列表,并用“>”标识出当前页面,用“+”标识出已更改的页面 |
gt | 移动到下一个标签页 |
gT | 移动到上一个标签页(如果已经到达最后面或最前面的标签页,将会自动转向循环) |
1gt | 这是上一个命令的拓展,按下数字键(1,2,3,4……)和 gt ,将切换到相应顺序的 tab, tab 的序号默认从 1 开始,上面的命令将会切换到第一个 tab 。 |
:tabfirst或:tabr | 移动到第一个标签页 |
:tablast | 移动到最后一个标签页 |
Vim 7.0开始引入了多标签页(Tabs)概念,用于同时编辑多个文件,每一个标签页也可以包含多个缓冲区或窗口。
标签页的特殊之处在于:
通常作用于所有打开的缓冲区和窗口的命令(比如 :bufdo, :windo, :all, and :ball等)将只影响当前标签页中的缓冲区和窗口。 |
Vim初始化时传入-p参数后跟多个文件,此时每个文件对应一个tab。 |
例如打开三个文件,每个文件对应一个tab: vim -p file1 file2 file3 |
Tab的标签默认显示当前缓冲区的文件名。 |
如果在同一标签页中打开了多个缓冲区,那么标签也会显示打开缓冲区的总共数目 |
例如vim file1 file2 file3,参数中的所有文件都会被载入缓冲区 |
"+" 表示已经修改过的页面。而"2+" 则表示有3个窗口,其中一个已经更改。
set tabpagemax | Vim默认最多只能打开10个标签页。可以用set tabpagemax=15改变这个限制。 |
:tabm | 按照指定的次序排列标签页 注意,标签页次序是从0开始计数的。 比如命令:tabm 1将把当前标签页移动到第2的位置。 如果没有为:tabm命令指定参数,那么当前标签页将会被移动到最后 |
set showtabline | 默认情况下,只有用户新建了标签页才会在窗口上方显示标签栏,这是由选项set showtabline=1决定的。 如果我们希望总是显示标签栏,那么可以用set showtabline=2命令来设置。 如果我们希望完全不显示标签栏,那么可以使用set showtabline=0来设置 |
:tabdo | 多标签页命令 同时在多个标签页中执行命令 比如打开了多个标签页,需要把这些文件中的“food”都替换成“drink”, 那么就可以使用:tabdo %s/food/drink/g命令,一次完成对所有文件的替换操作,而不用针对每个文件重复操作。 |
通过:help tab-page-intro命令,可以获得关于标签页使用的更多信息。我们甚至可以使用:tab help tabpage命令,在新的标签页查看帮助信息。
在vim中,缓冲区(Buffer)是一块内存区域,用于存储着正在编辑的文件。 编辑完成之后,在保存缓冲区并退出时,内容也随之被写回原始文件。
操作缓冲区Buffer 的常用命令:
:ls | 列出所有的缓冲区/ VIM 打开的所有文件 |
:bn | 切换下一个缓冲区,显示下一个文件的内容 |
:bp | 切换上一个缓冲区,显示上一个文件的内容 |
:b number | 这里的 number 是缓冲区的一个数字编号,当 :ls 显示缓冲区的时候都会显示出一个缓冲区的编号:b |
:b fileName | fileName 是具体文件名称,也可以是正则表达式,也可以是文件名中的个别字母,一旦匹配就会加载该缓冲区 / 显示该文件到窗口中 注意:fileName必须与缓冲区中的某个文件对应 |
缓冲区类型及其标志(:ls或者:ls!命令查看)
(1) 最前面的每行1,2,3,4表示缓冲区的编号;
(2) u,#,a,%,-表示缓冲区的属性,具体的含义如下:
- | Readonly buffer, 禁用了modifiable,只读缓冲区 |
= | Readonly buffer, 只读缓冲区 |
a | Active buffer, 活动缓冲区, 当前显示在屏幕上 |
h | Hidden buffer, 隐藏缓冲区, 已经载入但没有显示 |
+ | Modified buffer, 已经更改的缓冲区 |
X | Error buffer, 读入时报错的缓冲区 |
% | Current buffer, 当前缓冲区 |
# | Alternate buffer, 交换缓冲区 |
u | Unlisted buffer, 只有在列表命令中使用!修饰符才能显示的缓冲区 |
其中u表示这个缓冲区是vim软件(及其插件)本身打开的缓冲区,而不是用户为了编辑某个文件打开的缓冲区。特别的,如果用户只想查看自己打开的缓冲区,直接用":ls"命令即可;如果想查看当前所有缓冲区,需要使用":ls!"命令。
列出当前所有缓冲区 | :ls :ls! :files :buffers |
到修改过的缓冲区 | :bmodified |
添加一个缓冲区 | :badd file_path |
新增一个缓冲区,指明为这个缓冲区打开窗口时,光标所处的位置 | :badd +linenum filename |
分屏显示所有缓冲区 | :ball |
通过buffer编号或者buffer对应的file_path选择某个缓冲区,并在当前窗口覆盖显示选定的buffer | :b number :b file_path --> 按tab键可以联想并补全file_path |
通过buffer编号或者buffer对应的file_path选择某个缓冲区,并拆分当前窗口显示选定的buffer | :sb number :sb filename --> 按tab键可以联想并补全file_path |
通过:bn / :bp / :blast / : bfirst切换缓冲区(所有缓冲区循环滚动) | :bn(跳转到下一个buffer缓冲区) :bp(跳转到前一个buffer缓冲区) :blast(最后一个缓冲区) :bfirst(第一个缓冲区) |
通过:wn / :wp存盘文件、并跳转 | :wn(存盘当前文件、并跳转到下一个buffer缓冲区) :wp(存盘当前文件、并跳转到前一个buffer缓冲区) |
删除缓冲区 --> 为这个缓冲区打开的窗口会关闭,并从缓冲区列表中移除文件名 | :bdelete file_path |
删除单个缓冲区 | :bdelete number |
删除指定范围的缓冲区 | :start,end bdelete |
卸载缓冲区 --> 为这个缓冲区打开的窗口会关闭,但是这个文件名仍然会存在于缓冲区列表中 | :bunload file_path |
卸载单个缓冲区 | :bunload number |
卸载指定范围的缓冲区 | :start,end bunload |
可以使用:help buffers命令,查看关于缓冲区的帮助信息
如何使用 mark ?
如何使用 mark ? m 是创建标记的关键字 | 按下键盘上的 m , 紧跟着在按下键盘上的(a-zA-Z)当中的任何一个字母,这样一个标记 (mark)例如 ma, mA 这样一个名字叫做 a 或者 A 的标记就建立起来了 |
ma | 意思在当前文件的光标所在的行建立了一个标记,以后我们可以快速定位到这个位置。 |
如何激活标记? | 使用 ‘(单引号) 或者 ` (常规键盘靠近数字键 1 左边的按键,我这里就做撇号) ,紧接着按下当初标记的那个字母就会跳到当初标记的那个位置。 例如 :`a 和 ‘a |
‘a 和 `a有什么区别呢? | ‘a (也就是单引号+a) 是跳转到当初标记的行首 `a (也就是撇号+a) 实跳转到当初标记的时候光标所在的位置 |
‘ 和 ` 的 区别总结 | ‘(单引号)通常用来跳转到标记的文本的行首 ’ (撇号) 通常用来跳转到标记的光标的位置 |
ma 和 mA有什么区别? | 如果要是在文件之间跳转要使用大写的标记才可以,例如现在在当前文件的某处打了一个标记 mA , 离开该文件切换到了另一个文件,此时使用 ‘A 就可以返回之前文件打标记的地方了。 结论:小写字母通常用来单个文件坐标记,大写字母通常是用来文件间坐标记。 |
:marks | 列出所有的标记 |
:delmarks a | 删除 a 标记 ,也可以一次删除多个标记,例如, :delmarks a b c d 这样就删除了 a , b , c , d 四个标记 |
:delmarks! | 删除所有的标记(删除所有小写字母的标记)(大些字母的标记除外) |
寄存器(register)
vim 如何定义一个有名字的寄存器? | vim 默认使用的是无名寄存器, vim 通常使用 “(双引号)加上一个 a-z 的字母来给定义一个有名字的寄存器。 例如如下: “ayy 表示的是复制当前行内容到 a 寄存器当中 “ap 表示的是从 a 寄存器当中取出内容 |
:reg | 该命令会列出所有的寄存器 |
:reg a | 会查看 a 寄存器里寄存的内容 |
“ap | 使用 p 黏贴命令就可以从指定的寄存器中取出内容了,该例就是从 a 寄存器中取出内容。 |
:5put a | 将寄存器中的内容粘贴到第五行的后面 |
:5put! a | 将寄存器中的内容粘贴在第五行的前面 |
"xp | 使用p命令,将x寄存中的文本粘贴到光标之后 |
"xP | 将x寄存中的文本粘贴到光标之前 直接使用p或P命令,而没有指明特定寄存器,那么将粘贴未命名寄存器中的内容 |
".P | 粘贴上次插入的文本 |
"*p | 在Normal mode下,粘贴系统剪切板中的内容 "* 是选中的内容register,"+是系统剪贴板寄存器 |
无名寄存器是怎么定义的? | “” 两个双引号就是一个无名寄存器,通常我们复制黏贴的时候都会自动启用这个寄存器。 |
:help reg | 查看一下寄存器的详细使用方法 |
寄存器可以分为以下十种类型:
分屏操作
Ctrl + w s | 按住组合键 Ctrl + w ,然后在按下 s 水平切分当前窗口,命令将会上下分割当前打开的文件。 |
:sp file | 按住冒号:,紧接着输入 sp ,在键入文件名 命令将会上下分割当前文件和新打开的 file |
Ctrl +w v | 按住组合键 Ctrl + w ,然后在按下 v 垂直切分当前窗口,命令将会左右分割当前的文件 |
:vsp file | 按住冒号 :,紧接着输入 vsp ,在键入文件名称 命令将会左右分割当前打开的文件和新打开的文件 file |
:sp | 可以水平分割当前窗格(上下分割) |
:vs | 可以垂直分割当前窗格(左右分割) |
Ctrl + w h | 切换左右分屏的光标 : 将当前光标定位到左边的屏幕 |
Ctrl + w l | 切换左右分屏的光标 : 将当前的光标定位到右边的屏幕 |
Ctrl + w H | 移动左右分屏 : 将当前的分屏移动到左边 |
Ctrl + w L | 移动左右分屏 : 将当前的分屏移动到右边 |
Ctrl + w j | 切换上下分屏的光标 :将当前的光标移动到下面的分屏 |
Ctrl + w k | 切换上下分屏的光标 :将当前光标移动到上面的分屏 |
Ctrl + w J | 移动上下分屏:将当前的分屏移动到下面的分屏 |
Ctrl + w K | 移动上下分屏:将当前的分屏移动到上面的分屏 |
Ctrl + w c | 命令是关闭当前的分屏 |
Ctrl + w o | 保留活动窗口,关闭其它窗口 |
Ctrl + w q | 这个命令也是关闭当前的分屏,如果是最后一个分屏将会退出 VIM |
C-w, C-w | 切换到下一窗格 |
Ctrl + w w | 切换到下一窗格 |
左右分屏如下操作: vim -On file1 file2 ... filen 这里的 n ( n 是要打开的具体文件的数目:1,2,3 ...)是代表有几个文件需要分屏,从左至右依次显示 n 个文件。v |
上下分屏如下操作: vim -on file1 file2 ... filen 这个命令跟上一个命令不同的是其中的参数 -on( n 是要打开的具体文件的数目:1,2,3 ...) 中的 o 是小写,这样将会上下依次显示 n 个文件 |
:w | 保存当前对文件的修改,但是不退出文 |
:w! | 强制保存但是不退出文件 |
:w file | 保存当前的文件修改到 file 文件当中 |
:q! | 退出文件,对文件的修改不做保存 |
:qa! | 退出所有的文件,对所有的文件修改都不做保存 |
:wq | 退出文件并保存对文件的修改 |
:x | 退出文件并保存对文件的修改 |
:e file | 打开另一个文件 |
:e! | 放弃对文件的所有修改,恢复文件到上次保存的位置 |
:E :Ex :Explorer | 在 Vim 中打开资源管理器/目录树,光标选中后、回车打开对应文件(提示:- 进入上级目录) 打开文件管理器,并显示活动缓冲区所在的目录 使用 :Explore 命令或缩写 :Ex 命令(注意E大写),将在当前窗口中打开文件浏览器 |
:edit {path} | 打开文件管理器窗口,只是在执行此命令时要以目录名(而不是文件名)作为 {path} 参数 例如:执行 :edit . 或(:e.)命令,就会在文件管理器里打开工程的根目录 |
<C-^> | 调出文件管理器后,切换回之前正在编辑的文件,可以使用<C-^> 命令 |
<C-g> | <C-g> 命令用于显示当前文件的文件名及状态 |
| 使用 :Sexplore 命令或缩写 :Se 命令,在上边水平拆分窗口打开文件浏览器 使用 :Hexplore 命令或缩写 :He 命令,在下边水平拆分窗口打开文件浏览器,在上边水平拆分窗口打开文件夹浏览器也可以用He!命令。 使用 :Vexplore 命令或缩写 :Ve 命令,在左边垂直拆分窗口打开文件浏览器,如果右边垂直拆分窗口打开文件浏览器可以用 :Ve!命令。 使用 :Texplorer 命令或缩写 :Te 命令,在新的tab标签页里打开文件浏览器 默认方式打开文件浏览器浏览的是当前文件所处的目录。 也可以在启动Netwr时,指定浏览特定的文件夹,如 :Se C:\Temp 命令。注意直接指定C盘就不行,只能是指定盘符下的文件夹 |
:Rex[plore] | 返回资源管理器 |
:bd :bdelete :bw :bwipe | Vim没有将netrw窗口列为缓冲区,而是像缓冲区一样关闭它,并返回到以前的缓冲区/文件。 |
:saveas file | 另存为 file |
文件浏览器netrw里的一些常用快捷键及命令 | I 显示/隐藏 文件浏览器提示 F1 在netrw文件浏览器里按F1会打开netrw的帮助信息 Enter 在当前窗口打开该文件/目录 t 在新tab标签页中,打开文件/目录 v 在左边垂直拆分窗口,打开文件/目录 o 在上边水平拆分窗口,打开文件/目录 p 预览文件 x 使用关联程序打开文件,用于快速打开非文本型文件,如 word、图片 - 浏览上一级目录 i 在瘦、长、宽和树形方式切换,来展示文件列表 d 新建目录 D 删除的文件/目录 % 新建文件 s 依次切换选择排序方式:按名字,时间或文件大小 S 自定义排序 r 反向排序列表 R 重命名指定的文件/目录 |
:bn 和 :bp | 当打开多个文件时 :bn 和 :bp 进行上一个文件或者下一个文件的切换 |
:set nu | 该命令会显示行号 |
:set nonu | 该命令会取消行号 |
:n | 定位到 n 行 |
:set ic | 编辑器将不会区分大小写 |
:set noic | 该命令用来区分大小写的查询 |
:n1,n2d | VIM 删除多行文本,n1 和 n2 指的是起始行号和结束行号,d 是删除关键字 |
VIM 处理文本的替换 | :{作用范围}s/{目标}/{替换}/{替换的标志} g 是替换标志之一,表示全局global替换(即替换目标的所有出现) i 表示大小写不敏感查找,I 表示大小写敏感 c 表示需要确认 |
:s/zempty/handsome/g | 将会把当前光标所在行的 zempty 替换成 handsome |
:s/zempty/handsome | 只替换从光标位置开始,目标的第一次出现 |
:'<,'>s/zempty/handsome/g | 选区,在可视模式下选择区域后输入 : ,VIM 会自动补全为 :'<,'>。 |
:n1,n2s/zempty/handsome/g | 这里的 n1 和 n2 值得是行号,将会替换掉 n1 到 n2 的所有 zempty 为 handsome. |
:%s/zempty/handsome | 替换掉文件中所有行第一次出现 zempty 的地方为 handsome |
:%s/zempty/handsome/g | 将会把全文中的 zempty 替换成 handsome |
:%s/zempty/handsome/i | 替换掉所有行第一个出现 zempty (不区分大小写) 为 handsome |
:%s/zempty/handsome/gi | 替换掉所有行出现 zempty (不区分大小写) 为 handsome |
:%s/zempty/handsome/gc | 全局查找"zempty"替换为"handsome"并且需要确认 |
VIM 执行 Linux 命令 | :!command,执行完命令以后按下键盘上的 Enter 就会返回到文件 |
:r !command | VIM 执行命令,并且添加结果至操作文本光标处 |
:r !date | 执行 date 命令显示时间,并且添加命令结果到文本中 |
定义快捷键 |
:map ^M I#<ESC> 上面的例子也就是通过快捷键 Ctrl + m 在文件光标处所在行的行首插入 # ( # 代表注释)。 : 后面的 map 是关键字 ,后面是 key 和 value 。 key 对应的是 ^M , 这个 key 需要强调一下 ^M 是 Ctrl + v + m 打出来的(按下这三个键,VIM 会显示成 ^M ),^M 代表快捷键是Ctrl + m , Ctrl + v + n 就是 ^N ,代表快捷键是 Ctrl + n 。Ctrl + v + x 就是 ^X (这里的 x 是代表 26 个字母中的任意一个) 代表快捷键 Ctrl + x。 value 对应的是 I#<ESC>,表示按下快捷键以后执行的相应操作,I 是切换光标至行首并切换到编辑模式,#是行首输入的内容( # 是VIM 文件中的注释符号 ),<ESC> 是退出编辑模式。 举例如下: :map ^D Ahelloworld<ESC>表示在文件的光标所在行的行尾,添加 helloworld 字符串,按住组合键 ctrl + d 就会执行操作。 |
使用 ab |
:ab email xxxx@gmail.com : 后面的 ab 是关键字 ,该命令执行后,然后切换到编辑模式下,输入 email 会把输入的 email 自动替换成 xxxx@gmail.com。 这个命令主要是处理频繁输入同样的长串字符串。 |
在当前行上移动光标
0 | 移动到行头 |
^ | 移动到本行的第一个不是 blank 字符 |
$ | 移动到行尾 |
g_ | 移动到本行最后一个不是 blank 字符的位置 |
w | 光标移动到下一个单词的开头 |
e | 光标移动到下一个单词的结尾 |
fa | 移动到本行下一个为 a 的字符处 |
fb | 移动到本下一个为 b 的字符处 |
nfa | 移动到本行光标处开始的第 n 个 字符为 a 的地方(n 是 1,2,3,4 ... 数字) |
Fa | 同 fa 一样,但光标移动方向同 fa 相反 |
nFa | 同 nfa 类似,但光标移动方向同 nfa相反 |
ta | 移动光标至 a 字符的前一个字符 |
nta | 移动到第二个 a 字符的前一个字符处 |
Ta | 同 ta 移动光标方向相反 |
nTa | 同 nta 移动光标方向相反 |
; 和, | 当使用 f, F, t ,T, 关键字指定字符跳转的时候, 使用 ;可快速跳转到下一个指定的字符 使用 , 可快速跳转到前一个指定的字符 |
跨行移动光标
[n]f{word} | f 用来查找在当前行 当前光标后是否存在某个字符 {word} 如果存在则将光标移动过去 |
$ | $ 跳转到行尾 |
^ | ^ 跳转到行首 |
% | 括号匹配跳转 () [] {},需要把光标先移动到括号上 |
* 和 # | 匹配光标当前所在的单词,移动光标到下一个(或者上一个)匹配的单词( * 是下一个,# 是上一个) |
[n]h/j/k/l | 数字加上方向键 代表重复运行多少次 2jj 向下移动两行 10l 向右移动 10 个字符 3kk 向下移动 3 行 20h 向左移动 20 字符 |
G | G 移动到最后一行 |
nG | 光标定位到第 n 行的行首 |
gg | 光标定位到第一行的行首 |
H | M | L | H 光标定位到当前屏幕的第一行行首 M 光标移动到当前屏幕的中间 L 光标移动到当前屏幕的尾部 |
[n]w | 移动到后面 word 的开始位置,前面加上数字 代表重复多少次 |
e | e 移动到下一个词语的末尾 |
b | b 移动到上一个单词的开头 |
zz | zz改变窗口的整体位置,将当前光标所在处 移动到窗口中部 |
zt | 把当前行移动到当前屏幕的最上方,也就是第一行 |
zb | 把当前行移动到当前屏幕的尾部 |
翻页操作 | ctrl+f 查看下一页内容 ctrl+b 查看上一页内容 |
删除 d | d 是删除的意思,通常搭配一个字符 ( 删除范围 ) 实现删除功能,常用的如下: dw 删除一个单词 dnw 删除 n 个单词, dfa 删除光标处到下一个 a 的字符处( fa 定位光标到 a 处 ) dnfa 删除光标处到第 n 个 a 的字符处 dd 删除一整行 ndd 删除光标处开始的 n 行 d$ 删除光标到本行的结尾 dH 删除屏幕显示的第一行文本到光标处 dG 删除光标所在行到文本的结束 |
复制 y | y 是复制的意思,通常搭配一个字符(复制范围)实现复制的功能,常用的如下: yw 复制一个单词,还有 ynw yfa 复制光标到下一个 a 的字符处,还有ynfa yy 复制一行,还有 nyy y$ 复制光标到本号的结尾 yH 复制屏幕显示的第一行文本到光标所在的行 yG 复制光标所在行到文本的结束 |
黏贴 p | p ,P是黏贴的意思,当执行完复制或者黏贴的命令以后,VIM 会把文本寄存起来。 p 在光标后开始黏贴 P 大写的 P 光标前开始粘贴 |
撤销操作和恢复 | u 撤销刚才的操作 ctrl + r 恢复撤销操作 |
删除字符操作和替换 | x 删除光标当前所在的字符 r 替换掉光标当前所在的字符 R 替换掉从光标开始以后的所有字符,除非 <ESC > 退出,或者 jj (代替 <ESC> 上文有提到)退出。 |
大小写转换 | ~ 将光标下的字母改变大小写 3~ 将光标位置开始的3个字母改变其大小写 g~~ 改变当前行字母的大小写 gUU 将当前行的字母改成大写 guu 将当前行的字母全改成小写 3gUU 将从光标开始到下面3行字母改成大写 gUw 将光标下的单词改成大写。 guw 将光标下的单词改成小写 |
VIM 的重复命令 | . 该命令是重复上一个操作的命令 n<command>重复某个命令 n 次,如 10p复制 10 次,10dd 删除十次。 |
VIM 可视化模式(Visual-mode) | v,V,Ctrl+v |
v字符可视化 | v字符可视化,按下键盘上的v以后,屏幕底部应该会有一个 VISUAl 的提示,操作 h,j,k,l就选中文本,继续按 v 退出可视化模式。 |
V 行可视化 | V 行可视化,按下键盘上的 V 以后,屏幕底部应该有一个 VISUAL LINE 的提示,操作 j,k 可以向上或者向下以行为单位选中文本,继续按下 V 退出可视化模式。 |
Ctrl+v 块状可视化 | Ctrl+v 块状可视化,按下键盘上的 Ctrl+v 以后,屏幕底部应该会有一个提示 VISUALBLOCK ,可以通过 h,j,k,l 块状的操作选择区域,这是很多编辑器都不可以做到的,继续按下 Ctrl+v 会退出可视化模式。 |
可视化模式下操作文本 | 可视化模式下选择操作区域以后, 按下 d会删除选择的区域, 按下 y 会复制选择的区域,按下 p 会黏贴选择的区域。 |
可视化模式下 v 的特殊操作 | 当操作的文本光标在 “”,‘’ ,(),{} ,[(双引号,单引号,小括号,大括号,中括号)当中的时候,可以通过 va"选中 ”“ 内的所有内容包括双引号"" , vi" 选中 "" 内的所有内容,不包括 ""。 va,vi 会快速选择区域,va 后面会紧跟一个区域结束标志,a 会选中结束符标志,i 就不会。例子如下: "hello world [VIM is so strong],{we all can master vim skill}" 假设当前光标定位在上面的文本 M 处: va] 操作将会选中以下文本(加粗部分): “hello world[VIM is so strong],{we all can master vim skill}“ vi] 操作将会选中如下的区域,没有包含 []: “hello world [VIM is so strong],{we all can master vim skill}“ |
块区域下的特殊操作 | Ctrl+v 选中块区域以后,按下大写的 I 或者 A 可以在区域的前面或者后面输入内容,按下 jj 或者 <ESC>,可以看到选中的区域前面或者后面会有输入的内容 |
VIM 的代码提示功能 | 在编辑模式下 ,快捷键 Ctrl+n 或者 Ctrl+p 会有代码提示功能,我们可以实现快速录入的效果 |
VIM 的宏录制 |
假设需要操作的文本如下,需要将如下文本的每一行的行首插入入一个 tab 键。 hello hello world hello world , vim 宏录制的录制操作 先将光标移动到第一行,在普通模式下按下 q 键(宏录制是 q 键启动的),在按一个 a (字母随意),表示该宏注册为 a ,按下 I 在行首插入一个 tab 键,按下jj或者 <ESC>退出编辑模式,按下 j 将光标移动到下一行行首,最后按下 q 键完成录制操作(宏录制是 q 键结束的)。 总结上面例子的操作流程: q → a → I → tab → jj → j → q 上面的例子成功地把在行首插入 tab 的功能录制了下来,那么如何应用到其他行呢? |
宏录制的使用 上述的例子,在正常模式下,按 @a执行宏录制的一系列动作,将会在第二行执行插入 tab 。 @@ 是对上一次宏使用的重复操作。n@a 就会执行 n 次一系列的动作。使用宏录制可以一次执行一系列的操作,可以针对一些重复度较高的操作进行宏录制。 |