文本编辑器:

  文本:纯文本,ASCII text;Unicode;
文本编辑种类:
  行编辑器:sed
  全屏编辑器:nano, vi

  vi: Visual Interface
  vim: Vi IMproved

vim:
  模式化的编辑器

    基本模式:
      编辑模式,命令模式
      输入模式
      末行模式:
        内置的命令行接口;
  
  打开文件:
    # vim [options] [file ..]
      +#:打开文件后,直接让光标处于第#行的行首;
      +/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首;

  模式转换:
    编辑模式:默认模式
      编辑模式 --> 输入模式:
        i:insert, 在光标所在处输入;
        a: append,在光标在处后方输入;
        o:在光标所在处的下方打开一个新行;
        I:在光标所在行的行首输入;
        A:在光标所在行的行尾输入;
        O:在光标所在处的上方打开一个新行;

      输入模式 --> 编辑模式
        ESC

      编辑模式 --> 末行模式
        :

      末行模式 --> 编辑模式
        ESC

  关闭文件:
    ZZ:保存并退出;

    :q 退出
    :q! 强制退出,不保存此前的编辑操作
    :wq 保存并退出;
    :w, :q
    :x 保存并退出;
    :w /PATH/TO/SOMEFILE

  光标跳转:

    字符间跳转
      h:左
      j:下
      k:上
      l:右

      #COMMAND:跳转由#指定的个数的字符;

    单词间跳转
      w:下一个单词的词首;
      e:当前或后一个单词的词尾;
      b:当前或前一个单词的词首;

      #COMMAND:跳转由#指定的个数的单词;

    行首行尾跳转
      ^:跳转至行首的第一个非空白字符;
      0:跳转至行首;
      $:跳转至行尾;

    行间跳转
      #G:跳转至由#指定的行;
      1G, gg:第一行;
      G:最后一行;

    句间跳转:
      )
      (

    段间跳转
      }
      {

  翻屏:
    Ctrl+f:向文件尾翻一屏
    Ctrl+b:向文件首部翻一屏
    Ctrl+d:向文件尾部翻半屏
    Ctrl+u:向文件首部翻半屏
    Enter:按行向后翻

vim的编辑命令:

  字符编辑:
    x:删除光标所在处的字符;
    #x:删除光标所在处起始的#个字符;

    xp:交换光标所在处的字符与其后面的字符的位置;

  替换命令(replace):
    r:替换光标所在处的字符;
    rCHAR

  删除命令:
    d:删除命令,可结合光标跳转字符,实现范围删除;
    d$:
    d^:

    dw:
    de:
    db:
      #COMMAND:

    dd:删除光标所在处的行;
      #dd:删除光标所处的行起始的共#行;

  粘贴命令(p, put, paste):
    p:缓冲区中的内容如果为整行,则粘贴在当前光标所在行的下方;否则,则粘贴至当前光标所在处的后方;
    P:缓冲区中的内容如果为整行,则粘贴在当前光标所在行的上方;否则,则粘贴至当前光标所在处的前方;

  复制命令(yank, y):
    y:复制,工作行为相似于d命令;
    y$
    y^
    y0

    ye
    yw
    yb
    #COMMAND

    yy:复制一整行
    #yy:复制#行

  改变命令(change, c):
    编辑模式 --> 输入模式,实现删除操作;
    c$
    c^
    c0

    cb
    ce
    cw
      #COMMAND

    cc:删除光标所在的行,并转换为输出模式;
      #cc:

其它编辑操作:

  可视化模式:
    v:按字符选定;
    V:按行选定;

    结合编辑命令使用:d, c, y

  撤销(undo)操作:
    u:撤销此前的操作;
    #u:撤销此前的#个操作;

  撤销此前的撤销:
    Ctrl+r

  重复执行前一个编辑操作:
    .
vim自带的练习教程:vimtutor

vim末行模式:
  内建的命令行接口

  (1) 地址定界
    :start_pos[,end_pos]
    #:特定的第#行,例如5即第5行;
    .:当前行;
    $:最后一行;
    #,#:指定行范围,左侧为起始行,右侧为结束行;
    #,+#:指定行范围,左侧为超始行绝对编号,右侧为相对左侧行号的偏移量;例如:3,+7
      .,$-1
      1,$
    %:全文
    /pattern/:从光标所在处起始向文件尾部第一次被模式所匹配到的行;
      /first/,$
    /pat1/,/pat2/:从光标所在处起始,第一次由pat1匹配到的行开始,至第一次由pat2匹配到的行结束之间的所有行;

  可同编辑命令一同使用,实现编辑操作:
    d
    y
    c

    w /PATH/TO/SOMEFILE:将范围内的文本保存至指定的文件中;
    r /PATH/FROM/SOMEFILE:将指定的文件中的文本读取并插入至指定位置;

  (2) 查找
    /PATTERN:从当前光标所在处向文件尾部查找能够被当前模式匹配到的所有字符串;
    ?PATTERN:从当前光标所在处向文件首部查找能够被当前模式匹配到的所有字符串;
    n:下一个,与命令方向相同;
    N:上一个,与命令方向相反;

  (3) 查找并替换
    s:末行模式的命令;使用格式:
      s/要查找的内容/替换为的内容/修饰符
        要查找的内容:可使用正则表达式;
        替换为的内容:不能使用下则表达式,但可以引用;
          如果“要查找的内容”部分在模式中使用分组符号:在“替换为的内容”中使用后向引用;
          直接引用查找模式匹配到的全部文本,要使用&符号;
        修饰符:
          i:忽略大小写;
          g:全局替换,意味着一行中如果匹配到多次,则均替换;

        可把分隔符替换为其它非常用字符:
        s@@@
        s###

    示例:
      %s@\<t\([[:alpha:]]\+\)\>@T\1@g
      %s@\<t[[:alpha:]]\+\>@&er@g

    练习:
      1、复制/etc/grub2.cfg文件至/tmp目录中,用查找替换命令删除/tmp/grub2.cfg文件中以空白字符开头的行的行首的空白字符;
        %s@^[[:space:]]\+@@
      2、复制/etc/rc.d/init.d/functions文件至/tmp目录中,用查找替换命令为/tmp/functions文件的每个以空白字符开头的行的行首加上#;
        %s@^[[:space:]]\+[^[:space:]]@#&@g
      3、为/tmp/grub2.cfg文件的前三行的行首加上#号;

      4、将/etc/yum.repos.d/CentOS-Base.repo文件中所有的enabled=0替换为enabled=1,所有gpgcheck=0替换为gpgcheck=1;
        %s@\(enabled\|gpgcheck\)=0@\1=1@g

vim的多文件功能:
  多文件:
    vim FILE1 FILE2 ...

    在文件间切换:
      :next 下一个
      :prev 上一个
      :first 第一个
      :last 最后一个

    退出所有文件:
      :wqall 保存所有文件并退出;
      :wall
      :qall

  多窗口:
    -o:水平分割窗口
    -O:垂直分割窗口

  在窗口间切换:Ctrl+w, ARROW

  注意:单个文件也可以分割为多个窗口进行查看:
    Ctrl+w, s:水平分割窗口
    Ctrl+w, v:垂直分割窗口

定制vim的工作特性:

  注意:在末行模式下的设定,仅对当前vim进程有效;
  永久有效:
    全局:/etc/vimrc
    用户个人:~/.vimrc

  1、行号
    显示:set number, 简写为set nu
    取消显示:set nomber, set nonu
  2、括号匹配高亮
    匹配:set showmatch, set sm
    取消:set nosm
  3、自动缩进
    启用:set ai
    禁用:set noai
  4、高亮搜索
    启用:set hlsearch
    禁用:set nohlsearch
  5、语法高亮
    启用:syntax on
    禁用:syntax off
  6、忽略字符大小写
    启用:set ic
    禁用:set noic

  获取帮助:
    :help
    :help subject

课外作业:如何设置tab键缩进4个字符;

【Linux】【Shell】【text】Vim的更多相关文章

  1. 【Linux下自定义Shell终端提示符】

    目录 基本转义符 字体颜色 背景颜色 移动光标 @ Linux系统终端提示符的特征由系统环境变量 PS1(Prompt String One)定义. 我们可以通过命令echo $PS1来查看当前设置, ...

  2. 【Linux&amp;Unix--open/close/write/read系统调用】

    个人学习整理.如有不足之处,请不吝不吝赐教. 转载请注明:@CSU-Max 系列博文:      Linux&Unix学习第一弹 -- 文件描写叙述符与权限  Linux&Unix学习 ...

  3. 【Linux运维-集群技术进阶】Nginx+Keepalived+Tomcat搭建高可用/负载均衡/动静分离的Webserver集群

    额.博客名字有点长.. . 前言 最终到这篇文章了,心情是有点激动的. 由于这篇文章会集中曾经博客讲到的全部Nginx功能点.包含主要的负载均衡,还有动静分离技术再加上这篇文章的重点.通过Keepal ...

  4. 【linux之设备,分区,文件系统】

    一.设备 IDE磁盘的设备文件采用/dev/hdx来命名,分区则采用/dev/hdxy来命名,其中x表示磁盘(a是第一块磁盘,b是第二块磁盘,以此类推), y代表分区的号码(由1开始,..3以此类推) ...

  5. 【linux之挂载,Raid,LVM】

    一.挂载,卸载 挂载:将新的文件系统关联至当前根文件系统卸载:将某文件系统与当前根文件系统的关联关系移除 cat /etc/mtab 存储着已经挂载的文件系统 (跟 mount 一样) mount:显 ...

  6. 【linux之进程管理,系统监控】

    一.进程管理 前台进程:一般是指占据着标准输入和/或标准输出的进程后台进程:不占据默认开启的进程都是前台进程ctrl+C 中断ctrl+z 从前台转入后台bg 后台进程编号 让其在后台运行ls -R ...

  7. 【python中调用shell命令使用PIPE】使用PIPE作为stdout出现假卡死的情况——将stdout重定向为输出到临时文件

    在Python中,调用:subprocess.Popen(cmd, stdout = PIPE, stderr = PIPE, shell= true)的时候,如果调用的shell命令本身在执行之后会 ...

  8. 【Linux磁盘优化管理--RAID和LVM】

    在现阶段的企业环境中,为了数据的安全性及完整性必须要有一个合理的存储方案.面对着每秒可能产生超过几TB的数据,考虑到磁盘能不能实现 热冗余,及扩容,缩容.Linux给出了RAID(磁盘阵列)以及LVM ...

  9. 【Linux 内核网络协议栈源码剖析】网络栈主要结构介绍(socket、sock、sk_buff,etc)

    原文:http://blog.csdn.net/wenqian1991/article/details/46700177 通过前面的分析,可以发现,网络协议栈中的数据处理,都是基于各类结构体,所有有关 ...

  10. 【linux之链接,函数,随机数】

    一.链接 硬链接(hard link):同一个文件使用了多个别名.新建文件是已经存在的一个别名,,当原文件删除时,新建的文件仍然可以使用.硬链接和原来的文件没有什么区别,而且共享一个inode号.通过 ...

随机推荐

  1. git远程仓库、提交代码操作

    初始化仓库 1.初始化 git init #或 git clone 远程仓库地址 git init 后续要添加远程仓库,git clone不需要再添加 2.连接仓库 git remote add 远程 ...

  2. HVV奇兵—网页防篡改系统在网络安全实战演习中的妙用(上)

    近年来,网络安全实战演习受到各大关基单位的高度关注.对于网络安全实战演习的防守方,防火墙.Web应用防火墙.态势感知.EDR.蜜罐等都是较为常见的防守工具,而网页防篡改系统则鲜有露脸的机会-- 很多人 ...

  3. 大爽Python入门教程 2-1 认识容器

    大爽Python入门公开课教案 点击查看教程总目录 1 什么是容器 先思考这样一个场景: 有五个学生,姓名分别为: Alan, Bruce, Carlos, David, Emma. 需要给他们都打一 ...

  4. 体验.NET Core使用IKVM对接Java

    前言 与第三方对接最麻烦的是语言不同,因语言不同内置实现相关标准加密算法还是略微有所差异,对接单点登录场景再寻常不过,由于时间紧迫且对接方使用Java,所以留给我对接开发和联调的时间本就不多,于是乎, ...

  5. 说透 Docker:基础

    既然要学习 K8S,相信各位读者都已经使用过 Docker 了,Docker 的入门是比较容易的,但 Docker 的网络和存储.虚拟化是相当复杂的,Docker 的技术点比较多,在本章中将会深入介绍 ...

  6. oracle 连接数据库并查询,返回List<Map<String, Object>> 数据

    package JDBC; import java.sql.Clob; import java.sql.Connection; import java.sql.DriverManager; impor ...

  7. Kafka连接器建立数据管道

    1.概述 最近,有同学留言咨询Kafka连接器的相关内容,今天笔者给大家分享一下Kafka连接器建立数据管道的相关内容. 2.内容 Kafka连接器是一种用于Kafka系统和其他系统之间进行功能扩展. ...

  8. 随笔:关于.net core单文件AOT编译

    .Net Core单文件发布已经很流畅了(vs已支持图形化操作发布). 但类似Go或者Graalvm JDK的完全事前编译为本地机器码的红能功能,还未发布于.net 6特性中,还处于实验室中. 另外, ...

  9. CF1288

    A 考虑\(x + 1 = \sqrt{d}\)时在有理域上有最优界. 那我在整数域上附近取三个点取min就行了. // code by fhq_treap #include<bits/stdc ...

  10. CQC认证与3C认证的区别是什么

    中国CCC认证为中国的强制性认证(什么产品能做,CQC网上都要目录), CQC是自愿性的,(不能做CCC认证的产品,可以选择做CQC认证) 产品想要在中国市场上流通,特别是进入超市,商场,招标工厂等的 ...