文本编辑器:

  文本:纯文本,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. MySQL——DML数据增、删、改

    插入 方式一(经典) 语法: insert into 表名(列名,...) values(值,...); 若要一次插入多行 create table if NOT EXISTS user( name ...

  2. CentOS8安装VirtualBox,并创建CentOS虚拟机

    安装VirtualBox 执行以下命令并启用VirtualBox和EPEL包仓库 [root@localhost~] dnf config-manager --add-repo=https://dow ...

  3. springboot利用mock进行junit单元测试,测试controller

    1  spring-boot-starter-test内置mockito,添加pom依赖 <dependency> <groupId>org.springframework.b ...

  4. 9组-Alpha冲刺-3/6

    一.基本情况 队名:不行就摆了吧 组长博客:https://www.cnblogs.com/Microsoft-hc/p/15546622.html 小组人数: 8 二.冲刺概况汇报 卢浩玮 过去两天 ...

  5. 大爽Python入门教程 0-1 安装python

    大爽Python入门公开课教案 点击查看教程总目录 一 如何找到下载地址并下载 下面展示找到下载地址的方法步骤 嫌步骤太慢可直接跳到第4步, 查看详细下载地址 使用搜索引擎搜索python 打开搜索结 ...

  6. Robot frawork关键字使用报错原因

    对比发现1或者${1}两种方式赋值输出的类型都为整形 >>> ${test1}    set variable   'www' >>> log    ${test1 ...

  7. windows桌面图标不显示,左右键无法使用的解决方法

    问题描述: 日常使用软件中,一返回桌面,桌面图标全部不显示,点击鼠标的左键,右键毫无反应 解决方法: 1. Ctrl+Shift+Esc呼出软仵管理器 2. 右键windows资管理器,点击属性 配图 ...

  8. [atAGC045C]Range Set

    首先我们可以把所有位置都变为1,因此不妨假设$a\le b$ 一个字符串$s$合法当且仅当:将其中每一段长度不小于$a$的0变成1后,存在一段1的长度都不小于$b$ 证明:我们称$S_{a,b}$为通 ...

  9. HTML四种定位-粘滞定位

    粘滞定位 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset=&q ...

  10. AGC050B Three Coins

    做的时候有思考到是否能转化成移动点问题,但是没有清晰的把他解释出来. NOIP的时候也一样,T3也有考虑到是否能转为差分,但是也没有清晰的写出来. 自己做题的时候应尽量保证草稿纸和思绪的清晰,而不是在 ...