当前位置: 首页 > 工具软件 > Vim3D > 使用案例 >

VIM总结

柯梓
2023-12-01

#命令模式:默认模式,移动光标,剪切、粘贴文本
    hjkl
    ZZ:保存,退出
    ZQ:不保存,退出

#插入模式:修改文本
    i:插入光标所在处
    I:当前所在行行首
    a:append光标所在处追加
    A:所在行,行尾追加
    o:所在行下方插入新行
    O:所在行上方插入新行
    
退出插入模式
    esc

#扩展模式:保存,退出等
    w:write
    q:quit
    wq:保存退出
    !:force
    q!:不保存退出
    x:保存退出
    X:加密
    r file:读入内容到当前文件
    w file1:将当前内容写入到另一个文件
    !command:执行linux命令
    r!command:读入命令的执行结果

#可视化模式
-----------------------------------------------------------------
#打开文件
# vim[option] ...file...
    +# 打开文件后,让光标处于第#行的行首,+默认行位
    eg:
        vim +10 /etc/passwd
    +/pattern 打开文件后,直接让光标处于第一个被pattern匹配到的行行首
    eg:
        vim +/^ftp /etc/passwd
    -b file 以二进制方式打开文件
    -d file1 file2...比较多个文件
    eg:
        vim -d f1 f2
    -m file 只读模式打开文件
    eg:
        vim -d f1 //用来打开关键文件比较好
    -e 直接进入ex模式
    eg:
        echo 12345 >file1
        echo 67890 >file2
        vim -e file1
        r file2
        visual
        把文件2的内容读入到文件1中
        

-----------------------------------------------------------------
#扩展模式
    w:write
    q:quit
    !:force
    x:保存退出
    r file:读入内容到当前文件
    eg:
        echo 12345 >file1
        echo 67890 >file2
        vim -e file1
        r file2
        visual
        把文件2的内容读入到文件1中
    w file1:将当前内容写入到另一个文件
        在扩展模式下,执行该命令可以将当前文件另存为,但是继续修改的内容仍然是当前文件
    !command:执行命令
        在扩展模式下,可以执行linux命令,无需退出vim
        eg:
            !cat /etc/centos-release
            按enter键退出,返回到vim中
    r!command:读入命令的输出
        可以将执行命令的回传内容,写入当前文档中
        eg:
            r!cat /etc/centos-release
            直接读入cat结果

-----------------------------------------------------------------
#命令模式光标跳转
##字符间跳转
    h:← l:→ j:↓ k:↑
    #command:跳转由#指定的个数的字符
    eg:
        5j:向下跳五行
        6l:向右跳5个字符
        ...
##单词之间跳转
    w:下一个单词
    b:调到当前单词词首
    e:调到当前单词词尾
    #command:跳转#个单词,参考上面hjkl用法

##当前页跳转:
    H:当前可视屏幕的第一行行首
    M:当前可视屏幕的中间行首
    L:当前可视屏幕的最下一行行首
    zt:把光标所在当前行移动到屏幕顶端,浏览页面用
    zz:把光标所在当前行移动到屏幕中间,浏览页面用
    zb:把光标所在当前行移动到屏幕底端,浏览页面用

##行首行尾跳转
    ^:跳转到行首的第一个非空白字符
    0:跳转至行首
    $:跳转至行尾
    
##行之间移动:
    #G或者扩展模式下输:# //跳转第#行
    G:最后一行
    gg、1G或者扩展模式下输:1 //第一行

##句子之间移动:句子和句子之间以“.”区分
    ):下一句
    (:上一句
    
##段落间移动:段落与段落之间按照空行区分
    }:下一段
    {:上一段

##翻屏操作
    ctrl+b:向上翻一屏pageup
    ctrl+u:up半屏
    ctrl+d:down半屏
    ctrl+f:向下翻一屏pagedown

-----------------------------------------------------------------
#命令模式操作
##字符编辑
    x:剪切光标处的字符
    #x:删除光标处起始的#个字符
    p:在光标之后粘贴
    ~:大小写翻转
    J:删除当前行的回车字符

##替换命令
    r:替换光标所在处的字符
    R:切换成replace模式,后面的字符直接被输入覆盖
    d:删除,可结合光标跳转字符,实现范围删除
    d$:删除道行尾
    d^:删除到非空行首
    d0:删除到行首
    dw:删除单词
    de:删除到词尾
    db:删除到词首
    dG,dgg...
    #command:5dw,4dd
  
  dd:剪切当前行
  #dd:剪切多行
  D:从当前光标位置删除到行尾,等同于d$
  
#复制命令(y.yank)
    y:复制,行为类似d命令
    y$:
    y0:
    y^:
    ye:
    yw:
    yb:
    #command
  yy:复制行
    #yy:复制多行
  Y:复制整行


#粘贴
##复制一个单词情况下
    P:在光标前粘贴
    p:在光标后粘贴    
##复制一句话情况下
    P:在行前粘贴
    p:在行后粘贴
    
#改变命令
    c:修改后切换成插入模式
命令模式-->插入模式
    c$:
    c^:
    c0:
    cb:
    ce:
    cw:
    #command
cc: 删除当前行并输入新内容,相当于$
    #cc
C:删除当前光标到行尾,并切换成插入模式

命令模式:操作文本
                        |change(replace)|delete(cut)|yank(copy)
    ------------------------------------------------------------
    line                |cc             |dd         |yy
    letter              |cl             |dl         |yl
    word                |cw             |dw         |yw
    sentence ahead      |c)             |d)         |y)
    sentence behind     |c(             |d(         |y)
    paragraph above     |c{             |c{         |y{
    paragraph below     |c}             |c}         |y}
    ------------------------------------------------------------
    
命令行模式按100,再按i,输入wangjing,按esc,把wangjing重复100遍

<start position><command><end position>
<command>:
        y复制、d删除、gU变大写、gu变小写
    例如0y$命令意味着:
    0->先到开头
    y->从这里开始拷贝
    $->拷贝到本行最后一个字符
    ye从当前位置拷贝到本单词的最后一个字符

    di":光标在""之间,则复制""之间的内容
    yi(:光标在()之间,则复制()之间的内容
    vi[:光标[]之间,则选中[]之间的内容
    dtx:删除字符直到遇见光标之后的第一个x字符
    ytx:复制字符直到遇见光标之后的第一个x字符

------------------------------------------------------------------

#扩展模式:范围的选择

#起始位置,结束为止,命令
##start_pos,end_pos

    #:第#行,例如2表示第2行
    #,#:从左侧#表示起始行,到右侧#表示结尾行
        eg:
            2,3 //选中第2行到第4行
    #,+#:从左侧#表示的起始行,加上右侧#表示的行数
        eg:
            2,+3 //选中第2行往后加3行
    .:当前行
    $:最后一行
        eg:
            .,$-1 //选中当前行到倒数第二行
    %:全文,相当于1,$
        eg:
            20,25x
    #正则表达式
    /patern/:从当前行向下查找,一直找到第一个匹配patern的行结束
    #,/patern/:从指定行开始,一直找到第一个匹配patern的行结束
    /patern/,$:从指定行开始,一直找到第一个匹配pattern的行结束
    /patern1/,/patern2/:从第一次被patern1模式匹配到的行开始,一直到第一次被patern2匹配到的行结束#
    
##command
    d:剪切
    y:复制
    w file:将范围内的行另存至指定文件中
    r file:在指定的位置插入指定文件中的所有内容


eg:
    2,3d //选中2~3行,删除
    4,6y //选中4~6行,复制
    /^b/,/^f/d 以b开头到以f开头的行,删除
        
------------------------------------------------------------------    
#查找
    /PATTERN:从当前光标所在处向文件尾部查找
    ?PATTERN:从当前光标所在处向文件首部查找
    n:浏览下一个
    N:浏览上一个
    eg:
        :/boot
        :/\/var 搜索/var
    
#查找与替换
    [范围]s[/查找词][/替换词][/修饰符]
    s:在扩展模式下完成查找替换操作:
        格式:s/要查找的内容/替换为的内容/修饰符
        要查找的内容:可使用模式
        替换为的内容:不能使用模式,但可以使用\1,\2,...等向后引用符号;还可以使用“&”引用向前查找的整个内容,
        修饰符:
        i:忽略大小写
        g:全局替换
        gc:全局替换,每次替换前询问
    查找替换中的分隔符号/可替换为其他字符
    eg:
        %s/\/sbin\/nologin/\/bin/bash/ 
        //把/sbin/nologin替换成/bin/bash,但是这种写法看起来太奇怪了
        //改成用#来做分隔符:%s#/sbin/nologin#/bin/bash#
        s@/etc@/var@g
        s#/boot#/#i
    eg:
        %s/var/usr/
        
        %s/wang/&xiaochun等价于%s/wang/wangxiaochun
        %s/(wang)/\1xiaochun
        %s/\(.*cmd.*\)"/\1 xyz"/
        %s@^[^#]@#&@  //把不是#开头的行,前面加#
        %s@^#.*@@ //删除#开头的行
        
        
#撤销    
    u:撤销最近的更改
    #u:撤销之前多次更改
    U:撤销光标落在这行后所有此行的更改
    ctrl+r:重做最后的撤销更改
    .:重复前一个操作
    n.重复前一个操作n次
    
    
    
    
    
    
    
    
    
    
    
    


 

 类似资料: