Linux文本编辑器 – vim

正文开始@Assassin

目录:

  • Linux文本编辑器 -- vim
    • 1. vim基本介绍:
    • 2. vim下各模式的切换:
    • 3. vim命令模式:
    • 4. vim底行模式:
    • 5. vim可视化模式:
    • 6. 额外补充:
      • 6.1 非法退出:
      • 6.2 shell界面多文件打开:

经典老图:

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

【linux系统编程】基础开发工具:vi/vim相关推荐

  1. alin的学习之路(Linux系统编程:三)(vim,gcc,库,gdb)

    alin的学习之路(Linux系统编程:三)(vim,gcc,库,gdb) 1.vim的使用 vim有三种模式:命令模式,末行模式,编辑模式 光标的移动[命令模式] h 向左 ,j 向下,k 向上,l ...

  2. 嵌入式linux实验一vim的使用,嵌入式Linux C语言开发工具—vi/vim实训操作

    Linux上最常用的文本编辑器vi(或vim).文本编辑器是所有电脑系统中最常使用的一种工具.用户在使用电脑的时候,往往需要创建自己的文件,无论是一般的文字文件.资料文件,还是编写源程序,这些工作都离 ...

  3. Java后端学习路线6大维度详细总结(编程基础+开发工具+应用框架+运维知识+成神之路+平稳降落)【可作为知识点梳理列表】【点击可查看高清原图】

  4. 【Linux】环境基础开发工具使用(万字汇总)

  5. 【Linux】基础:Linux环境基础开发工具——make与Makefile

    [Linux]题解:Linux环境基础开发工具--make与Makefile 摘要:Makefile是一个文件定义了一系列的规则来指定编译过程以及更复杂的功能操作,make是一个命令工具,是一个解ma ...

  6. Linux系统编程总结

    day2 vim的三种工作模式 命令模式 vi hello.c zz 保存退出 2.编辑模式 i a o s (有大写)可以写东西 3.末行模式: 文本和末行模式不能直接切换 要切换回命令模式 再到末 ...

  7. 为什么我们要掌握Linux系统编程?

    为什么我们要掌握Linux系统编程?(文末送书4本) 作为一个嵌入式开发者,我觉得基于Linux的系统编程,这个应该是绕不开的话题.本文将围绕,为何要掌握Linux系统编程这个问题,给出一些观点,希望 ...

  8. 资深程序员带你攻克 Linux 系统编程

    作者简介:宇文拓,近十年 Linux C/C++ 开发经验,现就职于某创业公司,负责服务器架构与系统设计.曾就职于某通信业知名美企,负责核心网和防火墙产品研发.在 GitHub 上发布了开源项目 An ...

  9. 攻克 Linux 系统编程

    课程亮点 完整学习路线图,系统掌握核心知识点 内核源码深入分析,知其然更知所以然 高频问题全面汇总,精准定位症结所在 八大主题商业案例,实操中获得拔高提升 专家推荐 曾与宇文拓共事五年,他对技术的钻研 ...

  10. 【Linux】Linux环境基础开发工具使用 —— yum | vim | gcc g++ | gdb | make makefile | 进度条 | git

    Linux环境基础开发工具使用 1. Linux软件包管理器yum 1.1 什么是软件包 1.2 软件安装三板斧 1.2.1 查看软件包 1.2.2 安装软件 1.2.3 卸载软件 2. vim 2. ...

最新文章

  1. MFC中设备描述表dc的使用
  2. android,项目,一些教程
  3. Spring MVC 源码-初始化阶段
  4. 下载国外网站资料需java_Java开发必知道的国外10大网站
  5. 使用etop查看系统中进程信息
  6. CentOS8 安装 Docker
  7. 涉及上千款,2021 Chrome插件性能影响分析报告新鲜出炉
  8. 移动端真机调试的两种方法
  9. Charles抓包工具过滤网络请求
  10. 最简单DIY的51蓝牙遥控小车设计方案
  11. EMI/EMC设计经典问答
  12. 恋物志(二):独居者的智能生活指南
  13. cosmo是什么牌子_时尚COSMO - 时尚品牌 - 时尚
  14. [每日一氵] Python 训练过程中,如何优雅的保存loss
  15. 学计算机的当大学老师,待遇那么低,研究那么苦,你为啥还去大学当老师?
  16. vc 调用webservice
  17. Centos下samba共享打印机
  18. 最新网络监视工具列表
  19. 从零开始搭建Linux共享服务器(云享系统)
  20. 文明5美丽新世界神系信条作用及评价

热门文章

  1. 抖音发布春节数据报告:394万个视频和平安相关 医务人员获赞8.6亿次
  2. 抢先一步 华为将于7月26日发布首款5G智能手机
  3. 小鹏汽车窃密特斯拉实锤?前员工回应:确实上传过30万份Autopilot源码
  4. 三星Galaxy Note10系列带壳渲染图曝光:将取消3.5mm耳机孔
  5. 5G加持!刘作虎确认一加7 Pro:屏幕成本是普通旗舰2倍
  6. java查错题(经常混淆)
  7. php如何设计一个网站,如何设计一个优质的外贸网站?
  8. java context.xml_java-context.xml的解释
  9. MFC小笔记:父子窗口传递消息
  10. nodejs实践录:windows 10系统nodejs环境搭建