Linux文本编辑器 – vim
正文开始@Assassin
目录:
经典老图:
vim高清pdf
1. vim基本介绍:
vi/vim是多模式文本编辑器,其代码补全、编译及错误跳转等方便编程的功能十分丰富;vim是vi的升级版,vim兼容vi的所有指令,且在vi的基础上增加了许多新特性;例如语法加亮,可视化操作;vim具有跨平台的特性,不仅可以在终端运行,也可以运行于Windows,MacOS等操作系统;
vim在日常做开发的时候,主要解决编写代码的问题,本质上就是一个多模式的文本编辑器;vim与IDE只能说各有千秋,IDE对比vim自然有更为强大的代码补全,编写操作便捷,易于多文件管理的优点,同样地,vim相比于IDE也有更强的代码跳转,批量化操作快捷,更轻量化的优点,更为重要的是vim也可以进行相关配置以达到或趋于IDE同样的效果;
vim常用的有4种模式:命令模式/普通模式,插入模式,底行模式,可视化模式;
- ① 命令模式(Normal mode):
在命令模式下,用户可以控制屏幕光标的移动,字符、字或行的删除,复制粘贴,剪贴,修改等操作;命令模式也是Vim启动后的默认模式; - ② 插入模式(Insert mode):
只有在插入模式下才能进行字符输入,插入模式是使用最频繁的编辑模式; - ③ 底行模式(Command mode):
在底行模式下,用户可以将文件保存或退出,也可以进行查找字符串等操作;例如执行vim命令(" : " 键),搜索(" / " 和 " ? " 键)或者执行shell命令(" ! " 键)在底行模式下还可以直接输入 help vim-modes 查看当前vim所支持的所有模式; - ④ 可视化模式(Visual mode):
可视化模式与普通模式比较相似,但是移动命令会扩大高亮的文本区域,高亮区域可以是字符、行或者是一块文本;当执行一个非移动命令时,命令会被执行到这块高亮的区域上; Vim的 " 文本对象 " 也能和移动命令一样用于该模式中;
底行模式中:
:help vim-modes
查看当前云服务器的全部模式:
7种BASIC modes:
6种ADDITIONAL modes:
这里注意:不同服务器的编辑模式数量可能会不一致,我的是13种,小伙伴们的不一定是13种哈~~
2. vim下各模式的切换:
指令: vim [文件名]
功能: 使用vim编辑器打开相应文件,若文件不存在则默认直接创建
[Assassin@Ninghai Calculate_net]$ vim client.hpp
进入vim后默认为命令模式(普通模式),需要输入字符需切换到插入模式,需要执行vim下的命令需切换到底行模式;
[命令模式] 切换至 [插入模式]:
- 输入「i」:进入插入模式,光标位置不变
- 输入「a」:进入插入模式,光标位置向后移动一个字符
- 输入「o」:进入插入模式,光标位置切换至下一行的行首
- 输入「I」:进入插入模式,光标位置位于当前行的行首
- 输入「A」:进入插入模式,光标位置位于当前行的行尾
- 输入「O」:进入插入模式,光标位置切换至上一行的行首
[命令模式] 切换至 [底行模式]:
- 输入「Shift + ;」即可,实际上就是输入英文冒号「:」
[命令模式] 切换至 [可视化模式]:
- 输入「 Ctrl + v 」,进入可视化模式中的可视化块模式
[插入模式] ,[底行模式],[可视化模式] 切换至 [命令模式]:
- 插入模式,底行模式,可视化模式切换至命令模式都是直接输入「Esc」键即可
接下来简单介绍一哈各模式中的基本操作
ps: 插入模式就不说了,光写就完事了
3. vim命令模式:
【移动光标】:
- ① 输入「k」:光标上移
- ② 输入「j」:光标下移
- ③ 输入「h」:光标左移
- ④ 输入「l」:光标右移
- ⑤ 输入「$」(Shift + 4):移动光标至当前行的行尾
- ⑥ 输入「^」(Shift + 6):移动光标至当前行的行首
- ⑦ 输入「gg」:移动光标至到文本的起始位置
- ⑧ 输入「Shift + g」:移动光标至文本最末尾位置
- ⑨ 输入「n + Shift + g」:移动光标至第n行的行首
- ⑩ 输入「n + Enter」:当前光标向下移动n行
- ⑪ 输入「w」:光标按照从左到右,从上到下的方式跳转到下一个word的开头
- ⑫ 输入「e」:光标按照从左到右,从上到下的方式跳转到下一个word的结尾
- ⑬ 输入「b」:光标按照从右到左,从下到上的方式跳转到上一个word的开头
- ⑭ 数字键搭配 k,j,h,l:例如 5 + l 就是光标往所在行右移5个字符,3 + h 便是往所在行左移3个字符,1 + j 是光标往下移动1行,4 + k是光标往下移动4行
- ⑮ 输入「Shift + m」(M):移动光标至当前页的正中间行的第一个字符
- ⑯ 键盘上的上下左右键参照 k,j,h,l
配图效果也不明显,建议自行尝试
【删除】:
- ① 输入「x」:删除光标所在位置的字符
- ② 输入「nx」:删除光标所在位置开始往后的n个字符
- ③ 输入「X」(shift + x):删除光标所在位置的前一个字符
- ④ 输入「nX」(n + shift + x):删除光标所在位置的前n个字符
- ⑤ 输入「dd」:删除光标所在行
- ⑥ 输入「ndd」:删除光标所在行开始往下的n行
- ⑦ 输入「dw」:删除一个word,删除光标所在位置到单词尾的字符
- ⑧ 输入「ndw / dnw」:删除n个word,删除光标所在位置开始往后的n个word
配图效果也不明显,建议自行尝试
【复制粘贴】:
- ① 输入「yy」:复制光标所在行到缓冲区
- ② 输入「nyy」:复制光标所在行开始往下的n行到缓冲区
- ③ 输入「yw」:yw,复制一个单词,将光标所在位置开始到单词尾的字符复制到缓冲区,注意使用yw复制单词后再使用p粘贴时,默认直接在当前行粘贴
- ④ 输入「nyw」:复制n个单词,将光标所在位置开始往后的n个word复制到缓冲区,nyw使用p粘贴时跟yw同理,在当前行粘贴
- ⑤ 输入「p」:将已复制的内容在光标的下一行粘贴
- ⑥ 输入「np」:将已复制的内容在光标的下一行粘贴n次
小贴士: 这里出现了yy跟yw复制时粘贴是否在当前行的情况,应该不是粘贴p的问题,原因在于yy是复制一整行,包括了换行符 " \n ",粘贴时自然也就在下一行了,而yw是单纯复制word,不存在粘贴时换行的情况~~
【剪切】:
- ① 输入「dd」:剪切光标所在行
- ② 输入「ndd」:剪切光标所在行开始往下的n行
- ③ 输入「p」:将已剪切的内容在光标的下一行粘贴上
- ④ 输入「np」:将已剪切的内容在光标的下一行粘贴n次
- ⑤ 补充:dw同样也有剪切的功能
【撤销】:
- ① 输入「u」:撤销操作,多次按u会撤销多次
- ② 输入「Ctrl + r」:恢复刚刚的撤销,反撤销
【大小写切换】:
- ① 输入「~」(Shift + `):完成光标所在位置字符的大小写切换
- ② 输入「n~」(n + Shift + `):完成光标所在位置开始往后的n个字符的大小写切换
- ③ 长按「~」:完成光标所在位置到行尾所有字符的大小写切换
【字符替换】:
- ① 输入「r」:替换光标所在位置的字符
- ② 输入「R」:进入字符替换模式,可替换光标所到位置的字符,直到按下「Esc」键为止
【更改】:
- ① 输入「cw」:将光标所在位置开始到单词尾的字符删除,并进入插入模式
- ② 输入「ncw / cnw」:将光标所在位置开始往后的n个单词(word)删除,并进入插入模式
【翻页】:
- ① 输入「Ctrl+b」:向上翻一页
- ② 输入「Ctrl+f」:向下翻一页
- ③ 输入「Ctrl+u」:向上翻半页
- ④ 输入「Ctrl+d」:向下翻半页
【查找字符串】:
- ① 向下查找「 / + 字符串」 :底行模式下输入 / +待查找的字符串,回车后便可高亮对应的字符串,按 n 跳转到下一个匹配到的字符串,Shift + n 向上匹配字符串
- ② 向上查找「 ? + 字符串」 :底行模式下输入 ? +待查找的字符串,回车后便可高亮对应的字符串,按 n 跳转到上一个匹配到的字符串,Shift + n 向下匹配字符串
【全文格式对齐】:
- 输入「gg=G」:实现全文格式对齐
gg=G:
以上操作都建议自己尝试一哈,有些懒得配图了,而且不是gif的话效果也不明显
4. vim底行模式:
在处于命令模式下,输入「:」即可进入底行模式
【行号设置】:
- ① 输入「set nu」后回车:显示行号
- ② 输入「set nonu」后回车:取消行号
这里浅看一下⑧:
set nu:显示行号 ; 取消行号就不看了
【保存退出】:
- ① 输入「w」后回车:write,写入文件,保存文件
- ② 输入「q」后回车:quit,默认不保存退出vim,如果无法离开vim,可在「q」后面跟一个「!」表示强制退出
- ③ 输入「wq」后回车:保存并退出
- ④ 输入「wq!」后回车:强制保存并退出
【分屏指令】:
- ① 输入「vs 文件名」后回车:在vim窗口下打开另一个指定文件,实现多文件的编辑
- ② 输入「Ctrl+w+w」后回车:光标在多屏幕下进行切换
like this:Ctrl + ww实现窗口之间的跳转
【执行shell指令】:
- 输入「! + 指令」:在不退出vim的情况下,可以在指令前面加上「!」就可以执行Linux shell指令,例如查看目录、编译当前代码,查看man手册等
【新建存档 / 读取存档】:
- ① 输入「w + 文件名」后回车:write,将该文件的内容储存成另一个文件(类似另存新档)
- ② 输入「r + 文件名」后回车:read,在编辑的文件中,读入另一个文件的数据,追加式读入数据
ll:
less:
读取存档就不演示了,注意 r 读取是追加式的,不会覆盖原有的数据
【字符串替换】:
- ①「%s/原字符串]/[目的字符串]/g」:全文范围将原字符串替换出目标字符串
替换前:
替换后:
- ②「s/原字符串]/[目的字符串]/g」:在当前行中,将所有的原字符串替换成目标字符串
替换前:
替换后:
- ③「n1,n2s/原字符串]/[目的字符串]/g」:将n1行到n2行中所有的原字符串替换成目标字符串
替换前:
替换后:
补充:在底行模式下,使用命令 " %s/[待替换字符串]/[目标字符串]/g " 时:
不加%表示替换光标所在行,加%则表示替换全文;
不加g表示只替换行中第一个匹配到的字符串,加g则表示替换行中所有匹配到的字符串
是否带g请自行测试;
5. vim可视化模式:
vim的可视化模式只简单介绍一下快速批量化注释和去注释,有一说一,可视化模式在日常编程中用的不是很多,掌握简单的注释操作应该就ok了,深入的话可以自行搜索了解
【添加注释】:
Ctrl + v 进入块选择模式,然后移动光标(h,j,k,l)选中要注释的行,再按大写的 I 进入行首插入模式输入注释符号如 // 或 #,输入完毕之后,按 Esc,Vim 会自动将选中的所有行首都加上注释,保存退出完成注释:
效果:
【取消注释】:
Ctrl + v 进入块选择模式,选中需要删除行的注释符号,注意 // 要选中两个,选好之后按 d 即可删除注释,Esc 保存退出:
效果:
6. 额外补充:
6.1 非法退出:
小白在vim中编辑时可能会出现各种各样的问题,比如编辑错了想按 Ctrl + z之类的退出编辑,或者直接关掉服务器,这样暴力操作过后下次再打开文件时可能会出现如下提示信息:生成一个.swap文件(安全机制)
根据提示,我们可以按 R 进行recovery进入文件,不过这样操作在下次进入文件是依旧会出现上述提示
解决方法:
找到该.swap文件,使用 rm 进行删除即可
rm:rm后即可正常进入文件
6.2 shell界面多文件打开:
vim -o file1 file2
vim -O file1 file2
# -o: 小写o会上下分屏打开两个文件
# -O: 大写O会左右分屏打开两个文件
# 使用-o上下打开两个文件后,可以通过输入 [Ctrl + w + 上下箭头/j,k]切换文件
# 使用-O左右打开两个文件后,可以通过输入 [Ctrl + w + 左右箭头/h,l]切换文件
# ps:两种方式均可通过 [Ctrl + ww]进行切换
这里只演示上下分屏:
[Assassin@Ninghai Calculate_net]$ vim -o client.hpp server.hpp