文本编辑器:

  文本:纯文本,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. Windows下git多用户配置

    refer from :https://blog.csdn.net/qq_39892503/article/details/109374201 windows git多用户配置 在安装git结束,我们 ...

  2. Sql 语句中 IN 和 EXISTS 的区别及应用

    演示demo表: student表 DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `stuid` varchar(16) NOT N ...

  3. java解析Excel日期格式转换问题

    Excel上传导入,Excel里面单元格是日期的会解析出来数字,比如2020-07-11会解析为44023解决方法一: Excel单元格格式设置为文本格式.解决方法二: 使用代码处理,把解析出来的44 ...

  4. 菜鸡的Java笔记 第十八 - java 代码块

    代码块  code block                content (内容)        在程序结构之中使用"{}"定义的内容就称为代码块,但是会根据其声明的位置以及关 ...

  5. 第十五章---JSON

    目录: (一)介绍 (二)Python 编码为 JSON 类型转换对应表 (三)JSON 解码为 Python 类型转换对应表 (四)实例 正文: (一)介绍 JSON (JavaScript Obj ...

  6. <C#任务导引教程>练习三

    /*Convert.ToInt("213165");int a=12345;string sn=a.ToString();//把a转换成字符串snint b=int.Parse(s ...

  7. [gym102412D]The Jump from Height of Self-importance to Height of IQ Level

    考虑使用平衡树维护该序列,操作显然可以用fhq treap的分裂+合并来实现 进一步的,问题即变为维护哪些信息来支持push up的操作(并判定是否存在$a_{i}<a_{j}<a_{k} ...

  8. Ubuntu 软件安装

    apt 使用apt安装,需要sudo 一些命令: sudo apt-get install git deb deb软件安装方法: sudo dpkg -I xxxx.deb 我们在Windows下安装 ...

  9. 回顾Servlet开发

    1.建立的文件 2.servlet package com.shao.servlet; import javax.servlet.ServletException; import javax.serv ...

  10. CF1511E Colorings and Dominoes

    考虑计数拆开贡献. 因为在一个方案中一个格子最多只会贡献一次,那么不妨反过来求这个格子贡献了多少次. 然后发现,行列独立,那么我们单独计算红蓝色,即可. 一个偶数块贡献当且仅当前面也是偶数块. 然后显 ...