参考:vim专栏http://blog.csdn.net/column/details/vim-practice.html
环境:rhel-server-7.0-x86_64-dvd
内置教程:命令vimtutor用来打开内置的vim编辑器教程的一个副本供用户学习
说明:本文中的大写字母在实践中是使用Shift+小写字母完成的
疑惑:
- 有的时候输入一个数字m后按Ctrl+Esc(也许是两次Esc)会将这个数字一直循环直到这个数字总共有m个,比如输入9后再按Ctrl+Esc(也许是两次Esc)会出现999999999,不知这是何道理
vim编辑器有以下几种工作模式:
1.命令模式
用vim编辑器打开文件后(若文件不存在则修改保存后会生成新文件这一点就没必要讲了)vim编辑器便处于命令模式
以插入的方式进入插入模式(在光标之前插入):i或Insert
以附加的方式进入插入模式(在光标之后插入):a
将光标移至行首后进入插入模式(在光标之后插入):I
将光标移至行尾后进入插入模式(在光标之后插入):A
在当前行的下方新打开一行后进入插入模式(在光标之后插入):o
在当前行的上方新打开一行后进入插入模式(在光标之后插入):O
进入替换模式:R
进入Ex模式::
进入基于字符的可视模式:v
进入基于行的可视模式:V
进入基于块的可视模式:Ctrl+v
将拖拉(复制)的内容放置(粘贴)在光标处:p
将a寄存器中的内容放置(粘贴)在光标处:"ap
进入搜索模式:(向前搜索):/
进入搜索模式:(向后搜索):?
光标移至下一个匹配项:n
光标移至上一个匹配项:N
光标后退:Ctrl+o或Ctrl+O 但后退过头了会新建一个文件,所以你懂的
光标前进:Ctrl+i或Ctrl+I
光标向左移动一位:h或Left或Backspace
光标向右移动一位:l或Right
光标移至上一个词的开头(不包含标点符号):b
光标移至上一个词的开头(包含标点符号):B
光标移至下一个词的开头(不包含标点符号):w
光标移至下一个词的开头(包含标点符号):W
光标移至行首:0或^或Home
光标移至行尾:$或End
光标向上移动一行:k或Up
光标移至当前或上一句的开头:(
光标移至下一句的开头:)
光标移至当前或上一段落的开头:{
光标移至下一段落的开头:}
光标移至首行:gg
光标移至末行:G
光标移至第n行:nG
转换光标处字符的大小写后将光标移至下一个字符:~
对当前行执行最近一个操作:.
立即向前搜索光标处的词:*
撤销一次:u
撤销到不能撤销(范围只在光标所在行):U
恢复(与撤销相反)一次:Ctrl+r
删除光标处字符:x或Delete
删除光标前字符:X
查找配对的括号()[]{}:%
往前翻一页:PageUp或Ctrl+Up
往后翻一页:PageDown或Ctrl+Down
命令模式下特有的一种命令格式:[计数]["寄存器][操作符][动作]
计数:指定动作执行次数的标量
寄存器:vim不是仅提供一个供复制与粘贴使用的剪贴板,而是提供26个常规寄存器(也叫命名寄存器,名字从a到z)和多个特殊用途的寄存器。拥有多个寄存器可以让用户更加高效地执行剪切和粘贴,而不必担心丢失数据或者过多地移动光标。
- 如果未指定要使用的寄存器,则将使用“未命名”寄存器
- 每次使用命名寄存器时,未命名寄存器也会更新
- 当使用命名寄存器的大写版本时,被删除或拖拉(复制)的文本将附加到该寄存器,而不是覆盖它
- 特殊寄存器中,有10个数字编号的寄存器(名字从0到9)。0寄存器始终拥有最近拖拉(复制)的文本的副本,而1寄存器则具有最近删除的文本的副本。当新的文本被更改或删除时,1寄存器的内容将转移到2寄存器中,2寄存器的内容将转移到3寄存器中,以此类推
- 与命名寄存器不同,数字编号寄存器的内容不会在会话之间保存
操作符:按下操作符后vim编辑器进入等待输入动作的状态(p除外,它后面不跟动作),此时可以按Esc退出这种状态
删除操作符:d 按两下删除整行,D表示从光标处删除到行尾
替换操作符(删除(其实是将文本放到了未命名寄存器中)后自动进入到插入模式):c 按两下替换整行,C表示从光标处替换到行尾
替换操作符(直接替换):r 后面跟的动作就是要替换的新字符。另一种选择是进入替换模式
拖拉(复制)操作符:y 按两下复制整行
放置(粘贴)操作符:p 将内容放置(粘贴)于光标后或在当前行的下方另开一行然后放置(粘贴)内容(如果粘贴的是行范围的数据的话),P表示将内容放置(粘贴)于光标前或在当前行的上方方另开一行然后放置(粘贴)内容(如果粘贴的是行范围的数据的话)
动作:通常是控制光标移动的动作,可以附加i前缀或a前缀,分别表示选择inner或a版本的移动
比如:
光标左移两位:2h
从光标处删除到行尾:d$或D
删除光标处的字符(不包含周围的任何空白区)并用被删除的内容覆盖掉a寄存器中的内容:"ax
接上一步,删除光标处的一个词(不包含周围的任何空白区)并将被删除的内容附加到a寄存器中:"Adiw
接上一步,放置(粘贴)a寄存器中的内容到光标处:"ap
将光标处的字符替换为“tt”:2rt
向下拖拉(复制)3行:3yy
向下拖拉(复制)3行并覆盖到t寄存器中:3"tyy
一次放置(粘贴)6遍到光标前面或当前行上方:6P
一次放置(粘贴)6遍s寄存器中的内容到光标前面或当前行上方:6"sP
从光标删除到后三句的开头后自动进入到插入模式:3c)
替换整个当前词,而不是仅仅从光标位置开始,但不包含周围的任何空白区:ciw
替换整个当前词,而不是仅仅从光标位置开始,但包含周围的任何空白区:caw
2.插入模式
标尺(最底行)显示--INSERT--。在该模式下,可以正常使用所有字符键与一些控制键
返回命令模式:Esc
进入替换模式:Insert
光标移至上一个空格或换行符之后:Ctrl+Left
光标移至下一个空格或换行符之后:Ctrl+Right
3.替换模式
标尺(最底行)显示--INSERT--。在该模式下,可以用输入的字符替换光标处字符
返回命令模式:Esc
返回插入模式:Insert
光标移至上一个空格或换行符之后:Ctrl+Left
光标移至下一个空格或换行符之后:Ctrl+Right
4.扩展命令模式(Ex模式)
标尺(最底行)以:开头并等待键入扩展命令,然后通过按Enter键执行命令
取消当前命令或返回命令模式:Esc 常见的做法是按两下Esc(或更多下)以确保返回至命令模式。将开头的冒号用Backspace删掉也可以返回命令模式
写入(保存)文件::w
以其他文件名保存当前文件(就是传说中的“另存为”)::w (路径名+)文件名
退出vim编辑器::q
写入(保存)文件并退出vim编辑器::x或:wq
有些情况下需要强制进行操作(比如保存对一个只读文件的修改):
强制写入(保存)文件::w!
其他强制操作也一样,在原来命令的后面加!
查看命令的信息::命令 比如查看set命令的信息::set
查看高亮色设置::highlight
为所有行添加行号::set number或:set nu
取消行号::set nonumber或:set nonu
执行外部命令::!命令 如列出当前目录内容::!ls或:!dir
将外部命令的输出插入到光标处::r !命令
将另一文件中的内容插入到光标处::r (路径名+)文件名
Ex模式下特有的一种用来搜索和替换的命令格式:[range]s/pattern/string/flags
range:可以是行号(42)、行号范围(1,7表示第1-7行)、%(当前文档中的所有行),缺省表示在当前行进行搜索和替换
pattern:被搜索和替换的字符串,支持正则表达式和通配符
string:替换后的新字符串
flags:替换选项
替换一行中多个位置上的pattern:g
使当前搜索区分大小写:i
5.可视模式
标尺(最底行)显示--VISUAL--或--VISUAL LINE--或--VISUAL BLOCK--,分别表示基于字符、基于行和基于块。在该模式下,任何光标移动将选择文本。也可以与搜索模式相结合。
返回命令模式:Esc
进入基于字符的可视模式:v 再次按v返回命令模式
进入基于行的可视模式:V 再次按V返回命令模式
进入基于块的可视模式:Ctrl+v 再次按Ctrl+v返回命令模式
进入搜索模式:(向前搜索):/
进入搜索模式:(向后搜索):?
按回车后将选中光标处与第一处匹配项之间的文本,之后返回可视模式
删除选中的内容:d
将选中的内容保存到另一不存在的文件中:先按:,最底行会出现:'<,'>,然后输入w (路径名+)文件名,最后Enter
将选中的内容拖拉(复到)后返回到命令模式:y
将选中的内容拖拉(复制)到a寄存器中后返回到命令模式:"ay
6.搜索模式
标尺(最底行)以/(向前搜索)或?(向后搜索)开头并等待键入正则表达式,然后通过按Enter键执行搜索后返回命令模式
返回命令模式:Esc