• vim-1-基本使用


    Vim的几种模式

    普通模式, 插入模式, 替换模式, 可视选择模式, 命令模式.
     
    普通模式 --> 插入模式
        i/I:  在光标前面/行首插入
        a/A: 在光标后面/行尾插入
        o/O: 在下/上一行行首插入
        s 删除光标所在字符并开始插入(具体用法看x)
        c 开始删除, 之后进入插入模式(具体用法看d)
    对于GVim,  插入模式和在windows下一样, 各种快捷键都能用. 另外,  在普通模式下,  ctrl+s依然是保存
     
    普通模式 --> 替换模式 
       r: 替换光标所在的字符
       数字r: 将光标所在向后n个字符都替换掉
       R: 从光标所在字符开始替换, 按esc回到普通模式
     
    普通模式 --> 命令模式
        按冒号键.
     
    普通模式 --> 命令模式
        按 v 键.
     
    插入模式, 命令模式 可视选择模式 --> 普通模式
        按esc

    普通模式

    进入gvim后的默认模式, 在这种模式下, 无法输入, 只能移动光标, 或对文本进行操作.

    移动

        h j k l: 左下上右移动
        数字 h j k l: 左下上右移动n下
        w/e: 移动到下一个单词开头/结尾
        b/B(ge): 移动到上一个单词开头/结尾
        f/t a: 在当前行, 移动到下一个出现a的位置/前
        F/T a: 在当前行, 移动到上一个出现a的位置/前
        数字f/t a: 在当前行向后移动到第n次出现a的位置/前
        数字F/T a: 在当前行向前移动到第n次出现a的位置/前
        0/$: 定位到行首/行尾
        ^/g_: 定位到非空格的行首/行尾
        %: 在两个匹配的符号((, ", {)等等中切换(光标需先移动到其中一个符号,  如果不在, 则会向后找到最近的一个)
        数字%: 按照百分比定位文档 的位置
        G: 定位到最后一行行首
        行号G: 定位到对应行号行首
        gg: 移动到第一行行首
        H: 定位到当前屏幕的最上边
        M: 定位到当前屏幕的中间
        L: 定位到当前屏幕的最下边
        ctrl+u/d: 向上/下滚动半屏
        ctrl+f/b: 向上/下滚动整屏
        zz: 把当前行置为屏幕正中间
        J: 将下一行移动到这一行末尾(合并当前行和下一行)
        关于数字键: 数字+命令表示执行多次操作, 数字一般放在命令之前.
     
        >>/<<: 当前行增大/减小缩进
        ==: 当前行自动进行缩进
     
        ``: 反单引号, 在两个跳转点之间切换, 如果你原先处在33行, 跳到了55行, 使用这个命令可以回到33行, 多次使用就是来回切换,
            注: j, k导致的跳转不可, 并且需要是不在同一行内的位置间的切换
        ctrl+o/i: 跳转到上一次/下一个光标停留位置(不在同一行内, 且不是hjkl导致的光标移动)

    查找/搜索

    在普通模式下输入 / , 即可对文本进行查找.
        /xxx: 在全文中查找xxx, 并高亮显示, 字符.*[]^%/?~$ 有特殊意义, 需要用转义
        ?xxx: 和/效果一样, 只是查找方向反向
        N/n: 在高亮的选中处之间前后切换, 前面可以加数字, 表示第n次出现的位置
        vim会记录已经查找过的内容, 再次查找时, 可通过上下键来切换
        #/*: 移动到上一个/下一个与光标所在单词相同的单词
        /<xxx>: 匹配完整的单词, 如果某单词中只是包含xxx, 不会被匹配上
     
    模式搜索(正则表达式搜索):
        ^ 表示一行的开头, $ 表示一行的结尾, ^the就表示位于行首的the
        . 表示任意字符, 如果想查找的就是. , 则需要转义
     
    一个有用的命令: nohlsearch, 此命令可以取消当前的高亮, 简写 nohl

    复制, 剪切, 删除, 粘贴

    在vim中, 剪切和删除的效果是一样的, y复制, x剪切, p粘贴.
    注: 几乎所有的移动, 复制, 粘贴命令前面都可以加数字, 表示重复的次数, 也几乎都可以加上移动键, 表示向某个方向复制/剪切 .
    (下列命令中其实是没有中间的空格的, 这里只是为了方便阅读)
        y: 开始复制
        yy/Y: 复制当前行
        行号yy: 从当前行开始, 复制多行
        y 0/$: 从光标处复制到本行开头/末尾
        y w/e: 复制一个单词, 或从光标处复制到本单词末尾
        yt a: 从光标出开始复制, 直到遇见a, a不复制
    yG: 从当前行开始复制直到最后一行
    yyg: 从当前行开始复制直到第一行
       
        x: 剪切/删除光标所在的字符, 依然停留在普通模式
        X: 删除当前光标左边的字符
        数字 x: 剪切/删除从光标开始往后的n个字符, 依然停留在普通模式
       
        d: 开始剪切/删除(用法和y类似, 不多说了)
        dd: 剪切整行
        D: 剪切至行尾的内容(这点和y不一样)
        
        p: 粘贴复制/剪切的内容到光标后面, 如果是整行的, 则粘贴到当前行的上面
        P: 粘贴复制/剪切的内容到光标前面, 如果是整行的, 则粘贴到当前行的下面
        数字p/P: 粘贴多次
        ddp: 其实就是删除当前行再粘贴了, 但是你会发现, 当前行和下一行换位置了
        xp: 其实就是删除当前光标所在字符再粘贴, 但是你会发现, 两个字符交换位置了
     

    其他常用命令/快捷键

    这里说的命令和命令模式中的命令不太一样, 其实就是一些按键, 只是在普通模式中, 它们有不同的用处.
     
        .: 普通模式中按 . 可以重复上次的命令, 除了u命令, 这个只能重复最近的一次命令, 比如先搜索出全文中的xxx, 然后cwyyy, 表示修改成yyy, 然后回到普通模式,
            n.n.n.一直按, 之后的xxx都会变成yyy, cwyyy这个命令就会一直重复
        u: 撤销上次操作, U: 行撤销, 可以撤销所有在最近行上的编辑操作.
        ctrl+r: 恢复上次操作(GVim中, ctrl+y也可以, 但它是windows中的快捷键)
        ctrl+i: 有时候vim中的有些文字会花掉, 此快捷键可以刷新视图
        gU/gu: 将选中的内容转化为大/小写
        ctrl+p: 自动补全之前编辑过的单词, 词组
        ZZ: 退出当前编辑的文件.
        行号1, 行号2>>: 从行号1到行号2向右移动一个tab
        行号1, 行号2>>: 从行号1到行号2向左移动一个tab
     

    可视选择模式

    在普通模式中按 v 键可进入可视化选择模式, 按 esc/v 退出, 同时选择的内容会被复制.
    普通模式中按 V 键进入整行可视化选择, 再按 esc/V 退出, 同时选择的内容会被复制.
    在可视化选择模式中, 移动键, 数字键, 剪切, 复制都是可以使用的.
        ctrl+q: 块可视化选择, 其实应该是ctrl+v, 但是对于windows里的GVim, 这个是粘贴, 所以不能用.
        gg, 然后ctrl+q(ctrl+v), 然后按G, 就可以选择文本的第一列
        o: 在(块)可视化选择状态下, 使光标移动到选择区域的另一头
        O: 在块可视化选择状态下, 使光标移动到这一行的另一头

    命令模式

    在普通模式下按 : 键进入命令模式, 光标会在编辑器底部显示, 输入命令回车即可.

    常用命令

        w: 保存不退出
        wq/x: 保存退出
        q/q!: 不保存退出/强制不保存退出, 在任何命令后加 ! 表示强制执行此命令.
        e!: 放弃所有修改, 载入文件的初始状态, 慎用!
        pwd: 显示当前目录
        !shell指令: 执行shell(dos)指令
        r!shell指令: 将shell(dos)指令的执行结果写到当前行的下面
        行号1, 行号2d: 删除从行号1到行号2的内容, y也同样适用.
        行号: 定位到对应行号.
     
    在命令模式里按上下箭头可以切换之前输入的命令

    编辑多个文件

        e/edit 文件路径: 在当前标签页中打开文件, 路径中使用/或都可以,
            可使用tab键自动补全文件名.也可以一次打开多个文件, 文件路径中间以空格隔开
        previous/next: 切换到上一个/下一个打开的文件
        wprevious/wnext: 保存当前文件, 然后切换到上一个/下一个打开的文件
        bp/bn: 在当前标签页中切换上一个/下一个文件
        vim -R filename, 以只读方式打开文件

    分割窗口

        split: 在当前窗口上方分割一个窗口, 新窗口中依然是当前文件
        new: 分割出新的空窗口
        split filepath: 在新窗口打开文件
        new filename: 在新窗口中编辑文件
        split, new命令都可以在前面加上数字, 表示新窗口的高度(行数)
        ctrl+w w: 在两/多个窗口键切换
        ctrl+w +/ctrl+w -: 当前窗口扩大/缩小一行, 前面可以加数字, 表示扩大/缩小多行
        数字 ctrl+w _: 将窗口变为指定高度
        q/cloase: 退出当前窗口
        wall/wa: 全部保存, qall/qa, 全部关闭
        only: 关闭其它所有窗口, 只保留当前窗口
        ctrl-w h 到左边的窗口
        ctrl-w j 到下面的窗口
        ctrl-w k 到上面的窗口
        ctrl-w l 到右边的窗口
        ctrl-w t 到顶部窗口
        ctrl-w b 到底部窗口
        ctrl-w h, j, k, l, 左右上下移动窗口

    标签页

    一般来说tabe, tabedit, tabnew的作用是一样的, 下面都用tabe, 除非有特殊情况
        tabe: 打开新的标签页
        tabe d:/xxx: 在新标签页中打开文件
        tab: 后面跟可以打开新窗口的命令(如 help), 这样可以在新标签页打开新窗口, 如 tab help

    替换

    替换的基本表达式 [range]s/from/to/[flags], 表示将range范围的from替换成to, flags匹配范围
        s/aaa/bbb/: 表示把当前行的第一个aaa替换成bbb, 不指定flag就只替换第一个
        %s/aaa/bbb/g: 把全文中的所有aaa替换成bbb, g的意思是指全部匹配的
        行号1, 行号2s/aaa/bbb/g: 把行号1和行号2之间的aaa替换成bbb
        行号1, 行号2s/^/aaa/g: 把行号1和行号2之间的行前面都加上aaa(即, 可以使用正则)
        另外, .代表当前行, $  表示最后一行
        行号1, 行号2s/^////g: 从行号1和行号2之间的行都加上//注释(这是因为/有特殊用途, 需要转义)
        行号1, 行号2s////g: 从行号1和行号2之间的行都去掉//注释
     
    另一种转义的方法是, 使用+代替/, /正常使用, 如 4, 8s+aa/bb+aa or bb+





  • 相关阅读:
    中国剩余定理
    Codeforces 240 F. TorCoder
    ZOJ 1202 Divide and Count
    洛谷 3380 【模板】二逼平衡树(树状数组套权值线段树)
    bzoj 3196/ Tyvj 1730 二逼平衡树 (线段树套平衡树)
    uva 10791
    uva 699 The Falling Leaves
    uva 839 Not so Mobile
    2017 济南综合班 Day 5
    2017 济南综合班 Day 4
  • 原文地址:https://www.cnblogs.com/gaoxiaoyuan/p/3817979.html
Copyright © 2020-2023  润新知