Linux开发工具 —— vim
一、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),各模式的功能如下:
- 正常/普通/命令模式(Normal mode)
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入 Insert mode 下,或者到 last line mode。 - 插入模式(Insert mode)
只有在 Inert mode 下,才可以输入,按【Esc】键可回到命令行模式,该模式是我们后面用的最频繁的编辑模式。 - 底行/末行模式(last line mode)
文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。在命令模式下,shift + : 即可进入该模式。如若要查看你的所有模式:打开 vim,底行模式直接输入 :help vim-modes。
2、vim的基本操作
-
进入 vim,在系统提示符号输入 vim 及文件名后,就进入 vim 编辑器
$ vim test.c
需要注意的是,进入 vim 后,默认处于【命令模式】,需要切换到【插入模式】才能编辑 -
【命令模式】切换至【插入模式】
输入 a 或 i 或 o
-
【插入模式】切换至【命令模式】
【Esc】即可转到【命令模式】
-
【命令模式】切换至【末行模式】
【shift + :】
-
退出 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操作总结
-
三种模式
命令模式 插入模式 底行模式
-
vim 操作
打开、关闭、查看、查询、插入、删除、替换、撤销、复制等
实际我们通常在对文本进行操作时,不是死板的只能用命令模式,而是用命令模式 + 插入模式,怎么方便怎么来。
7、简单vim配置
对于 vim 配置其实是个不太好的主题。
💦 配置文件的位置
- 在目录 /etc/ 下,有个 .vimrc 的文件,这是系统中公共的 vim 配置文件,对所有用户都有效
- 而在每个用户的主目录下,都可以建立自己私有的配置文件,命名为 .vimrc。例如,/root 目录下,通常已经存在一个 .vimrc 文件,如果不存在,则自己创建
- 切换用户成为自己执行 su,进入自己的主工作目录执行 cd~
- 打开自己目录下的 .vimrc 文件,执行 vim .vimrc
💦 常用配置选项(用来测试)
- 设置语法高亮: syntax on
- 显示行号: set nu
- 设置缩进的空格数为 4: set shiftwidth = 4
- 更多可百度 vim 常用配置项
这里的配置是我们自己配的,比较简单,但实际上要配好 vim,是需要下各种各样的插件的,这其中的过程非常麻烦。
💦 使用插件(不推荐)
要配置好看的 vim,原生的配置可能功能不全,可以选择安装插件来完善配置,保证用户是你要配置的用户,接下来:
- 安装 TagList 插件,下载 taglist_xx.zip ,解压完成,将解压出来的 doc 的内容放到 ~/.vim/doc, 将解压出来的 plugin 下的内容拷贝到 ~/.vim/plugin
- 在 ~/.vimrc 中添加:Let Tlist_Show_One_File=1 let Tlist_Exit_OnlyWindow=1 let Tlist_Use_Right_Window=1
- 安装文件浏览器和窗口管理器插件:WinManager
- 下载 winmanager.zip,2.X 版本以上的
- 解压 winmanager.zip,将解压出来的 doc 的内容放到 ~/.vim/doc,将解压出来的 plugin 下的内容拷贝到 ~/.vim/plugin
- 在 ~/.vimrc 中添加 let g:winManagerWindowLayout='FileExplorer|TagList n map wm :WMToggle<cr>
- 然后重启 vim,打开 ~/XXX.c 或 ~XXX.cpp,在normal 状态下输入 “wm”。具体请稳步手把手教你把Vim改装成一个IDE编程环境(图文)
💦 gitee(推荐)
在 gitee 上有一键化安装配置 vim的方案(注意这里介绍的 vimforcpp 只支持 centos7):
- 在 gitee 上搜索关键字 vimforcpp
- 复制安装链接到我们的 xshell,按提示操作: 链接点击这里
- 安装成功,按提示使 vim 配置生效
- 这里配置完后,缩进用的是 2 个字符,所以我这里按照自己的习惯改成 4 个
8、vim配置参考资料(github)
- 点赞
- 收藏
- 关注作者
评论(0)