• 编辑器之神-vim的使用


    vim即vi的升级版;在linux中,vi是vim的软链接,我们敲vi和vim出来的都是vim;

    纯手打,如有错误,敬请指出。

    vi的三种模式及简单使用

    vi三种模式

    命令模式(默认):是文件的入口,可以实现文件的定位,复制,翻页等;

    末行模式:是文件的出口,w write,q quit,wq 写入并保存等;

    编辑模式:正常的文字编辑;

    三种模式的转换

    命令模式—>i,a,o,I,A,O—>编辑模式—>esc—>命令模式
    命令模式—>”:”—>末行模式—>esc—>命令模式

    vi的简单使用

    vi 已有文件:打开已存在的文件;
    vi 不存在文件:新建文件;

    vi 文件:打开文件,光标在行首;
    vi 文件 +:打开文件,文件在末尾;
    vi 文件 +行数:打开文件,并且指定行数;

    例如:

    vi hello.py  # 打开hello文件
    vi hello.py +20  # 打开hello文件并且把光标跳到第20行
    vi hello.py +  # 打开hello文件并且光标跳到最后一行

     

    异常处理之交换文件

    如果我们在vi编辑文件时,忽然关闭终端,或者异常卡出,就会出现交换文件,用ls -al可查看,存在.swp结尾的交换文件;
    出现交换文件后,再一次vi 原来的文件时,就会报错,我们按照提示D删除交换文件即可;

    命令模式转编辑模式

    命令模式下:

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

    保存退出编辑

    在命令模式下保存,shift+z+z
    末行模式下:

    w 保存
    q 退出
    wq 保存退出
    x 保存退出
    q! 不保存强制退出

    vim移动,跳转

    上下左右移动

    命令模式:

    k 上移
    j 下移
    h 左移
    l 右移


    hjkl控制上下作用

    行内移动

    命令模式下:

    0:到达行首
    ^:到达行首第一个不是空白字符的位置
    $:到达行尾
    w:word,往后移一个word
    b:back,往前移一个word

    行数移动

    命令模式下:

    gg:快速移动到文件的第一行
    G:快速移动到文件最后一行
    num gg:快速跳转到指定行
    num G:快速跳转到指定行

    末行模式下:
    :num 回车:在末行模式下跳转到指定行
    其中用的最多的还是num G

    上下翻页

    Ctrl+b:向上翻一页
    Ctrl+f:向下翻一页

    Ctr-d: 向下翻半屏
    Ctr-u: 向上翻半屏
    H:跳转到屏幕顶部
    M:跳转到屏幕中间
    L:跳转到屏幕底部
    注意HML跳转的是屏幕,不是文件

    其他跳转

    {: 按段移动,上移
    }: 按段移动,下移

    %:移到括号的左右边

    复制,粘贴,删除(剪切)

    复制粘贴

    命令模式下:

    y:和移动命令一起使用,复制
    yy:复制一行,支持nyy复制多行
    p 粘贴

    删除(剪切)

    命令模式下:
    x: 删除光标后一个字符,相当于 Del
    X: 删除光标前一个字符,相当于 Backspace
    dd: 剪切光标所在行,n dd 删除指定的行数

    d:和移动命令配合使用,删除移动命令对应的内容;

    D: 删除光标后本行所有内容,包含光标所在字符;

    d0: 删除光标前本行所有内容,不包含光标所在字符;

    dw: 将光标移到单词首字母,再dw,可删除单词

    练习:

    5x:删除光标及往后五个字符
    v+%+x:删除选中的括号内的内容
    d+6+G:把光标所在行和第六行之间的内容全部删除,所在行能大于6也能小于6
    y+{ +n+G+p:复制从光标往后的一段内容,并跳到指定行进行粘贴
    yy空行+5+p:复制空行,并且粘贴5个空行

     

    复制删除总结和扩展

    d和x在vi中看起来是删除操作,但本质上其实是剪切操作,剪切后会将内容存放在和剪切板功能相同的缓冲区;
    同样,复制其实也是将内容放在缓冲区;
    注意,在其他图形界面复制的内容在vi中不能直接通过p进行粘贴,需要右键粘贴,因为剪切板和缓冲区不是同一个;

    可视模式(选中文本)

    在命令模式下,
    v,可视模式,从光标选中位置,开始向上向下选中文本,选中的位置,是原来光标的位置;
    V,可视行模式,从光标选中行开始,向上或向下选中光标所经过的每一行;
    Ctrl+v,可视块模式,垂直方向选中文本,和sublime的ctrl很像,具体可自己实验;

    可视模式可以配合 d, y, >>, << 实现对文本块的删除,复制,左右移动

    可视模式还可以和段落移动等结合使用,例如:

    V+G,表示选中从当前行一直到末行

    V+gg,表示选中从当前行到文件首行,

    V+{,

    V+},

    v+%,括号等等。

    替换和查找

    小幅替换

    命令模式下:

    r:将光标下的字符进行替换;例如,r+H:将那个光标下的字符替换成H

    R: 替换当前行光标后的字符;例如,hello单词首字母,R+world:将hello单词替换成world;

    全局替换

    末行模式下,

    固定格式:%s///g
    格式:%s/旧文本/新文本/g
    例如:

    把python全部替换成world:%s/python/world/g

    将第一行至第10行之间的abc替换成123:1, 10s/abc/123/g

    可视区域替换

    先用可视模式选中要替换的范围,再进入末行模式进行替换
    格式:s/旧文本/新文本/g
    V+向下移动光标到第11行+:进入末行模式+s/world/python/g:将当前行到第11行的所有world替换成python

    确认替换

    格式:%s/旧文本/新文本/gc
    会查找出全部的旧文本,然后逐个的让你来确认是否替换,替换y,不替换n,替换所有a,不想替换了就q

    查找

    命令模式下:

    /+str:查找指定字符串
    n:查找下一个被高亮的字符串
    N:查找上一个被高亮的字符串
    单词快速匹配:
    *:向后查找当前光标所在单词
    #:向前查找当前光标所在单词
    不想高亮,可以查找一个不存在的单词即可

    其他必知必会

    撤销反撤销

    命令模式下:
    u 撤销
    ctl+r 反撤销

    文本行移动(缩排)

    命令模式下:
    >>: 文本行右移
    <<: 文本行左移

    练习:

    V+向下三行+>:将选中的三行向右缩进四个空格,同理,左缩进也是
    V+向下三行+>+.+.:将选中的三行向右缩进四个空格后,再右移四格,再右移四格,即一个点就重复执行一次

     

    重复执行

    命令模式下:
    .: 重复上一次操作的命令

    标记

    当我们在开发时,如果有某一行需要稍后再来处理,可以先对它进行标记,后面需要处理时再进行快速跳转
    标记:m+x (x属于[a-z][A-Z])
    跳转:'+x
    可以分别标记多行为多个别名,再跳转;
    如果给多行用了同一个别名,那么别名指向的是最新的一行

    vim里执行 shell 下命令

    末行模式里输入!,后面跟命令

    末行命令扩展

    e .:浏览当前目录下的所有文件
    e 文件名:切换编辑文件
    n 文件名:新建并编辑文件
    w 文件名:如果原来没有文件,就创建新文件并将源文件的内容写入新文件,但编辑的还是源文件
    切换文件之前,必须保存原来编写的文件

    末行模式下w命令的作用讲解:
    在实际开发时,用来起阶段性备份的作用,和git的作用类似

    分屏命令

    末行模式下,
    sp:横向分屏
    vsp:纵向分屏
    切换窗口:Ctrl+w,w
    互换窗口:r
    关闭当前窗口:c,但是不能关闭最后一个窗口
    退出当前窗口:q,能退出最后一个窗口
    关闭其他窗口:o

    练习

    1.连续打出十个*

    命令模式,10+i+*+esc;后面也可以加.,重复执行;
    8+i+print("hello world")+enter+esc:重复8行代码;
    但建议在进入编辑模式之前,不要按数字,不然按了数字编辑了又esc了,就发现辛苦敲得代码粘贴了很多。

    2.给多行代码添加注释

    命令模式,将光标移动到要注释的第一行,^移动到行首,

    Ctrl+v进入可视块模式,向下选中多行要注释的代码,
    I进入编辑模式,在行首添加#,esc。

  • 相关阅读:
    C# 创建一个日志文件
    C# WinForm程序添加引用后调用静态方法时报“Interfaces_Helper.Global”的类型初始值设定项引发异常。---> System.NullReferenceException: 未将对象引用设置到对象的实例。
    SqlServer 一些操作
    多线程处理sql server2008出现Transaction (Process ID) was deadlocked on lock resources with another process and has been chose问题
    SQL
    WinForm 弹框确认后执行
    C#强制清除缓存
    C#TextBox自动滚动到最低端
    XmlDocument To String
    ROCK 算法
  • 原文地址:https://www.cnblogs.com/yifchan/p/linux-1-1.html
Copyright © 2020-2023  润新知