草庐IT

vim的基本操作

梨+苹 2024-05-09 原文


文章目录

vim是什么

简单理解:vi/vim都是多模式文本编辑器,但vim是vi的升级版本。vim是可运行在x window 、mac os、windows的多模式编辑器。

vim快捷键键位图

vim的模式

vim有很多种模式,但常见的模式有三种:命令/正常/普通模式(Normal mode);插入模式(insert mode);末行模式(last list mode);下面是三种模式的切换概览:

这个时候发现我们敲打键盘并不能像平时用记事本那样输入。这时候我们按i-就能进入插入模式!

我们可以看到左下角会显示**–INSERT–**就说明进入插入模式!进入插入模式后就能像利用记事本那样输入了。

当我们想进入底行模式或者输入完想退出时,按键盘左上角Esc就能回到命令模式!

回到命令模式后按住shift+:【:是键盘上L右边的那个键】就能进入底行模式!

进入底行模式就能看到左下角显示这个**:**

想回退到命令模式就按Esc!

🆗现在三种模式的切换讲述完毕

现在我们进入到命令模式的介绍。

命令/普通模式(Normal mode)

vim是没有鼠标操控的编辑器,所以我们要用命令来移动光标。

移动光标

上下左右

我们可以用键盘上的上下左右移动光标也可以用键盘上的

小写字母【h】:向左移动【j】:向下移动【k】:向上移动【l】:向右移动—来移动光标

那怎么在不熟练的情况下记忆呢

按h在里面的最左边不用说了向左
按j联想单词jump—往下跳—向下向下
按k联想单词king—高高在上—向上向上
按l在里面的最右边不用说了向右

这下能记住了吧

其余移动光标

+号不用按,这里用作连接表示

按shift+$ ——shift+4移动到光标所在行的“行尾”:行右
按shift+^——shift+6移动到光标所在行的“行首”:行左
按gg——{连点两下小写g}进入文本开头
按shift+g——G进入文本末端
按n+shift+g——G跳转光标到指定第n行开头;n是行号
按w光标跳到下个单词的开头
按e光标跳到下个单词的字尾
按b光标跳到上个单词的开头
以上是常见移动光标的指令如果觉得不够用可以上百度查噢

文本操作

+号不用按,这里用作连接表示

按 u撤销(可多次按)
按ctrl+r撤销的恢复(可多次按)
按ctrl+g显示光标所在行的行号
按yy复制光标所在行(一行)
按n+yy复制n行:从光标所在行起往下复制n行的内容
按 p粘贴一次复制内容
按n+p粘贴n次复制内容
按dd删除光标所在行
按n+dd从光标所在行起往下删除n行
dd+p剪切一次刚刚删除的内容(有剪才有切-有删除才有剪切)
按ndd+p剪切n次刚刚删除的内容
按c+w从光标位置往后删除当前单词或字符并进入插入模式
按c+n+w从光标位置往后删除n个当前单词或字符并进入插入模式
按 x——小写x从光标所在位置起往后删除一个字符
按 n+x从光标所在位置起往后删除n个字符
按shift+x——大写X从光标所在位置起往前删除一个字符
按n+shift+x——n+大写X从光标所在位置起往前删除n个字符
按shift+~ ——1左边那个字符~(文本大小写切换)从光标往后的小写转大写/大写转小写
按n+r+字符——比如我按3+r+a那么从当前光标往后的三个字符都变为a局部替换文本
shift+r——R进入替换模式可以整体替换

按住shift+~演示

进入替换模式:shift+r=R

进入替换模式后可以看到左下角有–REPLACE–

进入替换模式后在文本上输入导致文本替换!演示如下:
按shift+r进入替换模式后替换文本:

插入模式(insert mode)

按i进入插入模式
按a从光标所在位置的下一个位置进入插入模式
按o从光标所在行的下一行进入插入模式

底行模式(last list mode)

进入底行模式:在命令模式按shift+:

进入底行模式后输入命令:

输入set nu显示行号
set nonu不显示行号
wq保存并退出
w!强制保存
q!强制退出(不保存当前修改)
wq!强制保存并退出

下面是**按shift+:**进入底行模式后输入set nu 和 set nonu的演示

vs+文件名——比如我输入vs trx.test那么会在当前界面分出另一个vim文本(trx.test) 分出来后光标在新的文本,当然光标只能在一个文本,所以只能操控一个文本,想要操控别的文本需要光标切换文本【另: 当然多次vs也可以分出多个文本】
ctrl+ww——ctrl+点击两次ww光标切换文本
按**!**不退出vim切换到linux界面;随后按任意键回到vim
!+ 指令可以不退出vim切换到linux界面并执行指令
%s/destination/source/g把当前文本的所有destination换成source;【比如%s/printf/cout/g—把当前文本的所有printf替换为cout】

vs演示

%s/printf/cout/g

vim的配置

1.在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。

2.而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”。例如,/root目录下,通常已经存在一个.vimrc文件,如果不存在,则创建之。

3.切换用户成为自己执行 su ,进入自己的主工作目录,执行 cd ~

4.打开自己目录下的.vimrc文件,执行 vim .vimrc

具体怎么配置呢?

第一步:查看有没有.vimrc文件,没有就创建(xxx为你自己用户名字)

第二步:把需要的指令输入到.vimrc文件里(至于想要什么配置要去网上查噢)

1.修改.vimrc文件:vim .vimrc 把指令写进去并保存

比如

2.回到Linux界面:输入source .vimrc 等待它生效(如果发出生效错误说明指令不行~)

然后去vim个文件输入等待看看有没有生效 比如创建文件test.c并vim它看有没有配置好的效果

但是!现在都不需要了,现在有一键配置!

vim一键配置

我们可以进入gitte搜:vimforcpp

点进去然后在下面找到

当然我已经复制过来了:

curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

把上面的一串输入到Linux里

按回车,然后输入root密码等待安装就好了;然后我们按照要求重启一下云服务器;然后在随意vim一个文件就能看到这样,那么就是vim的一键配置完成拉!

好啦,关于vim的保姆级教学就到这里,制作不易,看到这里的观众老爷们点点点赞关注收藏走一波~

有关vim的基本操作的更多相关文章

  1. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  2. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  3. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  4. ruby-on-rails - 使用 HTTParty 的非常基本的 Rails 4.1 API 调用 - 2

    Rails相对较新。我正在尝试调用一个API,它应该向我返回一个唯一的URL。我的应用程序中捆绑了HTTParty。我已经创建了一个UniqueNumberController,并且我已经阅读了几个HTTParty指南,直到我想要什么,但也许我只是有点迷路,真的不知道该怎么做。基本上,我需要做的就是调用API,获取它返回的URL,然后将该URL插入到用户的数据库中。谁能给我指出正确的方向或与我分享一些代码? 最佳答案 假设API为JSON格式并返回如下数据:{"url":"http://example.com/unique-url"

  5. ruby - 如何使用 Selenium Webdriver 根据 div 的内容执行操作? - 2

    我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption

  6. ruby-on-rails - 如何处理 Grape 中特定操作的过滤器之前? - 2

    我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?

  7. ruby-on-rails - 在 Ruby on Rails 中发送响应之前如何等待多个异步操作完成? - 2

    在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.

  8. ruby - 从 Rakefile 打开 Vim? - 2

    我正在为个人笔记创建一个日志应用程序,并且在我的Rakefile中包含以下内容:task:newdoentry_name="Entries/#{Time.now.to_s.gsub(/[-\:]+/,'.').gsub(/.0500+/,'')}.md"`touch#{entry_name}``echo"#$(date)">>#{entry_name}`end我想包括的最后一部分是Vim文本编辑器的打开,但我不知道如何打开它,就像我直接从bash终端调用它一样。我试过:vim#{entry_name}但不幸的是,我认为它们都将其作为后台进程打开。我一直在引用“6WaystoRunShe

  9. ruby - 在 Ruby 中是否有一种惯用的方法来操作 2 个数组? - 2

    a=[3,4,7,8,3]b=[5,3,6,8,3]假设数组长度相同,是否有办法使用each或其他一些惯用方法从两个数组的每个元素中获取结果?不使用计数器?例如获取每个元素的乘积:[15,12,42,64,9](0..a.count-1).eachdo|i|太丑了...ruby1.9.3 最佳答案 使用Array.zip怎么样?:>>a=[3,4,7,8,3]=>[3,4,7,8,3]>>b=[5,3,6,8,3]=>[5,3,6,8,3]>>c=[]=>[]>>a.zip(b)do|i,j|c[[3,5],[4,3],[7,6],

  10. ruby-on-rails - 如何让 Rails View 返回其关联的操作名称? - 2

    我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam

随机推荐