~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".


~vim简要教程
https://blog.siantao.top/手册/vim/~vim简要教程/
作者
玉水仙楊
发布于
2022年5月1日
许可协议