• Linux入门第六天——vim学习


    快速认识vim

    Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。vim 的官方网站 (http://www.vim.org)

    基本上vi可以分为三种状态:

    • 命令模式(command mode)
    • 插入模式(Insert mode)
    • 底行模式(last line mode)\

    按:冒号即可进入last line mode

    :set nu 列出行号
    :set nonu	取消行号
    :#7 跳到文件中的第7行
    /keyword 查找字符  按n向下
    ?keyword 查找字符  按N向下
    :n1,n2/word1/word2/gc  替换指定范围单词,c表示提示
    :w 保存文件
    :w filename 以指定的文件名另存
    :n1,n2 w [filename]	将 n1 到 n2行另存
    :r [filename]	读入另一个文件加到光标所在行后面
    :! ls /home  在vi当中察看ls输出信息!
    :q离开vi
    :wq 和 :ZZ 和 :x 保存并退出vi
    !强制执行
    :% s/^/#/g 来在全部内容的行首添加 # 号注释
    :1,10 s/^/#/g 在1~10 行首添加 # 号注释  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    从command mode进入Insert mode

    按i在当前位置编辑
    按a在当前位置的下一个字符编辑
    按o插入新行,从行首开始编辑
    按R(Replace mode):R会一直取代光标所在的文字,直到按下 ESC为止;(常用)
    
    • 1
    • 2
    • 3
    • 4

    按ESC键退回command mode

    h←j↓k↑l→前面加数字移动指定的行数或字符数

    1、翻页bu上下整页,ud上下半页

    ctrl+b:上移一页。
    ctrl+f:下移一页。
    ctrl+u:上移半页。
    ctrl+d:下移半页。
    
    • 1
    • 2
    • 3
    • 4

    2、行定位

    7gg或7G:定位第7行首字符。(可能只在Vim中有效)
    G:移动到文章的最后。
    7H:当前屏幕的第7行行首
    M:当前屏幕中间行的行首
    7L:当前屏幕的倒数第7行行首
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3、当前行定位

    $:移动到光标所在行的“行尾”。
    0或^:移动到光标所在行的“行首”
    w:光标跳到下个单词的开头
    e:光标跳到下个单词的字尾
    b:光标回到上个单词的开头
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4、编辑

    x:剪切当前字符
    7x:剪切从当前位置起7个字符
    大写的X,表示从前面一个字符开始往前计算
    dd:剪切光标所在行。
    7dd:从光标所在行开始剪切7行
    d7G	删除光标所在到第7行的所有数据
    yw:复制当前单词
    7yw:复制从当前位置起7个单词
    yy:复制当前行
    6yy:从当前行起向下复制6行
    y7G	复制游标所在列到第7列的所有数据
    p:粘贴
    u:撤销
    ctrl+r:取消撤销
    cw:删除当前单词(从光标位置开始计算),并进入插入模式
    c7w:删除7个单词并进入插入模式
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    多行编辑,vim支持,vi不支持

    按ctrl+V进入块模式,上下键选中快,按大写G选择到末尾,上下左右键移动选择位置
    按大写I进去编辑模式,输入要插入的字符,编辑完成按ESC退出
    选中要替换的字符后,按c键全部会删除,然后输入要插入的字符,编辑完成按ESC退出
    选中要替删除的字符后,按delete键,则会全部删除

    按shift+V可进入行模式,对指定行操作

    vim练习

    1、创建目录/tmp/test,将/etc/man.config复制到该目录下

    # mkdir -p /tmp/test
    
    # cp /etc/man.config /tmp/test/
    
    # cd /tmp/test/
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2、用vim编辑man.config文件:

    vim man.config
    
    • 1

    3、设置显示行号; 移动到第58行,向右移动40个字符,查看双引号内的是什么目录;

    :set nu
    58G 或58gg 
    40-> 或40空格 目录为:/dir/bin/foo 
    
    • 1
    • 2
    • 3

    4、移动到第一行,并向下查找“bzip2”这个字符串,它在第几行;

    移动到最后一行,并向上查找该字符串;
    gg 或1G
    /bzip 137行 ?bzip2
    
    • 1
    • 2
    • 3

    5、将50行到100行之间的man更改为MAN,并且 逐个挑选 是否需要修改;

    若在挑选过程中一直按y,结果会在最后一行出现改变了几个man?
    :50,100s/man/MAN/gc 25次替换
    
    • 1
    • 2

    6、修改完后,突然反悔了,要全部复原,有哪些方法?

    一直按u键	
    或者
    :q!强制不保存退出后,再重新打开该文件
    
    • 1
    • 2
    • 3

    7、复制65到73这9行的内容(含有MANPATH_MAP),并且粘贴到最后一行之后;

    65gg或65G到该行后,9yy,G 移动到最后一行,p粘贴
    
    • 1

    8、21行到42行之间开头为#符号的批注数据不要了,如何删除;

    21G到该行 22dd
    
    • 1

    9、将这个文件另存为man.test.config的文件

    :w man.test.config
    
    • 1

    10、到第27行,并且删除15个字符,结果出现的第一个字符是什么?

    27gg 后15x
    
    • 1

    11、在第一行新增一行,在该行内输入“I am a student ”

    gg到第一行 O输入即可 说明:o是在当前行之后插入一行,O是在当前行之前插入一行
    
    • 1

    12、保存并退出

    :wq
    
    • 1

    vi/vim的三种模式

    vi/vim主要分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。

    命令模式
    用户刚刚启动 vi/vim,便进入了命令模式。 任何时候,不管用户处于何种模式,只要按一下ESC键,即可使Vi进入命令模式;

    此状态下敲击键盘动作会被Vim识别为命令,输入: 可切换到底线命令模式,以在最底一行输入命令。

    若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。

    输入模式
    在命令模式下输入插入命令i、附加命令a 、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被Vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按键ESC即可。

    底行模式
    在命令模式下按下:(英文冒号)就进入了底行命令模式。

    底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。

    在底线命令模式中,基本的命令有(已经省略了冒号):

    • q 退出程序
    • w 保存文件

    按ESC键可随时退出底线命令模式。

    vim基础操作

    进入输入模式(Insert mode)

    • i: 插入光标前一个字符
    • I: 插入行首
    • a: 插入光标后一个字符
    • A: 插入行未
    • o: 向下新开一行,插入行首
    • O: 向上新开一行,插入行首

    在进入输入模式后, vi 画面的左下角处会出现『–INSERT–』的字样

    进入替换模式(Replace mode)

    • r : 只会取代光标所在的那一个字符一次
    • R: 会一直取代光标所在的文字,直到按下ESC为止

    在进入输入模式后, vi 画面的左下角处会出现『–REPLACE–』的字样

    命令模式下常用命令

    移动光标

    移动光标的方法
    h 或 向左箭头键(←)光标向左移动一个字符
    j 或 向下箭头键(↓)光标向下移动一个字符
    k 或 向上箭头键(↑)光标向上移动一个字符
    l 或 向右箭头键(→)光标向右移动一个字符
    向下移动 30 行,可以使用 “30j” 或 “30↓” 的组合按键
    [Ctrl] + [f]屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
    [Ctrl] + [b]屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
    [Ctrl] + [d]屏幕『向下』移动半页
    [Ctrl] + [u]屏幕『向上』移动半页
    +光标移动到非空格符的下一行
    -光标移动到非空格符的上一行
    n表示空格光标向右移动这一行的 n 个字符。例如 20 则光标会向后面移动 20 个字符距离。
    0 或功能键[Home]这是数字『 0 』:移动到这一行的最前面字符处 (常用)
    $ 或功能键[End]移动到这一行的最后面字符处(常用)
    H光标移动到这个屏幕的最上方那一行的第一个字符
    M光标移动到这个屏幕的中央那一行的第一个字符
    L光标移动到这个屏幕的最下方那一行的第一个字符
    G移动到这个文档的最后一行(常用)
    nGn 为数字。移动到这个文件的第 n 行。例如 20G 则会移动到这个文件的第 20 行(可配合 :set nu)
    gg移动到这个文档的第一行,相当于 1G
    nn 为数字。光标向下移动 n 行(常用)

    删除操作

    删除操作删除后会添加到剪切板,相当于剪切
    x, Xx为向后删除一个字符 (相当于 [del] 按键), X为向前删除一个字符(相当于 [backspace] )
    nxn 为数字,连续向后删除 n 个字符。例如10x表示连续删除 10 个字符。
    dd删除光标所在的一整行(常用)
    nddn 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行
    d1G删除光标所在行到首行的所有数据
    dG删除光标所在行到最后一行的所有数据
    d$删除光标所在位置到该行的最后一个字符
    d0删除光标所在位置到该行的最前面一个字符

    撤销&复原&重复

    撤销&复原
    u撤销操作,相对于普通编辑器里面的ctrl+z
    Ctrl+r恢复操作,相对于普通编辑器里面的ctrl+y
    .就是小数点!可重复前一个动作

    复制&粘贴

    复制&粘贴
    yy复制光标所在行
    nyyn 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行
    y1G复制光标所在行到第一行的所有数据
    yG复制光标所在行到最后一行的所有数据
    y0复制光标所在的那个字符到该行行首的所有数据
    y$复制光标所在的那个字符到该行行尾的所有数据
    p, Pp 为将已复制的数据在光标下一行贴上,P 则为贴在光标上一行!

    合成行
    J: 将光标所在行与下一行的数据结合成同一行

    搜索

    搜索
    /word向光标之下寻找一个名称为 word 的字符串。
    ?word向光标之上寻找一个字符串名称为 word 的字符串。
    n代表重复前一个搜寻的动作,根据前面输入的/word还是?word向下或向上搜索下一个匹配的字符串。
    N表示反向搜索,与n的搜索方向相反。

    底行命令模式的常用操作

    底行命令模式
    :w保存编辑数据
    :w!若文件属性为『只读』时,强制写入该文件。不过,到底能不能写入, 还是跟你对该文件的文件权限有关啊!
    :q离开 vi
    :q!若曾修改过文件,又不想储存,使用 ! 为强制离开不储存文件。
    惊叹号 (!) 在 vi 当中,常常具有『强制』的意思~
    :wq储存后离开,若为 :wq! 则为强制储存后离开
    ZZ若文件没有更动,则不储存离开,若文件已经被更动过,则储存后离开!
    :w [filename]另存为
    :r [filename]将另一个文件『filename』的数据加到光标所在行后面
    :n1,n2 w [filename]将 n1 到 n2 行的内容储存成 filename 这个文件。
    :! command暂时离开 vi 到指令行模式下执行 command 的显示结果!例如 『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的文件信息!
    :set nu会在每一行的前缀显示该行的行号
    :set nonu取消行号显示

    可视模式

    v 进入字符可视化模式: 文本选择是以字符为单位的。
    V 进入行可视化模式: 文本选择是以行为单位的。
    Ctrl+v 进入块可视化模式 : 选择一个矩形内的文本。

    可视模式操作
    A在选定的部分后面插入内容
    I在选定的部分前面插入内容
    d删除选定的部分
    c删除选定的部分并进入插入模式(有批量替换效果)
    r把选定的部分全部替换为指定的单个字符
    >>向右缩进一个单位,更适合行可视化模式
    <<向左缩进一个单位,更适合行可视化模式
    gu选中区域转为小写
    gU选中区域转为大写
    g~大小写互调

    可视模式下,选中的区域是由两个端点来界定的(一个在左上角,一个在右下角),在默认情况下只可以控制右下角的端点,而使用o按键则可以在左上角和右下角之间切换控制端点。

  • 相关阅读:
    C++指针的使用
    七大基于比较的排序算法基本原理及实现(Java版)
    ITO服务涵盖了BPO(业务流程外包)、IDC驻场运维以及IDC工程实施等多个类别
    手把手教你搭建ELK-新手必看-第六章:搭建filebeat
    CISP-PTE之SQL注入(二次注入的应用)
    计算机毕业设计 SSM餐饮收银管理系统 商场收银系统 饭店收银系统 服装店收银系统
    SpringBoot和Vue实现导入导出——基于SpringBoot和Vue的后台管理系统项目系列博客(十二)
    朋友圈怎么发能避免被折叠?
    【笔试题】【day10】
    CC攻击和DDOS攻击哪个对服务器影响更大
  • 原文地址:https://blog.csdn.net/weixin_52263256/article/details/126765473