Linux开发工具 —— vim

举报
跳动的bit 发表于 2022/06/21 13:55:11 2022/06/21
【摘要】 一、Linux开发工具在此之前,别人问你:🧓🏿你在什么环境下写代码 ?🧑🏿Visual Studio 2017。🧓🏿你在什么环境下调试代码?🧑🏿Visual Studio 2017。🧓🏿你在什么环境下编译、链接代码?🧑🏿Visual Studio 2017。对于上面这种环境,我们称之为集成开发环境。相比我们在 Linux 中大部分情况下我们所使用的工具都是独立的工具...

一、Linux开发工具

在此之前,别人问你:

🧓🏿你在什么环境下写代码 ?
🧑🏿Visual Studio 2017。

🧓🏿你在什么环境下调试代码?
🧑🏿Visual Studio 2017。

🧓🏿你在什么环境下编译、链接代码?
🧑🏿Visual Studio 2017。

对于上面这种环境,我们称之为集成开发环境。相比我们在 Linux 中大部分情况下我们所使用的工具都是独立的工具 —— 比如我们写代码用 vim、编译用 gcc/g++、调试用 gdb、维护项目关系用 make/Makefile 等。对于这些工具的安装和卸载这里就不多说了,主要讲解它们的使用。

二、Linux编辑器 —— vim的使用

在这里插入图片描述vi/vim 的区别简单说,它们都是多模式编辑器,不同的是 vim 是 vi 的升级版本,它不仅兼容 vi 的所有指令,而且还有一些新特性。例如语法高亮,可视化操作不仅可以在终端运行,也可以运行于 x window、 mac os、windows,所以这里我们学习 vim。事实上 vim 并不好学,成本较高,那为啥还要学习 vim 呢 ?—— 主要原因有两个:其一是 vim 用的比较广泛,当然其功能也是很强大,大成后可以完全摆脱鼠标的束缚;其二是基本所有的 Linux 机器上都默认带有 vim 的,可以这么说,vim 只要熟练了,其它的文本编译器都不足为惧。vim 和 make/Makefile 使用的熟练度是衡量一个 Linux 程序员水平的一个很重要的东西。

1、vim的基本概念

vim 共有 12 种模式:six BASIC modes 和 six ADDITIONAL modes。其中我们目前只学掌握 3 种即可,分别是命令模式(Command mode)、插入模式(Insert mode)、底行模式(last line mode),各模式的功能如下:

  1. 正常/普通/命令模式(Normal mode)
    控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入 Insert mode 下,或者到 last line mode。
  2. 插入模式(Insert mode)
    只有在 Inert mode 下,才可以输入,按【Esc】键可回到命令行模式,该模式是我们后面用的最频繁的编辑模式。
  3. 底行/末行模式(last line mode)
    文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。在命令模式下,shift + : 即可进入该模式。如若要查看你的所有模式:打开 vim,底行模式直接输入 :help vim-modes。

2、vim的基本操作

  1. 进入 vim,在系统提示符号输入 vim 及文件名后,就进入 vim 编辑器

    $ vim test.c
    需要注意的是,进入 vim 后,默认处于【命令模式】,需要切换到【插入模式】才能编辑

    在这里插入图片描述

  2. 【命令模式】切换至【插入模式】

    输入 a 或 i 或 o

    在这里插入图片描述

  3. 【插入模式】切换至【命令模式】

    【Esc】即可转到【命令模式】

    在这里插入图片描述

  4. 【命令模式】切换至【末行模式】

    【shift + :】

在这里插入图片描述

  1. 退出 vim 及保存文件,在【命令模式】下,按【:】进入【末行模式】

    :w (保存当前文件)
    :wq (存盘并退出 vim)
    : q! (不存盘强制退出 vim)

在这里插入图片描述

如果你在 vim 时,网络突然断线了,此时 vim 会自动帮你保存的,你可以输入下面的选项,如 R 把它恢复出来,保存并退出,但是每次打开时它都如上图提示。怎么解决呢 ?—— 可以先看下面的选项有无 D,如果有,直接 D,否则复制上图的倒数第二行中引号内的内容,出去 rm 即可。

在这里插入图片描述

⚠ 注意

在这里插入图片描述
一般底行模式和插入模式的切换需要先转至命令模式才能切换。如果将来你不知道你在哪种模式下,比如【REPLACE 替换模式】,可以直接无脑【Esc】直接回到命令模式。

3、vim正常模式命令集

==1. 进入插入模式/底行模式==

按【i】切换进入插入模式后,是从光标当前位置开始输入文字
按【a】进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字
按【o】进入插入模式后,是插入新的一行,从行首开始输入文字
按【:】进入底行模式

==2. 移动光标==
在这里插入图片描述
上图中绿色的小方块就是我们光标所在的位置,我们可以使用 ⬆ ⬇ ⬅ ➡ 方向键进行移动定位,在 vim 中与之对应的是 h(左) j(下) k(上) l(右) 键(注意只有小写状态下才生效),一般我们最常用的也是这个,当然你要用也没人拦着你。

hjkl 是按字符为单位移动,有时效率较低,所以 vim 中的 w、b 是按单词为单位进行移动(b 是反向)。
在这里插入图片描述
比如有人写了一个又臭又长的代码,我想给它删掉,可以【$】直接定位到行尾,相反【^】可以直接定位到行头。如果有上千行的代码可以【G/shift+g】(shifg+g 就是 G)直接定位到最后一行,相反【gg】可以直接定位到第一行。如果想定位到中间如 666 行,先输入 666 后,再【G/shift+g】。

注意这里不仅仅只有这些移动方式,这里只是最基础光标定位操作,其余的罗列在下面。

为啥 vim 使用 hjkl 移动光标 ❓
在这里插入图片描述

这是有一定的历史渊源的,当 Bill Joy 开发 Vi 文本编辑器时,他使用的机器机器是 ADM-3A 终端机,这台机器并没有方向键,所以把 HJKL 键作为方向键。当然现如今我们仍然使用 HJKL 的原因是它的使用效率并不比方向键低,其次还有一个关键原因是买键盘可以不用买 104 键了,也不用买 87 键了,直接买 74 键 —— 嗯,算下来划算了不少,携带又方便。当然并不是这个原因啦,其实在有些场景下必须得使用 HJKL,比如 vim 下的批量注释使用方向键是不行的,所以那些想减少学习成本的同学还是老老实实的练吧。

⚠ 注意以下命令都需要区分大小写,G 命令可以用 shift + g 来代替。

【h/j/k/l】vim 可以直接用键盘上的方向键来上下左右移动,但正规的 vim 是用小写英文字母 h/j/k/l
【$】: 移动到光标所在行的结尾
【^】: 移动到光标所在行的行首
【w】:光标跳到下个字的开头
【e】:光标跳到下个字的结尾
【b】:光标回到上个字的开头
【G/shift+g】:进入文本末端
【gg】:进入文本开始
【# + G/shift+g】:光标移到该行的第 # 个位置
【ctrl+b】:屏幕往后移动一页
【ctrl+f】:屏幕往前移动一页
【ctrl+u】:屏幕往后移动半页
【ctrl+d】:屏幕往前移动半页

==3. 复制粘贴==

【yw】:将光标所在之处到字尾(单词)的字符复制到缓冲区
【#yw】:复制 # 个字符到缓冲区
【yy】:复制光标所在行到缓冲区
【#yy】:例如 【6yy】表示拷贝从光标所在的该行往下数的 6 行文字到缓冲区
【(#)p】:将缓冲区内的字符贴到光标所在位置,如果要粘贴到 100 份,可在 p 之前指定,比如 100+p,注意所有与 y 相关的复制命令都必须与 p 配合才能完成复制与粘贴功能

==4. 删除剪切==

注意以下的删除都相当于剪切到缓冲区

【x】:每按一次,删除光标所在位置的一个字符
【#x】:例如,【6x】表示从光标位置开始往后删除 6 个字符
【X】:每按一次,删除光标所在位置的前一个字符
【#X】:例如,【20X】表示删除光标所在位置的前 20 个字符
【dd】:删除光标所在行
【#dd】:从光标所在行开始删除 # 行

==5.替换==

【r】:替换光标所处的字符
【#r】:例如,【2r】表示从光标处开始往后 2 个字符全部替换成你输入的那个字符
【R】:替换光标所在之处的字符,直到按下【Esc】

==6. 撤销==

【u】:回到上一步操作,可以支持多次撤销
【ctrl + r】:撤销的回复

==7.切换大小写==

【shift + ~】:切换大小写

请添加图片描述
==8. 更改(这里用替换即可)==

【cw】:更改光标所在的字符到字尾处
【c#w】:例如,【c3w】表示更改 3 个字符

==9. 跳转至指定行==

【ctrl + g】:列出光标所在行的行号
【#G】:例如,【15G】表示移动光标至文章的第 15 行行首

5、vim末行模式命令集

==1.批量化替换==

【%s/printf/cout/g】:它会把文本里所有的 printf 替换成 cout

==2.保存、退出vim==

【w】:保存当前文本
【w!】:强制保存当前文本
【q】:退出 vim
【q!】:强制退出 vim
【wq】:保存退出
【wq!】:保存并强制退出

==3.查找==

【!man 3 函数名】:查看函数手册,按【q】回到命令模式
【/关键字】:查找字符或字符串,如果第一次找的关键字不是想要的,可以按 n 往后查找
【?关键字】:查找字符或字符串,如果第一次找的关键字不是想要的,可以按 n 往后查找
【#】:查找光标所在在的那个单词,如果不是想要的,按入 shift,然后一直 #

/ 和 ? 的查找有什么区别 ❓

/ 是从文本的开头开始往下查找,? 是从文本结尾开始往上查找。

==4.编译执行==

【!gcc 文件名】:在底行模式下可以直接进行编译
【!./a.out】:底行模式下执行程序
【!命令】:换言之在底行模式下可以在 ! 后跑任何命令 

==5.列出行号==

【set nu】:会在文本中的每一行列出行号,注意它只能在当前文件生效,且退出会失效,一劳永逸的方法在下面的 vim 配置就提到

==6.分屏==

【vs 文件名】:可以在当前窗口下新增一个窗口进行分屏,【ctrl + ww】可以将光标定位到另一个窗口,注意退出 vim 的窗口是光标所在的窗口

6、vim操作总结

  1. 三种模式

    命令模式
    插入模式
    底行模式
    
  2. vim 操作

    打开、关闭、查看、查询、插入、删除、替换、撤销、复制等 
    

实际我们通常在对文本进行操作时,不是死板的只能用命令模式,而是用命令模式 + 插入模式,怎么方便怎么来。

7、简单vim配置

对于 vim 配置其实是个不太好的主题。

💦 配置文件的位置
  1. 在目录 /etc/ 下,有个 .vimrc 的文件,这是系统中公共的 vim 配置文件,对所有用户都有效
  2. 而在每个用户的主目录下,都可以建立自己私有的配置文件,命名为 .vimrc。例如,/root 目录下,通常已经存在一个 .vimrc 文件,如果不存在,则自己创建
  3. 切换用户成为自己执行 su,进入自己的主工作目录执行 cd~
  4. 打开自己目录下的 .vimrc 文件,执行 vim .vimrc
💦 常用配置选项(用来测试)
  1. 设置语法高亮: syntax on
  2. 显示行号: set nu
  3. 设置缩进的空格数为 4: set shiftwidth = 4
  4. 更多可百度 vim 常用配置项

在这里插入图片描述
在这里插入图片描述
这里的配置是我们自己配的,比较简单,但实际上要配好 vim,是需要下各种各样的插件的,这其中的过程非常麻烦。

💦 使用插件(不推荐)

要配置好看的 vim,原生的配置可能功能不全,可以选择安装插件来完善配置,保证用户是你要配置的用户,接下来:

  1. 安装 TagList 插件,下载 taglist_xx.zip ,解压完成,将解压出来的 doc 的内容放到 ~/.vim/doc, 将解压出来的 plugin 下的内容拷贝到 ~/.vim/plugin
  2. 在 ~/.vimrc 中添加:Let Tlist_Show_One_File=1 let Tlist_Exit_OnlyWindow=1 let Tlist_Use_Right_Window=1
  3. 安装文件浏览器和窗口管理器插件:WinManager
  4. 下载 winmanager.zip,2.X 版本以上的
  5. 解压 winmanager.zip,将解压出来的 doc 的内容放到 ~/.vim/doc,将解压出来的 plugin 下的内容拷贝到 ~/.vim/plugin
  6. 在 ~/.vimrc 中添加 let g:winManagerWindowLayout='FileExplorer|TagList n map wm :WMToggle<cr>
  7. 然后重启 vim,打开 ~/XXX.c 或 ~XXX.cpp,在normal 状态下输入 “wm”。具体请稳步手把手教你把Vim改装成一个IDE编程环境(图文)
💦 gitee(推荐)

在 gitee 上有一键化安装配置 vim的方案(注意这里介绍的 vimforcpp 只支持 centos7):

  1. 在 gitee 上搜索关键字 vimforcpp
    在这里插入图片描述
  2. 复制安装链接到我们的 xshell,按提示操作: 链接点击这里
    在这里插入图片描述
  3. 安装成功,按提示使 vim 配置生效
    在这里插入图片描述
    在这里插入图片描述
  4. 这里配置完后,缩进用的是 2 个字符,所以我这里按照自己的习惯改成 4 个
    在这里插入图片描述

8、vim配置参考资料(github)

Vim从入门到牛逼(vim from zero to hero)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。