~vim简要教程
vim简要教程
制作这篇文章主要是为了学习vim,选取重点内容,方便以后回顾。
学习vim重要的是技能而不是知识,多动手实操才能掌握。
快速参考详见:vim中文帮助网页
vim资源收集:https://blog.easwy.com/archives/vim-resources-collection/
vim文档有两部分,用户手册和参考手册。
推荐下载Linux版本的vimcdoc并安装,在vim中输入":help@cn"开启阅读。
使用向导:在shell上输入"vimtutor zh_cn"开始使用向导学习vim基本操作。
注意:需要关闭VI兼容模式,没有特别说明,以下都是在普通模式下操作。
基础教程
光标移动
移动:使用方向键,或者"hjkl"分别进行左下上右移动(推荐)。
移动动作:
| 移动单词 | 行首行尾 | 指定字符 |
|---|---|---|
'w'移动光标到下一个单词首部 |
'$'移动到行尾 |
按'f'再输入字符以移至指定字符上 |
'e'移动到当前单词末尾 |
'0'移动到行首 |
按"tx"移动到指定字符前一个位置 |
'b'移动到当前单词首部 |
'^'移动到当前行的第一个非空字符 |
按"Fx"或"Tx"反向移动 |
"ge"移动到上一个单词末尾 |
'$'前面可以加数字以表示移动多行 |
|
'W','E','B'和"gE"是按字串移动 |
这些可以加数字重复,可以按';'重复,按','相反方向重复。
定位及行跳转:
| 行跳转 | 显示位置 | 视野内移动 |
|---|---|---|
'G'跳转到文件最后一行 |
"Ctrl-G"显示光标位置及文件信息 |
'H'移至上部 |
"gg"跳转到文件首行 |
":set number"显示所有行号 |
'L'移至下部 |
输入行号再输入'G'跳转到行号(例如"3G") |
":set ruler"显示光标位置 |
'M'移至中部 |
输入数字再输入'%'跳转到文件百分比位置 |
滚屏操作:
| 作用 | 正向 | 反向 | 视野内滚屏 |
|---|---|---|---|
| 滚全屏 | "Ctrl-F"或"PgDown" |
"Ctrl-B"或"PgUp" |
"zt"滚屏使光标位于顶部 |
| 滚半屏 | "Ctrl-D" |
"Ctrl-U" |
"zz"滚屏使光标位于中间 |
| 滚一行 | "Ctrl-Y" |
"Ctrl-E" |
"zb"滚屏使光标位于底部 |
编辑操作
操作符和动作、文本对象可以有多种组合,并且可以和数字搭配使用。
| 操作符 | 动作 | 文本对象 | 组合举例 |
|---|---|---|---|
'c' 修改 |
'^' 软行首 |
需要加表范围的前缀: (例如"iw"表示当前单词) |
c2w |
'd' 剪切 |
'0' 硬行首 |
'i'(inner,里面)和'a'(around,包围) |
d3$ |
'y' 复制 |
'$' 行末 |
文本对象主要有: (注:"aw"还包括其后一个空格) |
yaw |
"fx","Fx" 查找字符 |
'w'是单词,'s'句子,'p'段落,及对应大写 |
2ds |
|
"tx","Tx" 到达字符 |
单引号和双引号,表示当前包围体以及各种括号 | ci( |
|
'w','b','e',"ge"及对应大写 |
'(',')','[',']','{','}','<','>' |
viw |
进入插入模式
编辑文本:按'i'以在光标前插入文本;按'I'以在行首非空字符前插入文本;按'A'以在行末添加文本;按'a'以在光标後插入文本;按'o'在新建下一行并进入插入模式;按'O'新建上一行并进入插入模式。
更改操作:
更改操作符'c'和剪切操作符'd'类似,但是会进入插入模式。
不一致的是"cw"(删除光标到单词尾并进入插入模式,和"ce"一样)。
像"dd"一样,"cc"修改整行(但保留缩进)。
'~'命令修改当前选中字符大小写并移至下一个字符(通常不是操作符,除非设置了'tildeop')
普通模式操作
删除操作:
最简单的是按'x'以删除光标所在字符,通常以'd'和动作完成删除操作。
"dw":删除单词(不包括下一个单词的第一个字符)"de":删除单词(光标到单词末尾)"d$":删除光标到行尾的字符"dd":删除整行
注:直接按动作键(不按'd'键)会相应地移动光标。数字'0'移动光标到行首,'$'移动光标到行末。
置换操作:
使用'd','x'等命令删除文本,这些文字会存入寄存器,可以通过'p'或'P'粘贴。
'p'命令粘贴到光标之后,而'P'命令粘贴到光标之前。
'p'将最后一次删除的内容插入到光标之後(如果是"dd"删除的行,则下一行插入此行);输入'r'和一个字符以替换光标上的字符(换行符特殊,例如"4r"再回车则替换四个字符为一个换行符),输入'R'进入替换模式(替换多个字符,Esc键退出)。
可以通过Insert键在插入模式和替换模式间切换,在替换模式下可以用Backspace键恢复字符。
复制粘贴:使用'y'操作符复制文本,使用'p'操作符粘贴文本,按'v'进入可视模式选取文本(选中会高亮显示),然後按'y'复制,再按'p'粘贴到光标後;'y'还可以与动作命令一起使用,例如"yw"复制一个单词(包括空格)。
使用系统剪切板:
需要支持clipboard才能工作,通过'*'或'+'寄存器操作,例如"*y复制而"*p粘贴(双引号加寄存器作前缀)。
插入内容:输入":r filename",在光标行下插入filename的内容;也可以输入":r !shellcmd"插入shell命令的输出。
进入可视模式
用'v'命令进入可视模式,可以使用移动命令选中文本。
按行选择:使用'V'进入按行选择的可视模式。
列块选择:使用"Ctrl-V"进入列块选择可视模式,可以很方便处理表格。
移动到另一端:使用'o'移动到对角上,列块模式下还可以使用'O'移动到同行另一端。
其他编辑命令
撤销命令:'u'撤销最后执行的命令,'U'撤销对整行的更改,"Ctrl-R"重做命令(可撤销'u','U'等命令)。
终止操作:按"<Esc>"将回到普通模式,会终止某些操作。
重复命令:
'.'命令重复任何除'u'(撤销),"Ctrl-R"(重做)和冒号命令之外的修改。
动作命令前可以输入数字以重复,例如"3e"(光标正向移动到第三个单词末尾),操作命令也可以使用数字重复,例如"d2w"(删除两个单词),"2dd"(删除两行),"c2w"(更改两个单词)。
保存和关闭
保存文件:输入":w filename"保存当前文件到filename,当然可以不输入文件名,":w"保存当前文件。按'v'进入可视模式并用方向键选择多行,然後输入":w filename"将选择的行保存。
提示:可视模式下选择区域,然後可以用操作命令,例如'd'删除选区。
关闭窗口:
":q<Enter>"关闭窗口":q!<Enter>"强制关闭窗口且不保存":wq<Enter>"保存并关闭窗口,或者使用"ZZ"命令
窗口跳转:两次组合键"Ctrl-W"可以在窗口之间跳转,也可以组合键"Ctrl-W"加一个方向键"hjkl"按方向切换窗口。
查找命令
查找配对括号:'%'查找一个括号(包括"()","[]","{}"),如果光标在括号上,则查找一个配对的括号,'%'命令还可以查找"#if"配对的"#endif"。
搜索类命令:输入'/'(正向查找)或'?'(反向查找)再输入正则表达式并回车以查找,然後,按'n'继续查找,按'N'相反方向继续查找。
注意:正则表达式中,字符".*[]^%/\?~$"有特殊意义,需用'\'转义;'^'匹配行首,'$'匹配行尾,'.'匹配任何一个字符。
取单词查找:'*'取光标上的单词进行正向查找,'#'取光标上单词反向查找。"\<"匹配词首,"\>"匹配词尾,'*'和'#'查找方式是匹配完整单词(包含词首词尾)。
替换类命令:'s'命令正则替换字符串,如下:(将old替换为new)
":s/old/new"替换光标所在行的第一个匹配":s/old/new/g"替换光标所在行的所有匹配":#,#s/old/new/g"替换两行之间的所有匹配('#'是行号)":%s/old/new/gc"替换整个文件中的所有匹配,并对每一个匹配询问是否替换
搜索相关设置:
- ignorecase,
输入
":set ic"开启,要禁用则输入":set noic" - hlsearch, 输入
":set hls"开启,匹配结果都高亮显示 - incsearch, 输入
":set is"开启,实时高亮显示查找结果 - wrapscan,
默认on,输入
":set nowrapscan"关闭循环查找 - 一次查找中忽略大小写,在正则表达式末尾加上
"\c"即可 - 临时关闭查找的高亮显示,输入
":nohlsearch"即可
执行命令:内部命令以':'开始,而外部命令以":!"开始(例如,输入":!ls"将在shell窗口显示当前目录的文件)。
其他操作
编辑vimrc:vim的设置可以写在vimrc中,输入":edit ~/.vimrc"(Unix)或":edit $VIM/_vimrc"(Windows)编辑,vimrc示例文件在以"$VIMRUNTIME/vimrc_example.vim"中。
自动补全:首先输入":set nocp"关闭兼容模式,补全功能需先输入前几个字符,按"Ctrl-D"显示匹配的列表(可以跳过),再按"<Tab>"就会补全,文件名和命令都可以自动补全。
历史记录:在命令行模式下,具有历史记录,可以通过"Up","Down"键将以前输入的命令上行(窗口最后一行供输入命令)。
标签跳转:
两个'|'之间的单词可以对应一个标签,光标置于单词上(单词可以用),
组合键"Ctrl-]"可以跳转到标签位置,
组合键"Ctrl-T"跳回来,也可以"Ctrl-O"跳回来。
使用鼠标:":set mouse=a"启用对鼠标支持(用于xterm或GUI),标签跳转只需双击。
获取帮助:使用":help word"跳转到对应帮助主题:
| 类别 | 前缀 | 例子 |
|---|---|---|
| 普通模式命令 | :help x |
|
| 可视模式命令 | v_ |
:help v_u |
| 插入模式命令 | i_ |
:help i_<Esc> |
| 命令模式命令 | : |
:help :quit |
| 命令行编辑 | c_ |
:help c_<Del> |
| vim命令参数 | - |
:help -r |
| 选项 | ' |
:help 'textwidth' |
| 正则表达式 | / |
:help /[ |
查找帮助:用":helpgrep word"通过正则匹配查找,跳转到首个匹配,用":cnext"跳转到下一个。
上述内容来自vimtutor,足够简单地使用vim,以下将补充更详尽的内容。
源码阅读
未整理
查看当前模式:输入":set showmode"启用,在进入其他模式(插入、可视、命令、替换)时,在窗口最后一行会有提示。
连接两行:'J'连接光标所在行和下一行(换行符替换为空格)。
交换两个字符:通过"xp"命令可以交换当前光标及之后的两个字符。
使用标记:行跳转(不包括行内跳转和"jk"移动)会自动记录标记,以便来回跳转,":jumps"命令输出可以跳往位置的列表。
"Ctrl-O"跳转到一个较新的地方。
"Ctrl-I"跳转到一个较老的地方。
输入两个`(反引号)或两个单引号"'"可以在最近历史记录的两处来回跳转。
有名标记:文本中可以自定义26个小写字母的标记,输入'm'再输入自定义标记名(例如"ma")在当前光标位置放置标记,输入`(反引号)或者"'"(单引号)再输入自定义标记名则跳转到标记位置,用":marks"获取所有标记列表。
特殊标记:
"'"(单引号) 跳转前的光标位置'"'(双引号) 最后编辑的光标位置'['最后修改的开始位置']'最后修改的结束位置x 表示 dl (删除当前光标下的字符)
X 表示 dh (删除光标左边的字符)
D 表示 d$ (删除到行尾)
C 表示 c$ (修改到行尾)
s 表示 cl (修改一个字符)
S 表示 cc (修改一整行)
阅读至"usr_05.txt".