文本编辑器:

  文本:纯文本,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. 地表最强IDE ——Visual Studio 2022正式发布

    地表最强IDE--Visual Studio 2022昨天正式发布啦! 堪称宇宙第一IDE工具集的Visual Studio,在经过不断更新优化之后,新版本就要与大家见面了.本次新版本发布,有许多令人 ...

  2. java中的lamda表达式

    List操作: 循环: list.forEach((p) -> System.out.printf("%s %s; %n", p.getFirstName(), p.getL ...

  3. centos7.2安装nginx

    1 安装相关编译环境 yum install gcc-c++ yum install pcre pcre-devel yum install zlib zlib-level yum openssl o ...

  4. linux auditd审计的简单使用和理解

    Linux审计主要用于查看系统改动的信息,如系统密码修改,用户的新建,主要用于保障系统的安全,下面简单介绍审计如何使用 1启动审计进程: [tommy@xie-testlog]$ sudo servi ...

  5. 1-Introduction(介绍)

    目录: 正文: (一)機器學習就是让机器自動找函式 语音/图像识别 (二)你想找什麼樣的函式? (2.1)Regression 找出的函数其输出是一个数值 (2.2)Classification (2 ...

  6. C/C++ Qt 选择夹TabWidget组件应用

    在Qt中通过使用选择夹组件可以实现在一个页面中集成多种功能,我们以TabWidget选择夹组件为例,实现在单个页面中集成多个功能,并给每一个子夹增加对应的Ico图标. 如果我们使用选择夹组件,必须提前 ...

  7. 用图像识别玩Chrome断网小游戏

    先来看一下效果 正文 最近在学习机器学习方面的知识,想着做个东西玩玩,然后就接触到了TensorFlow这个机器学习框架,这个框架封装了机器学习的一些常用算法. 不过要自己实现一套流程还是比较麻烦,我 ...

  8. 实战!spring Boot security+JWT 前后端分离架构认证登录!

    大家好,我是不才陈某~ 认证.授权是实战项目中必不可少的部分,而Spring Security则将作为首选安全组件,因此陈某新开了 <Spring Security 进阶> 这个专栏,写一 ...

  9. 查找 Search

    如果值域小一点. 那么我们有一个很精妙的做法. 分块完维护数字\(cnt\),和一个\(bitset\)信息. 然而小不得. 那么我们考虑维护后缀\(nxt_i\),表示第\(i\)位后,最近的\(a ...

  10. 洛谷 P6672 - [清华集训2016] 你的生命已如风中残烛(组合数学)

    洛谷题面传送门 题解里一堆密密麻麻的 Raney 引理--蒟蒻表示看不懂,因此决定写一篇题解提供一个像我这样的蒟蒻能理解的思路,或者说,理解方式. 首先我们考虑什么样的牌堆顺序符合条件.显然,在摸牌任 ...