文章目录1. 什么是vim2. vim的常用模式3. vim的基本操作4. vim命令集4.1 命令模式命令集复制粘贴依次撤销上一次操作对撤销进行撤销恢复剪切删除移动光标上下移动光标左右文本内容大小写切换替换4.2 替换模式4.3 命令模式命令集续删除4.4 上下左右移动光标4.5 插入模式的切换4.6 末行模式命令集搜索匹配不退出vim直接执行终端界面的命令替换多文件分屏显示5. vim的配置6. 解决普通用户不能sudo的问题从这篇文章开始我们要来学习一些Linux中的开发工具。这篇文章我们先来学习一下Linux中的文本编辑器——vim。1. 什么是vim首先我们来认识一下什么是vimVimVi IMproved是一款文本编辑器它是从 Vi 编辑器发展而来的。Vim 在功能上比 Vi 更加强大并提供了更多的扩展性和定制选项。vi/vim的区别简单点来说它们都是多模式编辑器不同的是vim是vi的升级版本它不仅兼容vi的所有指令而且还有一些新的特性在里面。例如语法加亮可视化操作不仅可以在终端运行也可以运行于x window、 mac os、windows。我们这里统一按照vim来进行讲解。2. vim的常用模式上面提到vim是一款多模式编辑器注意它就是一个单纯的编辑器跟我们平时写代码用的比如vs、DEVC等不同vs这些是集成开发环境IDE集成开发环境就是一系列开发工具的组合套装包含编辑器编译器链接器调式器等。另外既然是多模式的话就涉及到每种模式的用法和差别以及不同模式之间的切换。虽然是多模式但是我们在日常开发中最常用的也就3~5中模式。那常用的模式都有哪些呢我们这里主要讲解vim的3种模式正常/普通/命令模式(Normal mode)插入模式(Insert mode)末行/底行模式(last line mode)除此之外还有一个替换模式和视图模式我们讲的时候也会提一下。3. vim的基本操作那要使用vim进行编辑首先第一个问题我们怎么打开vim呢如果我们要使用vim对某个文件进行编辑直接vim 空格 文件名即可vim 文件名当然如果后面跟的文件名是不存在的vim也会自动帮你创建你也可以选择先创建再用vim编辑比如我现在创建一个文件test.c然后用vim打开它然后敲回车打开之后就是这样子那上面说vim有好几种模式那我们打开vim之后它是处于那种模式呢我们进入vim之后它默认是处于命令正常模式的。命令模式主要用于控制屏幕光标的移动字符、字或行的删除移动复制某区段及进入插入模式或者末行模式下。那在命令模式下如果你去按一些按键会发现是没有反应的也输不进去东西除非你按到切换模式的命令切换到其他模式下了可能会有反应。那么如果你进入vim之后想对文件进编辑那么需要进入到插入模式下那怎么进入呢从命令模式切换到插入模式的方法不止一种现在我们先记住一种就是按键盘上的i这个键就可以从命令模式切换到插入模式这是我们打开之后默认的样子现在在命令模式下。我现在敲i这个键我们会看到左下角就会出现-- INSERT --的字样此时我们就进入插入模式了那现在我们就可以向文件里面插入内容了此时它就像一个记事本一样我们可以随意写入和删除内容。那然后我编辑好了想退出vim怎么退出那在插入模式我们一般是不能退出的那怎么做呢我们先回退到命令模式按键盘上的Esc键就可以从其它模式回退到命令模式进入命令模式后如果要退出还需要我们进行到另一个模式——末行模式。在命令模式下输入shift ;, 其实就是输入:就可以进入末行模式如果成功进入我们就会看到最底行有一个然后我们输入qquit回车就可以退出。但是呢由于我们对文件进行了修改直接q退出可能会退不了所以我们要wqwq就代表保存写入的内容并退出保存退出末行模式下输入wq然后回车就退出来了并且我们刚才写入的内容也成功保存了。再给大家补充一点注意事项如果你不知道自己当前处在什么模式下了那你就无脑的去按Esc就会回到命令模式下然后再根据自己的需要切换到其它模式下。另外我们退出的时候一般都是wq保存退出如果带上表示强制退出有些文件退出的时候可能会报提示不会直接退出当然你要是没权限强制也没用。4. vim命令集首先为了后面方便演示和讲解先给大家说一个在末行模式下列出行号和取消行号的操作现在再次用vim打开上面我们创建的文件test.c打开之后默认处在命令模式下然后我们shift ;即进入末行模式那现在我们想让里面的文本显示行号怎么做呢输入set nu然后回车即可如果想取消行号set nonu上面说这个命令是在末行模式下的。但是我们要学的大部分命令其实都是在命令模式下用的指令。4.1 命令模式命令集那下面我就边演示边给大家讲解命令模式下命令集首先来一个复制粘贴现在我的光标在第5行。那我现在向复制光标所在的这一行按yy就可以复制光标所在行的内容按完yy并没有什么反应但是此时已经复制好了。那我想把复制的内容粘贴到当前光标位置的下一行。对应的指令是p按一次就粘贴一次一直按就一直粘贴当然你如果按100p就直接粘100行即npp直接粘n行到光标所在行之后那刚才yy是复制一行的内容如果想一次复制n行可以吗当然nyy就可以一次复制n行从当前行开始向下带上当前行一共n行比如我现在想复制文本前3行那我把光标放到第一行然后敲3yy就可以把前3行复制是否成功复制前3行我们可以粘贴出来看一下现在我已经敲了3yy了然后我把光标移到第3行把它粘到第3行下面我再敲p去粘贴就可以了。同样的np就可以粘n次。依次撤销上一次操作刚才复制的3行我再敲个20p粘贴20次然后我后悔了我想把刚才粘贴的操作撤销掉可以吗?当然按u就可以撤销你上一次的操作u可以连续执行多次这是敲了20p之后的样子我按u我们看到下面会显示变化的信息再按u再按u可以连续撤销对撤销进行撤销恢复那如果我现在对刚才的撤销操作反悔了我想撤销刚才的撤销操作注意理解这句话的意思能做到吗可以的。ctrl r对之前的撤销进行恢复这是之前连续撤销之后的样子我敲ctrl r再敲ctrl r就可以这样一直恢复恢复到不能再恢复为止剪切删除上面讲了复制粘贴那剪切怎么做比如现在光标在第3行我们把第3行的内容进行剪切那我就在光标在第3行的情况下敲dd此时原来第3行的内容就没了如果此时不进行操作的话就相当于删除那如果我想把它剪切到现在的11行那就把光标移到第10行敲p就粘到10行下面了就剪切完成了那如果想一次剪切多行同样的ndd然后把光标移到你想要的位置敲p就可以了不继续操作就是删除掉对应的n行我现在3dd3行就没了再敲p就粘到光标所在行下面当然照样可以np然后给大家说一下如果我们进行了一些操作之后进入末行模式对刚才的修改进行保存w了保存之后依然可以用u 或者Ctrlr 进行撤销和恢复保存之前的操作。但是如果你保存退出了再次用vim打开就无法进行撤销恢复的操作了大家可以试一下这里就不详细的演示了移动光标上下现在我把刚才的文本搞的行数多一点然后来学一些移动光标的操作我先粘贴个1000行内容然后我现在想把光标移动到最后一行怎么做现在在第1行ShiftG即输入大写g就可以直接把光标移动到文本最末尾然后我又想快速回到第1行gg移动光标到文本开始直接敲gg就回到第1行了那现在我想把光标定位到第n行比如第88行第456行怎么做呢nShiftG将光标定位到指定的第n行比如78ShiftG移动光标左右刚才学的是光标的上下移动那左右移动呢比如如何快速定位到文本的最后一行现在有这样一行长文本我想直接定位到最后一个字符Shift4移动到光标所在行文本的“行尾”直接定位到行首Shift6移动到光标所在行文本的“行首“另外还有w小写光标从当前位置跳到下个”单词“的开头但是注意这里的单词不一定就是我们平时所熟悉的那种英文单词大家可以多试一试看一下它的一个效果有些东西文字没办法很好地给大家说清楚我来简单演示一下比如现在光标在p的位置我现在敲w再敲相信大家能看出来它是怎么移动的。当然它也支持加nnw就相当于敲n次w比如现在在开头敲3w那w是向后移动向前呢b光标回到上个”单词“的开头nb相当于敲n次b敲b敲3b文本内容大小写切换在vim中还可以快速的进行大小写的切换比如我现在想把圈出来的字符小写变成大写Shift ~快速大小写切换原来大写变成小写原来小写变大写现在光标在h的位置此时我敲Shift ~它把h变成大写H并且光标自动移到下一个位置所以如果我们按着Shift ~不放他就可以一直向后转换大小写当然也可以快速把大写换成小写替换接下来学习一些替换操作r替换光标所在处的字符即先按r键在按自己想替换的字符就可以完成替换我现在先按r再按m如果你想再换成其它字符就再按r然后再按你想替换的字符。nr替换光标所在处向后的n个字符我现在想把从当前光标位置开始向后的10个字符替换成x那就敲10r 再敲x4.2 替换模式刚才我们学的是把1个或n个字符替换成另外一个字符但这样即使替换多个它们被替换的是同一个字符。那如果我们想按自己的想法替换成不同的任意字符呢比如我现在想把这一段改成abcdefg...不同的字母怎么做呢我们敲ShiftR其实就是大写R敲完之后我们会发现左下方出现-- REPLACE --其实ShiftR是让我们进入了另一种模式——替换模式然后我们直接敲我们想替换的字符它就会依次往后进行替换我们替换完一个光标会自动往下一个移动。那替换完毕呢Esc就又回到命令模式了左下角就没有replace了4.3 命令模式命令集续我们再回到命令模式继续学一些命令删除x每按一次删除光标所在位置的一个字符比如光标现在在a的位置我按一次xa就被删掉了光标到b了我继续按就继续删按着x不放就一直往后删nx一次删除n个我现在想把abcde这5个一次删掉那么敲5x就可以一次删掉5个另外刚才的删除都是从左往右删如果从右往左呢Shift X即大写X删除光标所在位置前面位置的一个字符n Shift X删除光标所在位置前面的n个字符现在光标在g的位置我按一次Shift X按5 Shift X4.4 上下左右移动光标然后想给大家说一下我们上下左右移动光标的时候可以用键盘上面的上下左右的四个键去移动但是我们一般不使用这个而是使用h左、j下、k上、l右那为什么呢首先这四个键离我们常用的这些键比较近当然这是最不重要的理由。最重要的原因是因为以前的键盘上根本都没有带箭头的上下左右四个键不过现在vim基本也都兼容上下左右四个键的使用建议还是使用hjkl四个键4.5 插入模式的切换上面我们说了从命令模式进入插入模式的方式不止一种上面只讲了一个i但其实呢有好多个我们这里主要学习三个按「i」切换进入插入模式「insert mode」光标位置不动按「a」进入插入模式后光标会移动到原来位置的下一个按「o」进入插入模式后会新起一行并且光标移动到新的一行的起始位置大家可以自己试一试看看效果4.6 末行模式命令集末行模式上面我们已经学过几个操作了set nu显示行号set nonu取消显示行号q退出wq保存退出wq!强制保存退出下面我们再来学几个注意是在末行模式下搜索匹配/文本内容匹配对应的文本内容并高亮显示然后我按n可以依次定位到下一个匹配项如果找不到会报错不退出vim直接执行终端界面的命令如果我们用vim写完一个test.c想编译运行它我们之前的方法就是保存退出vim然后去编译执行它。但其实不退出vim也可以搞我现在已经写好了想编译它可以不用退出vim在末行模式下输入然后敲对应的命令就好了比如编译这个test.c回车他就会执行对应命令并跳转到这个页面显示对应的结果我们按任意键回到vim中然后我们可以查看一下有没有生成可执行程序!ls -l回车已经生成了然后!./a.out执行就执行成功了替换末行模式下也可以进行一些替换操作比如我现在想把所以hello替换成HELLO那这样做回车就替换好了多文件分屏显示我们平时写代码可能还会多文件分离编译或者头文件源文件分开就像这样那我们在vim上可以不可以这样搞呢可以的。比如我现在把test.c修改成这样然后我想在创建一个头文件test.h把show函数的声明和头文件的包含放到test.h里面怎么做呢我们还没创建test.h文件不过我们直接用vim打开文件如果文件不存在最后我们选择保存的话他会自动帮我们创建所以在末行模式下我直接输入vs test.h它就自动帮我创建好并打开且分屏显示出来现在分屏了你去看你的光标在那个文件你当前编辑的就是哪个文件那如何切换到另一个文件呢切换的话需要在命令模式下按住Ctrl 不放然后快速按两次w就可以切换然后我把它编辑成这样当然你还可以继续创建新文件去分屏但我们一般不会分太多那样体验也不好那这种情况我们怎么退出呢比如我现在要退出test.c那首先要确保光标在test.c里面然后进入末行模式还是wq就可以保存退出了此时就只剩test.h了继续保存退出我们看到test.h也自动生成了编译运行照样是可以的然后再给大家提一点我们进入vim之后尽量就不要在使用鼠标操作了5. vim的配置Vim 的配置是用来自定义 Vim 的行为和外观的设置。通过修改 Vim 的配置您可以根据自己的喜好和需求定制编辑器的各种功能和界面元素。vim在启动的时候会自动在当前用户的目录下寻找配置文件——.vimrc自己配置的话可能需要我们自己创建这个文件配置的内容就放在该文件里面如果没有就用默认的。一个用户一个vim配置我们所做的配置不会影响其他用户。那关于vim的配置网上也可以找到很多相关的内容这里就不详细介绍了。配置好大概就是这样的6. 解决普通用户不能sudo的问题我们之前的文章里遗留了一个问题就是我们想使用sudo去对一些指令进行提权的时候可能用不了sudo另外大家看图我们会发现一个奇怪的问题我们想用sudo提权但是他让我们输入的却不是root的密码而是当前的普通用户的密码。但是我输了自己的密码还是用不了。那这是怎么回事呢我当前这个用户之所以用不了sudo是因为我并不在系统的信任列表里面。如果一个新的普通用户无法使用 sudo有可能是因为该用户还没有被添加到授权列表中或者没有正确配置 sudo 权限。在默认的配置下普通用户是没有权限使用 sudo 命令的。这是因为 sudo 是用于以超级用户root权限执行命令的工具而普通用户通常只被分配了较为有限的权限。sudo 的目的是确保系统的安全性避免普通用户在没有适当权限的情况下执行危险或敏感的操作。只有经过授权的用户才可以使用 sudo并且需要提供自己的密码来进行身份验证。那我们如何把一个普通用户添加到信任列表里面或者说如何对一个普通用户进行授权呢要允许特定的用户使用 sudo需要 root 用户或具备相应权限的用户编辑 /etc/sudoers 文件。我们可以看一下这个文件它的拥有者和所属组都是root。所以要给普通用户授权的话一般需要超级用户root进行操作因为root一般不受权限约束。那具体怎么做呢我们用vim打开对应的/etc/sudoers这个文件然后怎么添加呢我们找到这一行然后直接把100行复制一下拷贝到下面再把root改成你当前的普通用户名就行了然后保存退出退出不了直接强制退出然后我们再返回普通用户就可以使用sudo了。如果你不想让它使用了把它从对应的配置文件里面删掉就行。