vim入门#
功能越强大的工具,往往使用起来也越复杂,不过有一个辅助我们快速入门的命令,那就是 vimtutor 。
vimtutor 默认使用英文进行入门教学,不过它也提供了中文版本的交互教程,执行以下命令即可:
vimtutor zh_cn
该教程会带你快速了解 vim 的基本操作,熟练掌握这些操作后,你就可以开始使用 vim进行编辑工作了。
笔者会对这个教程进行辅助说明,帮助你更好的理解 vim 的使用方法。
重要
在 vim 中,有多种不同的模式,默认进入普通(normal)模式,在 vimtutor互动教程中,可能误按键位进入了其它模式,这时候可以按 ESC 回到普通模式。
请确认当时输入法模式是英文输入模式,且没有打开大小写锁定。
请尝试按下 i 键,屏幕左下方会出现 -- INSERT -- ,这时候就是进入了插入模式,按下 ESC 退出插入模式。
请尝试按下 v 键,屏幕左下方会出现 -- VISUAL -- ,这时候就是进入了可视模式,按下 ESC 退出可视模式。
因此,在 vimtutor 互动教程中,如果你误按键位进入了其它模式,可以按 ESC退出,教程大部分内容都是在普通模式下进行的,普通模式左下角没有任何文字。
移动光标#
请按教程提示,使用对应键位移动光标,vim 中当然也可以使用方向键移动光标,但是方向键是远离主键区的,而 h j k l 是主键区的,这样可以更快的移动光标。
请注意在操作时,一定要保证输入法是英文状态且没有打开大小写锁定,操作前可多按几次 ESC确保当前是普通模式。
如果对光标的移动没有疑问了,可以将光标移动到下一小节进行学习。
vim的进入和退出#
按交互教程提示,执行 :q! 退出 vim,这个命令是不保存修改内容强制退出,退出后使用 vimtutor zh_cn 重新进入教程,不加 zh_cn 参数则进入英文教程。
备注
你可以把 q 理解成 quit , ! 理解成 强制 ,所以 :q! 就是强制退出 。
你可以尝试执行以下内容,理解 vim 的进入和退出, vimtutor 仅是教程命令,实际上没有对文件进行编辑的能力:
# 使用vim编辑系统分区文件
vim /etc/fstab
# 退出vim,退出前可按一下ESC键,确保当前是普通模式
:q!
如果对进入和退出 vim 没有疑问了,可以将光标移动到下一小节进行学习。
文本编辑之删除#
按交互教程提示,使用 x 删除光标所在字符,最终修正好的句子如下:
是不是感觉比 nano 更好用了呢?更强大的功能还在后面,接着进入下一小节吧。
文本编辑之插入#
插入模式是 vim 中最常用的模式,按交互教程提示,将教程中的缺失语句补充到与下一行正确的语句一致,进入插入模式后,h j 等移动光标的键位会失效,只能使用方向键移动光标,或者按 ESC 退出插入模式,再使用 h j 等移动光标的键位。
文本编辑之添加#
添加动作与插入动作类似,不过添加动作是在光标所在字符的后面添加字符,这里值得注意的是,在普通模式下进入编辑模式,存在以下区别:
i 进入插入模式,光标在当前字符上
a 进入添加模式,光标在当前字符的后面
A 进入添加模式,光标在当前行的行尾
I 进入插入模式,光标在当前行的行首
备注
i 表示 insert ,即插入,光标在当前字符上
a 表示 append ,即添加,光标在当前字符的后面
这样来理解这两个字母的含义
因此,进行编辑模式时,按键大小写是有区别的,这里需要注意。
编辑文件#
由于 vimtutor 是一个交互式教程,所以它并没有对文件进行编辑,这一小节需要我们在XSHELL中再开一个窗口,进行操作:
# tutor是我们要操作的文件,它并不存在,但vim会自动创建
vim tutor
# 按i进入插入模式,随便输入一些内容
I am learning vim.
# 按下ESC键退出编辑模式,保存内容并退出vim
:wq
# 查看新创建的文件内容
cat tutor
备注
: 是进入命令模式的前缀
w 表示 write ,即写入
q 表示 quit ,即退出
这样就能理解 :wq 的含义了,即 write and quit 。
如果你的操作步骤没有出错,那么你的屏幕输出应该如下:
提示
第一讲内容已经结束,交互教程进行了小结,其实内容非常少,这对于聪明好学的你来说,是不是小菜一碟呢?
删除类命令#
按交互教程提示,使用 dw 随便删除一些单词,不过这只对英文内容生效,如果对中文内容使用,它会删除整个短句,而非单词。好在编程脚本和系统中的配置文件都是英语的,所以这个功能对我们来说是非常有用的。
备注
d 表示 delete ,即删除
w 表示 word ,即单词
这样来理解 dw 的含义。
更多删除类命令#
按交互教程提示,使用 d$ 删除到行尾,注意是将光标移动到 twice. 后的空格处,此时使用 d$ 删除到行尾,就只剩下 ---> Somebody typed the end of this line twice. 。
怎么样,是不是比起往常图表界面下鼠标选中删除更加高效呢?
关于命令和对象#
此小节罗列了 w,e,$ 三种动作(motion),此外还有 b ,0 两种动作,请将光标移动到上一小节的英文内容中,尝试这5种动作会有什么效果。
而将这五个动作与 d 指令结合,就会有更多的功能,比如:
dw 从光标处起向右删除一个单词
de 从光标处起向右删除到单词末尾(将光标置于单词中间测试, 看和``dw``有何不同)
d$ 从光标处起删除到行尾
db 从光标处起向左删除一个单词
d0 从光标处起删除到行首
切记以上组合仅对英文内容生效,对中文内容使用并不会达到预期效果。
备注
e 表示 end ,即末尾
b 表示 back ,即反面
这样来理解 e 和 b 的含义。
使用计数指定动作#
按交互教程提示,使用 2w 将光标移动到第二个单词的开头,再使用 3e 将光标移动到第三个单词的末尾,这样就可以快速移动光标到指定位置。
不仅如此,你还可以尝试与上一小节中的 b 结合使用,可以尝试一下会发生什么。不过不要和 0,$ 结合使用,因为它们是移动到行首和行尾的,不需要计数。
还有,你可以尝试一下 3h , 4j , 5k , 6l ,看看会发生什么。
使用计数以删除更多#
按交互教程提示,使用 2dw 删除两个单词,然后探索使用这种方式,将句中的大写单词全部删除。
怎么样,这样一来删除功能是不是更加强大灵活了呢?更多组合可以自行尝试,如 3db。
操作整行#
按交互教程提示,使用 dd 删除整行,以及 2dd 删除两行,这样就可以快速删除多行内容。
学完这几小节的内容,是不是对删除类的操作已经了如指掌了呢?
撤消类命令#
按交互教程提示,使用 x 删除错误的字母,然后按``u`` 撤消上一步操作,使用 x 删除多处错误的字母, 此时按下大写的 U 可撤消整行操作, Ctrl + r 则可以恢复撤消操作,多次按 Ctrl + r 可以恢复多次撤消操作。
备注
u 表示 undo ,即撤消
U 表示 undo line ,即撤消整行
Ctrl + r 表示 redo ,即恢复
这样来理解 u , U , Ctrl + r 的含义。
提示
第二讲的内容已结束,阅读第二讲的小结,回顾一下这一讲的内容,到这里你已经掌握了vim 的基本操作,可以应付日常工作中的文本编辑了。
置入类命令#
按交互教程提示,使用 dd 删除整行,然后使用 p 粘贴到指定位置,将错误的文字顺序调整成正确的,即 abcd 的顺序。
备注
p 表示 paste ,即粘贴
这样来理解 p 的含义。
文本行删除后,被删除的文本行被保存到了 vim 的寄存器中,然后可以使用 p将其粘贴到指定位置。
寄存器 位于CPU中,用来暂时存放数据。
替换类命令#
按交互教程提示,使用 r 替换光标所在字符,将第一行中错误的字符替换成正确的字符,使它保持与下一行的语句一致。
发现了吗?r 命令只能替换一个字符,输入替换字符后,自动回到普通模式。而大写的R 命令可以替换多个字符,输入替换字符后,会一直处于替换模式,直到按下 ESC 退出,可以自行尝试一下 R 命令的作用。
备注
r 表示 replace ,即替换
这样来理解 r 的含义。
更改类命令#
按交互教程提示,使用 cw 删除光标处到词末尾的字符,并自动进行插入模式,输入正确的单词,将错误的单词更改成正确的,然后按 ESC 退出插入模式,如此以往,将整行的错误单词更改成正确的,使它保持与下一行的语句一致。
cw 直接将删除动作和插入动作结合在一起,这样就可以快速更改文本内容。
备注
c 表示 change ,即更改
这样来理解 c 的含义。
使用c更改更多#
按交互教程提示,使用 c$ 删除光标处到行尾的字符,并自动进行插入模式,输入正确的内容,使它保持与下一行的语句一致。
提示
第三讲的内容已结束,阅读第三讲的小结,回顾一下这一讲的内容,你的 vim 技能更上一层楼了,成为大神已经指日可待了。
定位及文件状态#
在按交互教程提示操作前,一定要确认好当前处于普通模式,即按 ESC 键后所处的模式。
按下 Ctrl + g 可以查看文件状态,包括文件名,行号,当前行与文件总行数的百分比,以及光标所在行的字符顺序号。
如上图所示,文件名为 tutortGZCaC,位于于 /tmp 目录下,当前行号为499,总行数为996,当前位置处于全文中的50%,光标所在行的字符顺序号为3。vimtutor每次都会在 /tmp 目录下创建一个新文件,文件名为 tutor 后面跟着一串随机字符,退出 vimtutor 后,这个文件会被自动删除。
记住 499 这个行号,下面会用到。 ruler 处的内容可暂时忽略,后面会有相关内容介绍。
按下 G 可以直接跳转到文件末尾,按下 gg 可以直接跳转到文件开头,按下 499G可以直接跳转到第499行,也就是刚刚记住的行号,记得区分大小写,同时要处于普通模式下。
备注
g 表示 go ,即跳转
这样来理解本小节的相关内容。
搜索类命令#
按交互教程提示,使用 / 进行搜索,输入 errroor ,然后按下回车键,它会自动跳转到第一个匹配的单词,然后按下 n 可以跳转到下一个匹配的单词,按下 N可以跳转到上一个匹配的单词。
? 与 / 的功能相同,只是搜索方向相反,Ctrl+o (小写字母o)可以跳转到上一个位置,Ctrl+i (小写字母i)可以跳转到下一个位置。
当在下文搜索不到 errroor 时,按下 n 会提示 search hit BOTTOM, continuing at TOP ,表示下文中已搜索不到匹配文字,将继续从文件头部开始搜索。
配对括号的查找#
按交互教程提示,将光标移动到 ( 上,按下 % ,它会自动跳转到与之匹配的 ) 处,再按下 % ,它会跳转回 ( 处。
这个功能在编程中非常有用,可以快速定位到配对的括号处,这样就可以快速定位到代码块的开始和结束。
替换命令#
按交互教程提示,使用 :s/thee/the/g 进行替换,g 表示全行替换,不加 g 则只替换第一个匹配的单词,gc 表示交互式替换,会提示是否替换。
:s 是替换命令的前缀, thee 是要被替换的单词, the 是替换后的单词,g 表示全局替换。
还有一种用法是指定范围进行替换: :560,574s/thee/the/g,表示从第560行到第574行进行替换,你可以按 u 撤销刚刚的改动,然后尝试一下这个命令。
对整个文件进行替换,可使用 % ,如 :%s/thee/the/g 表示整个文件进行替换,你甚至可以与其它命令结合,如 :%d 可以删除整个文件的内容。
提示
第四讲的内容已结束,阅读第四讲的小结,回顾一下这一讲的内容,你已经掌握了 vim的高级操作,是不是感觉自己已经成为 vim 大神了呢?
在vim内执行外部命令的方法#
按交互教程提示,输入 :!ls ,然后按下回车键,它会显示当前目录下的文件,然后再按回车,可加到 vim 中。
关于保存文件的更多信息#
按交互教程提示,输入 :w 保存文件,输入 :w TEST 保存文件为新文件。为了验证这一点,你可以使用 :q! 退出 vim ,然后使用 vim TEST 查看文件内容,是否和你保存时的内容一致。
验证完后退出 TEST 文件,然后再次使用 vimtutor zh_cn 进入 vimtutor ,然后执行 640G 回到刚刚的位置附近,执行 :!rm TEST 删除 TEST 文件。
提示
rm意为remove,是一个删除命令,可用了删除文件和文件夹,更多信息可参考rm --help 和 man rm。
一个具有选择性的保存命令#
按交互教程提示,按下 v 进入可视模式,然后使用 j k 移动光标,移动到第五个条目上,按下 : ,然后输入 w TEST,会将选中的内容保存到TEST 文件中。(按下 : 后,会出现 :'<,'> ,不要修改它,直接在它后面输入 w TEST )
可视模式下选中的文件也可以和其它动作结合,如按下 d 键会删除选中的内容。
提取和合并文件#
按交互教程提示,使用 :r TEST 将 TEST 文件的内容插入到当前文件中,你甚至可以使用 :r !ls 将 ls 命令的输出插入到当前文件中。可自行尝试一下这两个命令。
如上图中的红色框内的内容,就是通过 :r (指read)命令插入到当前文件中的内容。
提示
第五讲的内容已结束,阅读第五讲的小结,回顾一下这一讲的内容,你的 vim技能更进一步了。
打开类命令#
按交互教程提示,按下 o 在当前行的下方打开一个新行,然后输入一些内容,按下 ESC 退出插入模式,然后按下 O 在当前行的上方打开一个新行,输入一些内容,按下 ESC 退出插入模式。
即小写 o 在光标行的下方打开新行,并进入插入模式,大写 O 在光标行的上方打开新行,并进入插入模式。
附加类命令#
这一小节的内容与 文本编辑之添加 小节中的内容雷同,可自行再次尝试一下。
另外一个置换类命令的版本#
这一小节的内容与 替换类命令 小节中的内容雷同,可自行再次尝试一下。
复制粘贴文本#
按交互教程提示,按下 v 进入可视模式,然后移动光标复制指定内容,之后粘贴到指定位置,甚至可以使用 yw 来复制单词,自行尝试一下吧。
设置类命令的选项#
按交互教程提示,输入 :set ic , :set hls is 打开忽略大小写,高亮搜索,忽略大小写搜索功能,此时输入 /ignore 进行搜索,它会忽略大小写进行搜索并进行高亮显示。
要关闭相关功能,只需要加上 no 前缀即可,如 :set noic , :set nohls ,:set nois 。
提示
第六讲的内容已结束,阅读第六讲的小结,回顾一下这一讲的内容,又增加了不少vim 的高级操作技能了。
获取帮助信息#
vim 安装后自带了帮助文档,按交互教程提示,输入 :help 可以查看帮助文档,按下 CTRL+W 键可在窗口间来回跳转, :q 可关闭帮助窗口。
核心使用技巧:
:help user-manual 查看用户手册
找到需要了解的内容,如 Moving around ,那就输入它前面的章节名字::help usr_03.txt 进行查看
:help options.txt 可查看所有的选项,如上面提到的 ic , hls , is 等选项。
查询具体选项的帮助内容,如 :help hlsearch 或缩写 :help hls 查看高亮搜索的帮助内容;查询具体的可选参数,如 set hls? 查看高亮搜索的可选参数。
使用 CTRL+O 可以返回上一个帮助页面, CTRL+I 可以前进到下一个帮助页面
使用 CTRL+D 可以向下翻半页, CTRL+U 可以向上翻半页, CTRL+B 可以向上翻整页,CTRL+F 可以向下翻整页, CTRL+E 可以向上滚动一行, CTRL+Y 可以向下滚动一行,这些快捷键在 vim 中都是通用的。
创建启动脚本#
vim的诸多功能并没有默认开启,不过可以通过配置文件 vimrc 来设置,开启另一个窗口终端,按交互教程提示,在命令行(不是在 vimtutor 中)输入 vim ~/.vimrc 按下回车,然后在打开的 vim 窗口中输入 :r $VIMRUNTIME/vimrc_example.vim,它将会读取一个示例配置文件:
接着使用 :wq 保存并退出,之后 vim 将自动支持搜索高亮等功能。可通过 :help vimrc-intro 了解 vimrc 的更多内容。
提示
~ 是Linux系统环境中的特殊变量,它表示当前用户的家目录。执行以下命令验证:
cd ~
# 看一下当前目录
pwd
# 切换到test用户
su - test
# 执行以下命令
cd ~
# 看一下现在在哪个目录
pwd
你会发现 ~ 表示的是当前用户的家目录。所以 vim ~/.vimrc 在哪儿你知道了嘛?
pwd 意为print working directory,即打印当前工作目录,它会显示当前所在的目录。
而 . 开头的文件名,是Linux系统中的隐藏文件,使用 ls -a ~/ 就可以看到刚刚的配置文件了。
$VIMRUNTIME 是 vim 的运行时目录,它是一个环境变量,表示 vim 的运行时目录,Linux系统中遇到以 $ 开头的字符,一般都是变量,因为你可以通过 echo $VIMRUNTIME 查看它的值:
这下知道 ~/.vimrc 中的内容是从哪里来的了吧?
补全功能#
vim 中还有命令补齐功能,和命令行中的 TAB 键补全功能类似,按交互教程提示,输入 :set nocp 关闭兼容模式(在Linux中大多数情况下是关闭着的),然后输入命令的一部分,按下 Ctrl+d 或 Tab 键,它会自动补全命令。比如输入 !ec 然后按下Ctrl+d 或 Tab 键,它会自动补全为 !echo。比如输入 :help user-m ,:help usr_01,这些都是可以补全的。
在 vim 中,还有历史记忆功能,按下 : 后,按 Ctrl+p 可以向上查找历史命令,按 Ctrl+n 可以向下查找历史命令,这样就可以快速查找到之前输入过的命令。
提示
第七讲的内容已结束,阅读第七讲的小结,回顾一下这一讲的内容,你已经掌握了 vim的知识拓展技能,是不是感觉自巼成为 vim 大神了呢?