linux 命令之vi

发布时间 2023-12-24 21:23:43作者: think的海角

1 开发者vi命令常见使用场景

1.1 linux环境下配置文件的修改

2 vi命令文件的打开和关闭

2.1 文件的打开

* vi /project.log   光标定位于首行首字母
* vi +# /project.log :打开文件,并定位于第#行 
* vi + /project.log :打开文件,定位至最后一行
* vi +/PATTERN /project.log : 打开文件,定位至第一次被PATTERN匹配到的行的行首

2.2 文件的关闭

* 末行模式:
* :q  退出  没有动过文件
* :q! 不保存并退出  动过了,后悔了

* :w 保存
* :w! 强行保存

* :wq 保存并退出   动过了,不后悔
* :wq! 强制保存并退出   动过了,不后悔
* (w 保存;q 退出; !强制)三者组合

3 vi编辑器模式

* 编辑模式:按键具有编辑文本功能:**默认打开进入编辑模式**
* 输入模式:按键本身意义
* 末行模式:接受用户命令输入

3.1 编辑模式切换到输入模式

* i: 在当前光标所在字符的前面,转为输入模式;
* a: 在当前光标所在字符的后面,转为输入模式;

* o: 在当前光标所在行的下方,新建一行,并转为输入模式;
* O:在当前光标所在行的上方,新建一行,并转为输入模式;

* I:在当前光标所在行的行首,转换为输入模式
* A:在当前光标所在行的行尾,转换为输入模式

3.2 编辑模式切换到末行模式

* : (冒号即可切换)

3.3 输入模式(或末行模式)切换到编辑模式

* ESC

3.4 编辑模式

* **移动光标**
      **字符 (对于普通开发,没必要记,经常会忘,用上下左右键就行)**
          h: 左;j: 下;k: 上;l: 右
      **单词   (上下左右键可以代替,对开发意义不大)**
          w: 移至下一个单词的词首
          e: 跳至当前或下一个单词的词尾
          b: 跳至当前或前一个单词的词首
      **行内**
          0: 绝对行首
          ^: 行首的第一个非空白字符
          $: 绝对行尾
      **行间**
          G:文章末尾
          3G:第3行
          gg:文章开头
      **翻屏**
          ctrl+f :将屏幕向文件尾方向翻滚一整屏
          ctrl+b:将屏幕向文件首方向翻滚一整屏

* **删除&替换单个字符(意义不大,对于开发者,命令使用的少)**
      x:删除光标位置字符
      3x:删除光标开始3个字符
      r:替换光标位置字符

* **删除命令**
      dw 删除光标所在单词
      dd 删除光标所在整行

* **复制粘贴**
      yw 复制光标所在单词
      yy 复制光标所在整行 
      P 粘贴

* **撤销&重做**
      u   撤销
      ctrl+r  重做 撤销的操作
      .  重复上一步的操作

3.5 末行模式

  * **set:设置**
        set nu  number
        set nonu nonumber
        set readonly ----还是可以编辑,只是给了一个警告提示

  *** /:查找**
        /after   --定位到首个字符所在行的行首非空白字符,
        n,N    --n向下搜索匹配字符;N向上搜索匹配字符,
        ?向上查找 (和/ 是相反的,?从当前光标所在位置,向文件上方查找;/ 从当前光标所在位置,向下方查找。 n 是下一个,以/方式向下搜索,则下一个为下面紧邻的一个;以?方式搜索, 
        则下一个为上面紧邻的一个。N反之。)

  * **s查找并替换**
        :**s/str1/str2/gi**
            /:临近s命令的第一个字符为边界字符:/,@,#
            比如:str1/ 要替换为 str2  => :s#str1/#str2#g
            g:一行内全部替换
            i:原字段str1搜索忽略大小写
        **范围**
            n:行号
            .:当前光标行
            +n:偏移n行
            $:末尾行,$-3
            %:全文
        **区分大小写全文替换:**
        :%s/str1/str2/g      %替换范围为全文 s替换命令 /分隔符  str1原字符串  str2 目标字符串  g全行范围  :1,$s#str1/#str2#g  原字符串、目标字符包含/ 分隔符换为#、@ 

资源来源于:几年前北京尚学堂官网免费视频。