[转帖]整理常用的 vim 命令

整理,常用,vim,命令 · 浏览次数 : 0

小编点评

:s/we/WE/gc :r !date --可视 块--字样 j k h l :s/we/WE/gc :r !date :s/we/WE/gc :r !date :s/we/WE/gc :r !date :s/we/WE/gc :r !date :s/we/WE/gc :r !date

正文

vim 是一款功能强大的文本编辑器,它是Linux下常用的编辑器之一,对于熟练掌握了 vim 的人来说,用它编辑文件,方便又快捷,能极大的提高工作效率

vim 功能强大,对应的命令也非常的多,对于初学者来说,看到这么多的命令容易打退堂鼓,想当初,自己刚接触vim的时候,由于不熟悉vim,每一个命令都要上网查阅,真的是举步维艰

其实,工作中常用的vim命令也就那么些,只需学习这些常用的命令,勤加练习,假以时日定能熟练的掌握它们,进而就能解决大部分的编辑问题

本文结合我自己工作中使用vim的经验,整理了一些常用的vim命令

vim 的模式

进入vim之后,会有多种不同的模式,模式之间的切换,让你只需要通过键盘,就能完成文本的编辑,这也是vim存在多种模式的原因,vim主要有以下几个模式

  • 正常模式

刚进入vim界面的时候是正常模式,复制、粘贴操作都是在这个模式下进行的

  • 插入模式

文本内容输入,修改是在这个模式下进行的

可以按 i或者 I进入到插入模式,在插入模式下,按 esc会返回到正常模式

  • 命令模式

输入或者修改完之后,需要保存退出,这个时候vim就会进入到命令模式

esc+ :进入命令模式,再次按 esc返回正常模式

  • 可视模式

可视模式是对文件进行大量重复操作的时候,可以一次性执行完成的功能

可通过 vVctrl v进入可视模式

常用命令

  • 打开、保存、另存为、退出
vim file        #打开文件
vim             #打开临时文件,保存的时候需要制定文件名

:w #保存
:w file #另存为

:q #退出
:wq #保存并退出
:x #保存并退出
ZZ 或 shift zz #保存并退出
:q! #不保存退出,会丢失数据

    例如: vim a.txt命令打开 a.txt文件,假如a.txt存在的话,打开已有的,不存在的话,则会打开一个新的文件

    • 光标移动
    k、j            #光标向上、向下移动一行
    h、l            #光标向左、向右移动一个位置, l 是字母L的小写
    

    ^ #光标移动到当前行首
    $ #光标移动到当前行尾

    w #光标向前移动一个单词
    b #光标向后移动一个单词

    gg #光标移动到文件开头
    G 或 shift g #光标移动到文件末尾
    n G #光标移动到指定行号的行首, n 表示行号

    ctrl f #向下翻一页
    ctrl b #向上翻一页

      分别按 k j h l能实现光标上下左右移动,键盘上下左右箭头的按键也表示方向键,它跟 k j h l有什么区别呢

      如果是图形界面和远程终端都可以使用,如果是字符终端的时候,键盘上下左右箭头的按键有时会出现乱码,所以最好统一使用 k j h l

      • 插入
      i               #光标前插入
      I               #当前行首插入
      

      o #当前行后面插入一行,光标移动到插入行的行首,o 是字母,不是数字0
      O #当前行前面插入一行,光标移动到插入行的行首,O 是字母,不是数字0

      a #当前光标后插入
      A #当前行尾插入

        小技巧: 当前处于正常模式, 输入数字 10,按i进入插入模式, 接着输入字母 #,最后按esc键,此时,在光标所在行会出现 10 个#字符,相当于插入了10个#,当你想在文本中插入一行字符作为分割线的时候,就能应用到这个小技巧

        • 复制、粘贴、剪切
        yy 或 Y             #复制光标所在行
        n yy 或 n Y         #从光标行向下复制 n 行
        y$                  #复制从光标位置到行尾
        y^                  #复制从光标位置到行首
        yw                  #复制一个单词
        ynw                 #复制n个单词,n为单词个数
        

        yl #复制光标位置的一个字符, l 是字母L的小写形式
        ynl #从光标位置向右边复制n个字符, 光标位置也算一个字符

        yh #复制光标位置左边的一个字符,光标位置不计算在内
        ynh #从光标左边位置向左边复制n个字符,光标位置不计算在内

        dd #剪切(删除)光标所在行
        ndd #从光标行向下剪切(删除)n行
        d$ 或者 D #从光标位置剪切(删除)到行尾
        d^ #从光标前一个位置剪切(删除)到行首

        dl #剪切(删除)光标位置的字符
        dnl #从光标位置向行尾方向剪切(删除)n个字符
        dh #剪切(删除)光标坐标位置的一个字符
        dnh #从光标左边位置向行首方向剪切(删除)n个字符

        dw #剪切(删除)光标位置的一个单词
        dnw #从光标位置向行尾方向,剪切(删除)n个单词,光标位置的单词也算在内

        p #在当前光标后粘贴
        P 或 shift p #大写的字母p, 再当前光标前粘贴

          如果是复制一行内容,再按小写字母p则是在当前光标下一行进行粘贴,而不是在当前光标后面粘贴,同样的,如果是按大写字母P则是在当前光标上一行粘贴

          如果一个单词比较长,通过dw剪切一个单词时,剪切的是光标位置到光标位置单词的结尾字符串

          比如,现有一个字符串 9ssxphu7898%mn ,假如光标位于字符 h 位置,按dw,此时剪切的字符串是 hu7898%mn

          • 删除、替换字符
          x   #每次删除光标处的字符,删除之后,光标后面的字符串向光标方向移动一个位置
          

          X #每次删除光标前面一个字符,删除之后,光标以及后面的字符串会向行首方向移动一个位置

          r #替换光标位置的一个字符

            替换字符的方法: 光标移动到准备替换的字符位置,按 r键,然后按替换之后的字符键,光标位置的字符就被目标字符替换了

            • 撤销、重做
            u       #撤销
            ctrl r  #重做
            

              在多行操作的时候,有时候会出现误操作,这时候可以按 u键撤销误操作

              可以多次进行撤销,当你每按一次 u键的时候,之前做过的操作就会被撤销一次

              如果发现撤销的时候进行了错误的撤销操作,希望把刚才做过的事情重做一次,可以按 ctrl r键进行重做

              • 查找、替换
              /string         #查找指定字符串,按n向后查找下一个,按N向前查找下一个
              

              /string\c #查找指定字符串,不区分大小写,按n向后查找下一个,按N向前查找下一个

              /string\C #查找指定字符串,区分大小写,按n向后查找下一个,按N向前查找下一个

              😒/old/new #用new字符串替换当前行中第一次匹配达到的old字符串

              😒/old/new/g #用new字符串替换当前行中所有的old字符串

              :n,ms/old/new #第n行到第m行之间,用new字符串替换每一行中第一次匹配到的old字符串

              :n,m/s/old/new/g #第n行到第m行之间,用new字符串替换每一行中所有匹配到的old字符串

              :%s/old/new/g #用new字符串替换文件中所有匹配到的old字符串

                如果想要像windows上记事本查找替换一样,每次替换之前有是否替换的确认,只需要在替换命令后面加一个c字符

                上面的例子中,:%s/we/WE/gc命令是把文件中所有的we字符串全部替换成WE字符串,每次替换之前人工确认,如果把命令中的 c字符去掉,就是自动全部替换功能了

                • 执行外部命令
                :! cmd   #执行cmd命令
                :r !cmd  #执行cmd命令,把命令的结果插入光标后面一行
                
                • 1
                • 2

                上面例子中,输入 :! date是在vim中执行 date命令,命令结果会显示在下面,再次按 ENTER键回到了vim

                当输入 :r !date时,```date``命令的结果插入到光标后面一行

                • 批量处理

                在可视模式下可以对文件进行批量的操作,比如: 批量选中,批量修改

                我们平常用的比较多的批量操作是块可视模式

                v               #字符可视模式,以字符为单位选择
                V 或 shift v     #行可视模式,以行为单位选择
                ctrl v          #块可视模式,以块为单位选择
                

                  上面例子中,在vim中按 ctrl v进入块可视模式,在屏幕的左下角有显示 --可视 块--字样

                  接着通过 j k h l选中了第6行到第9行中,每一行的前三列这一块字符串

                  然后按 shift i切换到插入模式,把前三列字符串修改为 123,修改的时候只有第6行显示修改过,修改完之后连续按两次 esc键,前三列就全部变成了123

                  紧接着,再次按 ctrl v进入快可视模式,选中第6行到第9行前两列,然后按 d键,就把前两列删除了

                  小结

                  本文介绍了vim的一些常见用法,掌握这些常见用法足够满足工作的需要了,关于vim的命令非常多,远远不止本文介绍的内容,更多的用法请参考vim文档

                  与[转帖]整理常用的 vim 命令相似的内容:

                  [转帖]整理常用的 vim 命令

                  vim 是一款功能强大的文本编辑器,它是Linux下常用的编辑器之一,对于熟练掌握了 vim 的人来说,用它编辑文件,方便又快捷,能极大的提高工作效率 vim 功能强大,对应的命令也非常的多,对于初学者来说,看到这么多的命令容易打退堂鼓,想当初,自己刚接触vim的时候,由于不熟悉vim,每一个命令都

                  [转帖]shell 篇 用上今天分享的快捷键以后,我早下班了一小时

                  每次看着别人操作 shell 的时候,快捷键用得飞起,尤其是那个快速搜索历史命令,避免低效的↑↓键切换历史命令,很装逼有木有。。 废话不多说,下面是我整理的常用快捷键,真的可以提高自己的工作效率的,很不错!~ 一、常用快捷键小技巧 以下快捷键,都是一些常用的,记住这些命令,你的工作效率就会大大提升。

                  [转帖]Linux Shell:date日期时间操作

                  https://www.jianshu.com/p/cc9ebb212a8e 整理Linux Shell脚本中常用的日期操作,给予date命令,主要用法总结 获得当前日期,时间戳,date,date '+%s' 日期解析(字符串转日期,时间戳转日期)date -d 日期格式化输出,date '+%'

                  [转帖]优化命令之sar——最牛命令

                  目录 一:sar命令概述 1.1sar概述 1.2sar常用选项 1.3常用参数 二:CPU资源监控 2.1整体CPU使用统计(-u) 2.2各个CPU使用统计(-P) 2.3将CPU使用情况保存到文件中 三:内存监控 3.1内存和交换空间监控 3.2内存分页监控 3.3系统交换活动信息监控 四:I

                  [转帖]PostgreSQL 日志参数解释 常用环境日志参数配置

                  1.常用日志参数 logging_collector = on/off 是否将日志重定向至文件中,默认是off(该配置修改后,需要重启DB服务),启动之后查看进程ps -ef|grep postgres,会多一个logger进程。 log_directory = 'pg_log' 日志文件目录,默认

                  [转帖]整理收藏:shell中的test条件测试

                  https://zhuanlan.zhihu.com/p/504991399 shell编程中经常会有很多需要逻辑判断的地方,比如一个文件/文件夹是否存在,字符串是否为空等等,而test就具有这样的优良传统,将我们需要的结果通过简单的表达式查询,从而通过状态码$?取值。 1.对文件类型的检测 -e:

                  [转帖]rabbitmq 启动问题整理

                  https://www.jianshu.com/p/00099f5a8491 mac 下利用brew 安装rabbitmq ,使用brew services start rabbitmq 启动出现 .erlang.cookie 权限问题 在用户目录下使用ls -al ,找到隐藏文件.erlang.c

                  [转帖]Linux:crontab要点整理(表达式,转义,权限管理,日志)

                  https://www.jianshu.com/p/fd46652f247e 摘要:Linux,crontab整理crontab的使用,包括cron表达式,设置和删除任务,权限管理,查看日志 crontab简介 crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任

                  [转帖]nginx调优参数整理总结

                  nginx性能优化考虑点 当我需要进行性能优化时,说明我们服务器无法满足日益增长的业务。性能优化是一个比较大的课题,需要从以下几个方面进行探讨: 当前系统结构瓶颈了解业务模式性能与安全 当前系统结构瓶颈 首先需要了解的是当前系统瓶颈,用的是什么,跑的是什么业务。里面的服务是什么样子,每个服务最大支持

                  [转帖]指令微调数据集整理

                  `https://blog.csdn.net/dzysunshine/article/details/130870398` 文章目录 开源指令数据集斯坦福数据链家数据Baize(基于少量种子问题的对话数据) 垂直领域数据集医疗领域的英文数据医疗领域的中文数据法律领域中文数据 COIG数据集(可商用的