持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第23天,点击查看活动详情
前言
本文就来分享一波笔者对于vim编辑器的学习经验和心得。
笔者水平有限,难免存在纰漏,欢迎指正交流。
vim编辑器
情景引例
假如有一天你的朋友和你发生了如下对话:
李四:张三啊,你平时在哪里写代码的呀?
你:VS2019
李四:那你调试代码呢?
你:VS2019
李四:那你编译代码呢?
你:VS2019
李四:那你运行代码呢?
你:VS2019
李四:C语言在哪写的?
你:VS2019
李四:Java呢?
你:还是VS2019
李四:......
你:不会有人没用过ide吧?(笑)
关于ide
实际开发中,除了编译器是必须的工具,我们往往还需要很多其他辅助软件,例如:
- 编辑器:用来编写代码,并且给代码着色,以方便阅读。
- 代码提示器:输入部分代码,即可提示全部代码,加速代码的编写过程。
- 调试器:观察程序的每一个运行步骤,发现程序的逻辑错误。
- 项目管理工具:对程序涉及到的所有资源进行管理,包括源文件、图片、视频、第三方库等。
- 漂亮的界面:各种按钮、面板、菜单、窗口等控件整齐排布,操作更方便。
这些工具通常被打包在一起,统一发布和安装,例如 Visual Studio、Dev 、Xcode、Visual C++ 6.0、C-Free、Code::Blocks 等,它们统称为集成开发环境(IDE,Integrated Development Environment)。
集成开发环境就是一系列开发工具的组合套装。这就好比台式机,一个台式机的核心部件是主机,有了主机就能独立工作了,但是我们在购买台式机时,往往还要附带上显示器、键盘、鼠标、U盘、摄像头等外围设备,因为只有主机太不方便了,必须有外设才能玩的爽。
集成开发环境也是这个道理,只有编译器不方便,所以还要增加其他的辅助工具。在实际开发中,我一般也是使用集成开发环境,而不是单独地使用编译器。
vim的基本概念
vim是一款功能强大、多模式编辑器,能进行文本编辑而不能进行编译链接等其他操作。
vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、mac os、windows。这里统一按照vim来进行讲解。
这里一共有12种模式:six BASIC modes和six ADDITIONAL modes
先看vim的三种常用模式,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)。
正常/普通/命令模式(Normal mode)
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 Last line mode
插入模式(Insert mode)
只有在Insert mode下,才可以进行文字输入,按「ESC」键可回到Normal mode。该模式是用的最频繁的编辑模式。
底行模式(Last line mode)
文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在Normal mode下,按下shift:
即可进入该模式。而在Last line mode下,按「ESC」键可回到Normal mode。
要查看你的vim的所有模式可以打开vim,底行模式下直接输入:help vim-modes
vim的基本操作
进入vim,在系统提示符号输入vim及文件名称比如vim test.c
后,就进入vim全屏幕编辑画面。
不过有一点要注意,就是你进入vim之后,是处于[命令模式],你要切换到[插入模式]才能够进行编辑。
[命令模式]切换至[插入模式]
输入a,从光标的下一个位置开始
输入i,从光标处开始
输入o,从光标的下一行开始
......(还有但没必要看)
[插入模式]切换至[命令模式]
处于[插入模式],就只能一直输入文字,如果发现输错了字,想用光标键往回移动,将该字删除,可以先按一下「ESC」键转到[命令模式]再删除文字。当然,也可以直接删除。
[命令模式]切换至[底行模式]
「shift + ;」, 其实就是输入「:」。
在[命令模式]下,按一下「:」冒号键进入「底行模式」,对应操作如:w
(保存当前文件)
:wq
(保存并退出vim)
:q!
(不保存而强制退出vim)
:w!
(强制保存)
:wq!
(强制保存并强制退出)
vim命令模式命令集
命令模式存在意义:提高编辑效率。
进入插入模式
按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件; 按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字; 按「o」进入插入模式后,是插入新的一行,从新一行行首开始输入文字。
从插入模式切换为命令模式
按「ESC」键。
移动光标
首先要明确下面将要提到的行首和行尾是基于该行文本内容的,比如hello world
这样的一行文本,行首就是h
所在位置,行尾就是d
所在位置。
vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格。
「$」
:移动到光标所在行的行尾(shift + 4)
「^」
:移动到光标所在行的行首(shift + 6)
「w」
:光标跳到下个语义单位的开头
「e」
:光标跳到下个语义单位的结尾
「b」
:光标回到上个语义单位的开头
「#l」
:光标在该行内向右移动#个位置,最多到该行末尾,如:5l,10l
[gg]
:光标跳转到文本开始处
[shift]
+[g]
或「G」
:光标跳转到文本末端
[#]
+ [shift]
+ [g]
:光标跳转到指定行,#代表的是行号,下例中第一次跳到第4行,第二次跳到第8行
是不是发现突然就标注了行号?很简单,你只需要切换到底行模式,然后输入set nu
指令按下回车即可添加侧边行号。不过这样设置只是暂时有效,一旦你退出了vim就失效了,想要行号持久有效的话后面会在vim配置中提到。
「ctrl」
+「b」
:屏幕往“上”移动一页(一页指当前屏幕范围)
「ctrl」
+「f」
:屏幕往“下”移动一页
下例中先向“下”移动后向“上”移动
「ctrl」
+「u」
:屏幕往“上”移动半页
「ctrl」
+「d」
:屏幕往“下”移动半页
上面这两个和移动一页大同小异,就是范围更小一些。
复制
「yw」
:将光标所在之处到语义单位末尾范围内的字符复制到缓冲区中,而「#yw」从光标当前位置及其后面字符复制#个字到缓冲区
「p」
:将缓冲区内的内容粘贴到光标所在位置,「#p」支持对内容多次粘贴,#为次数。
「yy」
:复制光标所在行内容到缓冲区,「#yy」支持对光标所在行及其向下#行进行复制,#为行数。
注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
删除或剪切
「x」
:每按一次,截取光标所在位置的一个字符到缓冲区,可单独用作删除,也就是向后删,而「#x」截取光标所在位置及其向后的#个字符
「shift」
+「x」
即「X」
:每按一次,截取光标所在位置前面的一个字符,可单独用作删除,也就是向前删,而「#X」截取光标所在位置向前的#个字符(不包含当前位置)
「dd」
:截取光标所在行内容到缓冲区,可单独用作删除,而「#dd」删除光标所在行及其向下#行内容
「#dd」
+「 p」
:剪切#行
其他编辑
「~」
:大小写切换,可以对当前光标所在处的字母进行大小写切换,如果按住不放则可以从左到右进行文本行的大小写切换
「r」
:替换光标所在处的单个字符 ,「#r」
替换光标所在处及其向后#个字符,#为个数
「shift」
+「r」
即「R」
:进入替换模式,替换光标所到之处的多个字符,直到按下「ESC」回到命令模式为止
「u」
:如果你误执行了一个命令,可以马上按下「u」,回到上一个操作。按多次「u」可以不断向前返回历史操作
「ctrl」
+ 「r」
: 回到下一个操作,按多次可以不断向后返回,不过最多回到最新操作处
下例中先是连着删除两行代码,随后两次「u」返回,最后两次「ctrl」 + 「r」又回到最新操作处。
「cw」
:更改光标所在处对应的语义单位,先截取然后自动切换到插入模式,而「c#w」
则是更改#个语义单位
vim底行模式命令集
在使用末行模式之前,请记住先按「ESC」键确定您已经处于命令模式,再按「:」冒号即可进入底行模式。
「set nu」
: 在文件中的每一行前面列出行号,「set nonu」则可以取消
「w」
: 将文件保存,如果无法保存,可以在「w」后跟一个「!」强制保存 「q」:退出,如果无法离开vim,可以在「q」后跟一个「!」强制离开vim 「wq」:一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件
「#」
:#表示一个数字,输入一个数字再按回车就会跳到该行了
「vs」
+文件名:可以再打开另一个文件进行分屏操作,如果文件不存在则会新建一个,不过无论你分多少个屏,你都只有一个光标,光标在哪就说明你当前选中要操作的屏是哪个,若要将光标切屏只需「ctrl」
+「ww」
,保存或退出针对的都是光标所在屏
「!」
+ Linux命令:可以直接在vim中使用Linux命令
「%s/xxx/mmm/g」
:xxx和mmm指代特定的文本内容,s表示替换,g表示在全局范围内,所以这条指令作用是将全局范围内所有的xxx内容用mmm内容替换掉
「/关键字」
: 先输入「/」键,再输入您想寻找的字符关键字,如果第一次找的关键字不是您想要的,可以按「n」往后寻找所需关键字。
「?关键字」
:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以按「n」往前寻找所需关键字。
问题:「/」和 「?」查找有何区别?
显然,「/」是从前向后找,而「?」是从后向前找。
小结
这里贴一张指令键位图,可以参考一下:
简单vim配置
单纯的vim和记事本一样,用起来不太爽,有没有什么办法可以让我们调整一下呢?
配置基本原理
vim的配置是一人一份的,每个用户配置的是自己的,并不影响别人。原因在于每个人虽然用的是同一个vim程序,但是用的是不同的配置文件。
在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。 而在每个用户的家目录下,都可以自己建立私有的配置文件,命名为:.vimrc。例如,/root目录下,通常已经存在一个.vimrc文件,如果不存在,可以手动创建一个。
普通用户执行 cd ~
进入自己的家目录,执行vim .vimrc
打开自己目录下的.vimrc文件,然后就可以写入内容来配置vim,具体怎么配置可以在网上找教程,这里来测试几个常用配置选项:
设置语法高亮: syntax on
显示行号: set nu
设置缩进的空格数为4: set shiftwidth=4
发现vim下编辑内容明显发生了变化:
关于vim的配置如果自己手动去配比较麻烦且功能不一定够全面,下面介绍一种懒人便捷方法。
一键省心配置cpp环境
不想一点一点自己配置的话不妨试试输入下面内容,按下回车即可下载配置文件自动配置,方便快捷。
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
下载好后我们vim .vimrc
打开配置文件,把下面三行指令改一改,把2都改成4比较好(当然也可以不改)。
配置sudo提权名单
之前就一直提到过普通用户可以通过sudo短暂提权,但是自己一试却发现当前用户不在sudoers文件内:
如何配置呢?
在root用户下用vim打开对应文件vim /etc/sudoers
,找到下面绿色文本所在地,比如现在要添加fzd这一用户,那么就照模照样写入fzd ALL=(ALL) ALL
即可:
不过保存退出文件的时候你会发现该文件不让你修改:
直接强制保存退出wq!
即可。
以上就是本文全部内容,感谢观看,你的支持就是对我最大的鼓励~