vim文档简介(usr_01.txt)
vim文档由两部分:
- 用户手册是基于任务的,从简单到复杂,以用户角度来写的,文件名以usr开头。例如usr_02.txt。
- 参考手册则详细描述了vim的方方面面,文件名以单个主题为名,例如filetype.txt。
vim文档中包含了大量的链接可以跳转。这些链接包括:
- 由竖条包裹起来的超链接(vim术语是标签)。
- 由单引号包裹起来的选项,一般用来配置、定制化vim编辑器。
- 由双引号包裹起来的命令。
链接之间的跳转可以在普通模式下由下面命令完成:
-
CTRL-]
跳转到超链接指定的文件段落。 -
CTRL-T
跳回到超链接跳转前的位置。 -
CTRL-O
跳回到上一次跳转前的位置。
vim命令行模式下的一些命令可以更好的查看帮助文档:
-
:set conceallevel
查看conceallevel等级。 -
:set conceallevel=0
设置vim使得超链接文字前后都由|
包裹着。 -
:set compatible?
显示当前vim是否在兼容模式下运行,正常使用vim理应在非兼容模式下运行。 -
:scriptnames
显示vim使用的配置文件列表。
vim模式简介vim file.txt
使用vim命令打开file.txt文件。~
在行首表示当前行不在文件中。
vim是个模态编辑器,意思是编辑器根据当前处于的不同模式,行为方式不同。
vim的模式一般有:正常模式,插入模式,命令模式,替换模式,可视化模式等。:set showmode
设置在vim最后一行显示当前模式。
模式切换:
- 不管当前在任何模式下,按
Esc
键回到正常模式(有时候需要按两下才能回到正常模式)。 - 正常模式下,按
:
键进入命令行模式,vim的最后一行会有-- INSERT --
字样。 - 正常模式下,按
i
键进入插入模式,vim的最后一行啥都没有,空空如也。 - 正常模式下,按
R
键进入替换模式,vim的最后一行会有-- REPLACE --
字样。 - 正常模式下,按
v
键进入可视化模式,vim的最后一行会有-- VISUAL --
字样。
常用命令(usr_02.txt)
h
向左,j
向下,k
向上,l
向右。x
删除当前字符,dd
删除一行,J
删除换行符,造成上下两行连接起来的效果。u
撤销上次编辑操作,U
执行一个新的操作,该操作就是把当前行恢复到最后一批次修改操作之前的状态,但并不是撤销操作。CTRL-R
重做上次被撤销的操作。i
从当前光标指定的字符之前的位置开始,进入插入模式,a
从当前光标指定的字符之后的位置开始,进入插入模式,A
从当前行的最后一个字符之后的位置开始,进入插入模式,o
在下方另起一行,并进入插入模式,O
在上方另起一行,并进入插入模式。[#]<command>
使用数字,在一个命令前加一个数目,表示重复该命令该数目次,例如9k
或3a!
。ZZ
保存当前所有的未保存的修改,并退出vim。q!
不保存当前所有的未保存的修改,并退出vim。
帮助简介:help
进入通用的帮助页面。:help [subject]
获取某些主题相关的帮助,例如:help x
,:help deleting
,:help index
。
帮助组合键命令,需要带CTRL-
前缀,例如::help CTRL-A
。
帮助不同模式下的命令,需要带模式前缀,例如::help i_CTRL_H
,:help v_o
,:help c_%
,正常模式下的命令不需要模式前缀。
帮助调试相关的命令,需要带>
前缀,例如::help >cont
。
帮助外部命令,需要带:
前缀,例如::help :s
。
帮助vim命令行参数,需要带-
前缀,例如::help -t
。
帮助vim编辑器选项,需要用单引号,例如::help ‘number‘
。
帮助特殊键位,需要用尖括号,例如::help i_<Up>
。
帮助寄存器,需要带quote
前缀,例如::help quote:
。
帮助vim出错信息,例如::help E37
。
帮助正则表达式符号,需要带/
前缀,例如::help /\+
。
帮助可选功能,需要带+
前缀,例如::help +conceal
。
帮助正则表达式:help pattern.txt
。
帮助vim脚本:help eval.txt
。
帮助案件映射:help map.txt
。
帮助命令定义:help command-<topic>
,例如::help command-bar
。
帮助窗口处理:help windows.txt
。
帮助vim事件:help autocommand-events
。CTRL-D
可以在vim最后一行列出半截命令所有可能的选项,供参考。<Tab>
从第一个可能的选项开始,直接补全原半截命令。
移动(usr_03.txt)
w
向后移动光标一个单词的长度,跳过单词间的空格,直接到下一个单词开始的位置。b
向前移动光标一个单词的长度,跳过单词间的空格,直到上一个单词开始的位置。e
向后移动光标一个单词的长度,直到该单词最后一个字符开始的位置。ge
向前移动光标一个单词的长度,直到前一个单词最后一个字符开始的位置。W
,E
,B
功能类似,只是认为由空白字符组成的字符串才是单词。[#]motion
重复移动指定数目的次数。$
移动光标到当前行最后一个字符开始位置,[#]$
移动到当前行之后,指定数目行的行尾,#从1开始表示当前行。^
移动光标到当前行第一个非空白字符开始位置。0
移动光标到当前行第一个字符开始位置。#G
跳转到指定行,如果不指定#,则跳转到当前文件末尾。gg
跳转到当前文件开头。#%
按百分比跳转。H
当前屏幕所显示的内容不变,只移动光标到第一行。L
当前屏幕所显示的内容不变,移动到最后一行。M
当前屏幕所显示的内容不变,移动到中间行。CTRL+G
显示当前文件名,当前文件行数,光标所在行号、列号以及占全文的百分比;有时候列号会写成2-9
表示第二个字符,第九列(第一个字符是个制表键)。:set number
在vim每一行前都显示行号,:set ruler
在vim最后一行显示列号和列号。
在选项名字前加上no
即表示取消该选项,例如::set nonumber
不显示行号。
翻屏
-
CTRL-F
向下翻一屏幕的文本 -
CTRL-B
向上翻一屏幕的文本 -
CTRL-D
向下翻半屏 -
CTRL-U
向上翻半屏 -
CTRL-E
向上翻一行 -
CTRL-Y
向下翻一行 -
zz
翻屏,直到当前行处在屏幕* -
zt
处在第一行 -
zb
处在最后一行
搜索
f<Char>
向后搜索指定字符,只搜索当前行,光标停在指定字符的开始位置。t<Char>
向后搜索指定字符,只搜索当前行,光标停在指定字符的前一个字符的开始位置。F
和T
功能类似,只是方向是向前搜索;[#]<f|F|t|T><Char>
指定搜索第几个字符。%
搜索当前行当前光标位置开始第一个括号,及其匹配的括号;括号默认只包括三种:大括号{}
、中括号[]
和小括号()
;不同版本的vim支持的括号种类不一定相同。/<Str>
从光标位置开始,往后搜索字符串;搜索后n
跳转到下一个匹配点,N
跳转到上一个匹配点;按/
之后,通过上下键可补全历史搜索命令;搜索字符串<Str>
中\<
表示单词开始的地方,\>
表示单词结束的地方。?
类似/
,只是方向上是从光标处往前搜索。*
单词匹配,从光标位置开始,向后搜索光标位置所在的单词;g*
文本匹配。#
同*
,只是方向是从光标位置开始往前。[#][g]<*|#>
搜索并跳转到第#次出现的位置。
搜索选项:
-
ignorecase
设置vim搜索时,忽略大小写 -
hlsearch
设置vim搜索时,高亮显示被搜索到的文本 -
incsearch
设置vim搜索时,敲击回车键前高亮显示搜索结果 -
wrapscan
设置vim搜索时,如果搜索到文件末尾了,接着从文件头开始继续搜索
正则表达式^
表示一行开始,$
表示一行结尾,.
表示任意一个字符。
特殊字符需要加\
前缀来转义,例如:\.
,\*
;特殊字符有:.*[]^%/\?~$
(数字键2790以外的数字键)。
跳转
一般来说,只要一个命令就能把光标位置移动超过一行,这种行为就是跳转;这包括搜索命令(不论搜索并跳转的位置是否超出本行);
vim会默认记录跳转的地方作为标记点(mark),这是无名有序号的标记点;vim还可以记录命名的标记点。
有些命令可以在标记点之间跳转:
-
``
(两个反引号,backtick,1
键左边的的键位)在相邻两个标记点之间来回跳转 -
CTRL-O
跳转到更早的标记点 -
CTRL-I
跳转到更新的标记点,同<Tab>
键 -
:jumps
列出跳转过的位置,上一次跳转的地方>
标记出来 -
m[a-z]
在当前位置记录一个命名标记点 -
`a
跳转到名字为a
的标记点处 -
‘a
(单引号)跳转到名字为a
的标记点所在行的第一个非空白字符处 -
:marks
列出所有的命名标记点
修改文本(usr_04.txt)
文本修改有三种基本方式:操作符-移动方式,可视化方式,和文本对象方式。
操作符-移动
d<motion>
删除motion
范围内的字符。c<motion>
删除motion
范围内的字符,同时进入插入模式。(cw
是个例外,因为是老vi遗留下的常用命令,所以这个命令不会删除最后的那个空白字符;dw
会删除最后那个空白字符)[#]<d|c>[#]<motion>
例如:3d2w
山删除6个单词,意思是一次删除2个单词,但是删3次。cc
删除整行,并进入插入模式,但是前置空白字符会保留。
有些操作符过于常用,所以vim专门给他们整一个单字符来表示:
-
x
同dl
-
X
同dh
-
D
同d$
-
C
同c$
-
s
同cl
-
S
同cc
r
一次性替换字符,但是模式仍保留为正常模式;[#]r<Char>
从当前光标开始#个数的字符替换成Char
。例如:3rn
将当前光标开始的三个字符替换成n
。.
重复上一次文本的修改命令;例如:先/four
寻找单词four
,再cwfive<Esc>
替换four
为five
,再n
寻找下一个four
,再.
替换一下,再n
寻找一下,再.
替换一下。
可视化
v
进入可视化模式,然后用motion
选择范围;按o
将光标切换到水平方向另一头;用d
删除选中的文本,同时回到正常模式。V
进入按行可视化模式,当前行立刻被选中,只有用motion
移动超出本行之后,才会改变选择的文本范围;按o
将光标切换到垂直方向另一头。CTRL+V
进入按块可视化模式,用motion
改变选择范围,但最终只能选中一个长方形范围的文本;按o
将光标切换到对角线另一头;按O
将光标切换到水平方向另一头。
复制粘贴
p
把刚拷贝或删除的文本粘贴进来,如果之前拷贝删除的是一行或几行,则粘贴到光标所在行的下一行,如果之前拷贝删除的只是个字符串,则粘贴到光标所在字符之后。P
功能同p
只是粘贴方向是相反的。xp
可以迅速替换两个手误打出来的字符,例如:teh
.y
复制文本;y[#]<motion>
按照#次motion的距离,拷贝跨过的文本。例如:y2w
拷贝两个单词。yy
和Y
一样,拷贝一整行。"*
剪贴板操作,"*yy
将当前行的内容复制到剪贴板里,"*p
将剪贴板里的文本粘贴到当前光标处。
文本对象:
文本对象
iw
当前光标位置所在的一个单词,不包括空格;aw
当前光标位置所在的一个单词,包括空格。例如:daw
删除当前光标位置所在的一个单词。is
当前光标位置所在的一句话不包括句号后的空格;as
当前光标位置所在的一句话,包括句号后的空格。例如:cis
删除当前光标位置所在的一句话,并进入插入模式。
其他
R
进入替换模式,每输入一个字符,就会替换当前光标下对应的一个字符,直到按Esc
结束;r
只替换一个字符。~
将当前光标下的字符变为大写,并移动到下一个字符。I
将光标移动到当前行第一个非空白字符处,并进入插入模式。A
将光标移动到当前行行尾,并进入插入模式。