Vim是Linux上著名的文本编辑器,它是早年的Vi编辑器的加强版。gVim是Vim的图形前端,它是跨平台的编辑器,基本上主流的操作系统上面都有它的版本。gVim是一个国际版本,会根据安装的平台自动选择相应语言包,支持中文及其各种编码,连界面也是中文的,在Linux Mint 12软件管理器中, gVim被叫做vim-gnome。
Vim一般会有全局配置和用户配置。全局配置文件目录可以在打开vim之后在命令行模式输入:echo $VIM查看,用户配置文件目录可以在打开vim之后在命令行模式输入:echo $HOME查看。
Vim键盘图:
一、vi参数说明:
| 文件打开或关闭方法 | |
|---|---|
| vi +n 【file】 | n为数字,“+”也需输入,使用vi打开文件并将光标移到第n行 |
| vi + 【file】 | n为数字,“+”也需输入,使用vi打开文件并将光标移到最后一行 |
| vi +/pattern 【file】 | pattern为正则表达式,“+”也需输入,使用vi打开文件并将光标移到匹配pattern的第一处地方 |
| vi -R 【file】 | 使用vi只读打开文件 |
| vi -d 【file1】【file2】【file3】...【filen】 | 使用vi对比模式(diff)打开n个文件 |
| vi -o 【file1】【file2】【file3】...【filen】 | 使用vi水平窗口打开n个文件 |
| vi -O 【file1】【file2】【file3】...【filen】 | 使用vi垂直窗口打开n个文件 |
| fg | 当vim在后台运行时可将vim重新唤起 |
二、命令模式:
用户刚刚启动 vi/vim,便进入了命令模式。此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。常用命令:
1、切换到输入模式:
| 切换到输入模式的方法 | |
|---|---|
| i(insert) | 在当前字符的左侧插入 |
| I | 在当前行首字符(非空白字符)的左边插入 |
| a(append) | 在当前字符的右侧插入 |
| A | 在当前行尾字符的右边插入 |
| o | 在下一行插入 |
| O | 在上一行插入 |
| s(substitute) | 删除当前字符然后进入插入模式 |
| S | 删除当前行然后进入插入模式 |
2、切换到命令行模式:
| 切换到命令行模式的方法 | |
|---|---|
| : | 切换到命仅行模式 |
3、vim切到后台运行,回到sh:
| vim切到后台运行的方法 | |
|---|---|
| 【Ctrl】z | 将vim在后台运行 |
4、光标行内移动:
| 光标行内移动的方法 | |
|---|---|
| h 或 向左箭头键【←】 | 光标向左移动一个字符 |
| l 或 向右箭头键【→】 | 光标向右移动一个字符 |
| fx | x为任意字符,移动光标到当前行的下一个字符x处 |
| Fx | x为任意字符,移动光标到当前行的上一个字符x处 |
| tx | x为任意字符,移动光标到当前行的下一个字符x左边的位置 |
| ; | 重复上面的移动 |
| , | 反方向重复上面的移动 |
| 0 或 功能键【Home】 | 移动光标到当前行行首 |
| ^ | 移动光标到当前行第一个非空白字符处 |
| $ 或功能键【End】 | 移动光标到当前行行尾 |
| n【Space】 | n为数字,按下数字后再按空格键,光标会向右移动这一行的n个字符。例如20【Space】则光标会向后面移动20个字符距离 |
5、光标跨行跳转:
| 光标跨行跳转的方法 | |
|---|---|
| j 或 向下箭头键【↓】 | 光标向下移动一个字符 |
| k 或 向上箭头键【↑】 | 光标向上移动一个字符 |
| 如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话,例如向下移动 30 行,可以使用 "30j" 或 "30【↓】" 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可! | |
| % | 光标跳转到配对的括号 |
| [[ | 移动光标到上一个行首是{的行 |
| ]] | 移动光标到下一个行首是{的行 |
| w | 移动光标到下一个词的头部,以标点和空白分隔 |
| W | 移动光标到下一个词的头部,以空白分隔 |
| e | 移动光标到当前词或下一个词的尾部,以空白分隔 |
| b | 移动光标到当前词或上一个词的头部,以空白分隔 |
| '' | 两个单引号,移动光标到光标上次停靠的地方 |
| gd | 移动光标到当前光标所在处函数或变量定义的地方 |
| gd | 跳转到相应的头文件(可通过:set path+=xxx来添加头文件目录xxx) |
| K | 在man里查找当前光标所在处的词 |
| 【Ctrl】b | 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用) |
| 【Ctrl】f | 屏幕『向下』移动一页,相当于 [Page Down] 按键 (常用) |
| 【Ctrl】u | 屏幕『向上』移动半页 |
| 【Ctrl】d | 屏幕『向下』移动半页 |
| 【Ctrl】y | 屏幕『向上』移动一行 |
| 【Ctrl】e | 屏幕『向下』移动一行 |
| gg | 移动到文件的第一行,相当于 1G 啊! (常用) |
| G | 移动到文件的最后一行(常用) |
| nG | n为数字,移动到文件的第n行。例如 20G 则会移动到文件的第20行,相当于命令行模式下的:n |
| n| | n为数字,移动到当前行的第n列 |
| H | 光标移动到当前屏幕第一行行的第一个字符 |
| nH | n为数字,光标移动到当前屏幕第一行开始数向下的n行的第一个字符 |
| M | 光标移动到当前屏幕中间行的第一个字符 |
| L | 光标移动到当前屏幕最后一行的第一个字符 |
| nL | n为数字,光标移动到当前屏幕最后一行开始数向上的n行的第一个字符 |
| * | 移动光标到下一个光标所在位置的词出现的位置 |
| # | 移动光标到上一个光标所在位置的词出现的位置 |
| 【Shift】{ | 移动光标到上一个空行 |
| 【Shift】} | 移动光标到下一个空行 |
| n% | n为数字,光标移动到文件内容的%n处 |
| n【Enter】 | n 为数字。光标向下移动n行(常用) |
| zz | 如果光标所在的行之前的行足够撑满半屏幕,那么让光标所在的行居于屏幕中心 |
| zt | 让光标所在的行居于屏幕第一行(top) |
| zb | 如果光标所在的行之前的行足够撑满一屏幕,让光标所在的行居于屏幕最后一行(bottom) |
| z【Enter】 | 使当前行成为屏幕首行 |
| z. | 使当前行成为屏幕中间行 |
| z- | 使当前行成为屏幕尾行 |
6、搜索和统计:
| 搜索和统计的方法 | |
|---|---|
| /pattern | 从当前位置以下搜索匹配pattern的内容 |
| ?pattern | 从当前位置以上搜索匹配pattern的内容 |
| n | 在同一方向重复上一次搜索命令 |
| N | 在反方向上重复上一次搜索命令 |
| 【Ctrl】g | 文件行数和当前位置占总行数的百分比 |
| g【Ctrl】g | 文件列数、行数、单词数、字符数和字节数统计 |
7、编辑:
| 编辑的方法 | |
|---|---|
| x | 剪切光标所在处的字符 |
| nx | n为数字,剪切光标所在处之后的n个字符 |
| X | 剪切光标所在处之前的一个字符 |
| nX | n为数字,剪切光标所在处之前的n个字符 |
| dd | 剪切光标所在的那一整行(常用) |
| cc | 剪切光标所在的那一整行并进入编辑模式 |
| ndd | n为数字,剪切光标所在行(包括当前行)下的n行 |
| dnG | n为数字,剪切从第n行(从1开始计数)到光标所在行之间的所有行,包括第n行和光标所在行 |
| dG | 剪切从光标所在行到最后一行的所有行,包括光标所在行和最后一行 |
| d$ | 剪切光标所在字符(包括当前字符)之后的光标所在行的字符 |
| d0 | 剪切光标所在字符(不包括当前字符)之前的光标所在行的字符 |
| dw | 剪切光标所在的当前词 |
| D | 删除从当前光标位置到行尾 |
| C | 删除从当前光标位置到行尾并进入编辑模式 |
| yy | 复制当前行 |
| nyy | n 为数字。复制光标所在的向下n行,例如 20yy 则是复制 20 行(常用) |
| ynG | n为数字,复制从第n行(从1开始计数)到光标所在行之间的所有行,包括第n行和光标所在行 |
| yG | 复制从光标所在行到最后一行的所有行,包括光标所在行和最后一行 |
| y0 | 复制光标所在字符(不包括当前字符)之前的光标所在行的字符 |
| y$ | 复制光标所在字符(包括当前字符)之后的光标所在行的字符 |
| p | 将已复制的行粘贴在光标所在行的下一行/将已复制的一个字符粘贴在光标所在字符之后 |
| P | 将已复制的一行粘贴在光标所在行的上一行/将已复制的一个字符粘贴在光标所在字符之前 |
| J | 将光标所在行与下一行的数据结合成同一行 ,中间用空格分开 |
| gJ | 将光标所在行与下一行的数据结合成同一行 ,中间无空格 |
| u | 撤销前一个动作(常用) |
| 【Ctrl】r | 将撤销的动作重新执行(常用) |
| 这个 u 与 【Ctrl】r 是很常用的指令!一个是撤销,另一个则是重做一次~ | |
| . | 就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (常用) |
| r | 切换到单字符替换,输入的字符将替换光标所在处的字符,替换后回到命令模式 |
| R | 切换到替换模式,输入的字符替换光标所在处的字符,可替换多次 |
| ''a | 两个单引号,接下来的yank或paste操作使用使用寄存器a |
| ~ | 如果是大写则转换成小写,如果是小写则转换成大写 |
| g~iw | 当前词转换大小写 |
| gUiw | 当前词转换为大写 |
| guiw | 当前词转换为小写 |
| gU[Enter] | 当前行转换为大写 |
| gu[Enter] | 当前行转换为小写 |
8、其他:
| 编程相关方法 | |
| ctrl-p | 上一个补全 |
| ctrl-n | 下一个补全 |
| ctrl-e | 停止补全并回到原来录入的文字 |
| ctrl-y | 停止补全,并接受当前所选的项目 |
| >> | 右移本行 |
| << | 左移本行 |
| == | 缩进本行 |
| :!cmd | 执行shell命令 |
| :r!date | 将当前时间插入 |
| gg=G | 格式化整个文件 |
| zf | 生成折叠 |
| zo | 打开光标下的折叠 |
| zO | 循环打开光标下的折叠,也就是说,如果存在多级折叠,每一级都会被打开 |
| zc | 关闭光标下的折叠 |
| zC | 循环关闭光标下的折叠 |
| [z | 到当前打开折叠的开始 |
| ]z | 到当前打开折叠的结束 |
| zj | 向下移动到下一个折叠的开始处 |
| zk | 向上移动到上一个折叠的结束处 |
| 标记和宏 | |
| ma | 在当前光标的位置标记一个标记,名字为a |
| 'a | 单引号,到书签a处 |
| '. | 到上次编辑文件的地方 |
| :marks | 查看标记列表 |
| :delmarks | 可以删除指定标记 |
| qa | 开始录制宏a,按下q结束录制 |
| @a | 执行宏a |
| 多窗口 | |
| ctrl-w s | split window |
| ctrl-w v | split window vertically |
| ctrl-w w | switch window |
| ctrl-w q | quit a window |
| 多标签 | |
| :tabe filename | edit file in new tab |
| gt | next tab |
| gT | previous tab |
| :tabr | first tab |
| :tabl | last tab |
| :tabm n | move current tab after tab n |
三、编辑模式:
1、常用命令:
| 切换到命令模式的方法 | |
|---|---|
| Esc | 退出编辑模式,切换到命令模式 |
| Insert | 切换光标为插入/替换模式,光标将变成竖线/下划线 |
四、命令行模式:
1、切换到命令模式:
| 切换到命令模式的方法 | |
|---|---|
| Esc | 退出命令行模式,切换到命令模式 |
2、系统设置和查看:
| 系统设置和查看的方法 | |
|---|---|
| :set | 查看当前vim设置 |
| :set all | 查看所有可设置属性 |
| :set nu | 显示行号 |
| :set nonu | 取消显示行号 |
3、行选择:
| 行选择的方法 | |
|---|---|
| :n | n为数字,指定第n行 |
| :m,n | 从m行到n行,包括m行和n行 |
| :. | 当前行 |
| :$ | 最后一行 |
| % | 每一行 |
| :/pattern/ | 匹配pattern的第一行 |
4、编辑:
| 编辑常用命令 | |
|---|---|
| :w(write) | 保存 |
| :wa | 全部保存 |
|
:q(quit) |
退出 |
| :qa | 全部退出 |
| :x | 保存并退出 |
| :xa | 全部保存并退出 |
| ! | 强制执行指定指令 |
| :e! | 撤销掉所有未保存的改动 |
| :xmy | x,y是数字,将第x行的内容移动到第y行 |
| :xcoy | x,y是数字,将第x行的内容复制到第y行后 |
| :xty | x,y是数字,将第x行的内容复制到第y行后 |
| :w 【file】 | 将当前数据另存为文件 |
| :nw【file】 | n是数字,将第n行内容另存为文件 |
| :nw>>【file】 | n是数字,将第n行内容追加到文件 |
| :r 【file】 | 将文件的内容追到到当前文件光标后 |
| :nr 【file】 | n是数字,将文件的内容追到到当前文件第n行后 |
| :s/old/new/g | 在当前行中将old替换为new,g表示global,替换当前行的所有匹配 |
| :m,ns/old/new/g | 在m到n行中进行替换 |
| :%s/old/new/gc | 全文替换,c表示confirm,需要确认替换操作 |
| :!command | 暂时离开vi到指令行模式下执行command |
五、可视化模式:
1、常用操作:
| 常用操作 | |
|---|---|
| v |
进入visual字符可视化模式,操作的最小单位是一个字符,再按一次退出 |
| V | 进入visual行可视化模式,操作的最小单位是一行,再按一次退出 |
|
【Ctrl】v或 【Ctrl】V |
进入visual块可视化模式,相当于列选择模式,再按一次退出。在Windows中,【Ctrl】v可能已经被映射为粘贴操作,可以使用【Ctrl】Q进入块可视化模式。 |
| o | 在visual模式下,在已选中的区域内对角线的字符交替选中 |
| O | 在visual模式下,在已选中的区域内同一行的首末字符交替选中 |
| ~ | 在visual模式下,将已选中的文本大写转为小写,小写转为大写 |
| U | 在visual模式下,将已选中的文本转为大写 |
| u | 在visual模式下,将已选中的文本转为小写 |
| < | 在visual模式下,左移所选区域 |
| > | 在visual模式下,右移所选区域 |
| = | 在visual模式下,格式化所选区域 |
| : | 在visual模式下,对选中的区域进行操作 |
| :sort | 在visual模式下,对选中的文本进行排序 |
2、修饰符:
| i 和 a 修饰符 | |
|---|---|
| i |
内部 |
| a | 周围 |
|
iw |
单词内(不包括单词周围的空格) |
| aw | 单词周围(包括单词周围的空格) |
| i< | 选择一对“<>”中的所有字符 |
| i{ | 选择一对“{}”中的所有字符 |
| i[ | 选择一对“[]”中的所有字符 |
| i( | 选择一对“()”中的所有字符 |
| it | 选择一对html标签内部的所有字符 |
| i" | 选择一对双引号中的所有字符 |
| i' | 选择一对单引号中的所有字符 |