• vim 使用笔记


    记录一下使用vim 的心得:不定期更新

    =========================================================================================

    模式:

    关于vim 的模式,很多人都说有三种模式:

      命令模式、插入模式、正常模式。(回想开始学习linux的时候,我也是这行认为的)

    在后来的工作和使用当中,了解到还有一种模式: 可视模式

    总结:

    vim一共有4个模式:

    正常模式 (Normal-mode) 
    插入模式 (Insert-mode)
    命令模式 (Command-mode)
    可视模式 (Visual-mode)


    正常模式: 启动vim后默认处于正常模式。不论位于什么模式,按下<Esc>键(有时需要按两下)都会进入正常模式

    插入模式:在正常模式中按下i, s, a, o等键,会进入插入模式可以正常编辑内容。

      按不同的键,进入插入模式的光标位置是不一样的。

        i : 直接进入插入模式,光标还在原来位置

        s: 先删除光标所在位置的字符,然后进入插入模式,光标还在原来的位置

        o: 会在光标所在行下面新增加一行,然后进入插入模式,光标在新增行的位置(效果就好像是先在光标的行尾敲回车后,再进入插入模式)

        a: 将光标向右移动一位,然后进入插入模式

    命令模式: 在正常模式中,按下:(英文冒号)键,会进入命令模式。在命令模式中可以执行一些输入并执行一些vim或插件提供的指令,就像在shell里一样。这些指令包括设置环境、文件操作、调用某个功能等等。

      命令模式中常用的命令有:q(退出)、q!(强制退出)、w(保存)、wq(保存并退出)。

    可视模式: 在正常模式中按下v, V, <Ctrl>+v,可以进入可视模式。

      在可视模式中,通过 h,j,k,l 等方位操作可以像拿鼠标拖拽一样进行选择文本。不同的输入v方式,不同的可视模式也不一样。

      v : 正常的选择模式,就好像正常的鼠标拖拽选择一样。

      Ctrl + v : 行选择模式,使用上下方位操作时,是整行的选择。

      V : 列选择模式,使用方位操作时,是以列为单位进行选择。

    ======================================================================

    转载:https://www.cnblogs.com/xiaodi-js/p/7209015.html

    查找与替换

    一、vim 查找

    1. 正向查找 / 与 反向查找 ?

    2. 退出查找 <Esc>

    3. 跳转到下一处匹配 n ,跳转到上一处匹配 N

    4. /<CR> 正向跳转到相同模式的下一处匹配, ?<CR> 反向跳转至相同模式的上一处匹配

    5. <Up>键浏览之前的查找记录,<Ctrl-p>查看上一条查找记录, <Ctrl-n>查看下一条查找记录

    6. :noh 清除匹配结果的高亮

    7. :%s///gn 统计当前模式的匹配个数

    8. q/ 调出查找历史窗口

    9. q: 调出命令行历史窗口

    二、 vim替换

    语法: [range]s[ubstitute]/{pattern}/{string}/[flags]

    1. 替换域{string}  特殊字符: 

      插入一个换行符

      插入一个制表符

      \ 插入一个反斜杠

      1 插入第一个子匹配

      插入匹配模式的所有内容

      & 插入匹配模式的所有内容

      ~ 使用上一次调用substitute命令的{string}

      ={vim script} 执行表达式,并将结果返回作为替换字符串

    2. 查找范围 [range]

       为空则表示当前行 :s/go/goes/

       :%表示在文件所有行执行 :%s/go/goes/

       :'<,'> 表示在可视模式下选中的行 :'<,'>s/go/goes/

    3. 标志位 [flag]

       g 表示在一整行上执行  :%s/go/goes/g

       c 对替换操作进行确认  :%s/go/goes/gc

       n 抑制正常的替换操作, 只显示匹配个数 :%s/go/goes/gn

       e 屏蔽错误提示 :%s/go/goes/ge

    4. 将替换操作分两步

        第一步:通过/ 进行查找模式匹配

        第二步:查找域留空则可以利用第一步的查找模式 :%s//goes/gc  或者利用<Ctrl-R>/ 将上一步的查找模式黏贴到查找域

    5. 黏贴寄存器内容或者引用寄存器

       :%s//<Ctrl-R>0/gc  黏贴复制专用寄存器内容到替换域

       :%s//=@0/gc 引用复制专用寄存器中的内容到替换域

    6. 重复上一次的替换命令 g& 

        :%s//~/&   表示用同样的标志位、同样的替换字符串、同样的查找模式以及全文件范围内重复上一次的substitute命令

        :&&  重复上一次命令只作用于当前行, 第一个&表示重复上次的:substitue 命令,第二个& 表示重用上一次:substitue命令的标志位

        :%&& 重复上一次命令并作用于整个文件

        :'<,'>&& 作用于高亮区域

        g& 相当于 :%&&

    7. 替换是执行vim脚本

        :%s//=submatch(0)-1/g    submatch(0) 获得当前匹配的内容

    8. 在多个文件中执行替换操作

        第一步:args **/*.txt  将要执行替换的文件加入参数列表

        第二步:  set hidden   在不保存文件的情况下跳转到其他文件

        第三步:argdo %s//goes/ge      利用 e标志位抑制找不到模式的情况下抛出错误 

        第四步:argdo update  在文件有改动的情况下执行保存

    ===========================================================================================

    转载:https://www.cnblogs.com/littlerabbit/articles/2366397.html

    撤销和重做命令


    <Undo> 或 u            撤销 [count] 次更改。

    :u[ndo]                    撤销一次更改。

    :u[ndo] {N}              转到改变号 {N} 之后。

    CTRL-R                    重做 [count] 次被撤销的更改。

    :red[o]                     重做一个被撤销的更改。

    U                             撤销最近对特定行所作的一系列更改。

    单次重复


    .           重复上次改变,有计数前缀的重复 [count] 次。
                如果 'cpoptions' 包括 'y' 标志,也可以用来重复一个抽出操作。不能重复命令行命令。
                简单的改变操作可以用 "." 重复。
                如果没有数字前缀,使用上次的改变的重复次数。
                如果输入一个重复次数,就用它取代上次的计数。
                如果上次改变的操作使用数字编号的寄存器,则逐次递增使用寄存器的序号。
                如果重复的命令涉及可视的选择区域,使用相同_大小_的区域。

    @:        重复上次命令行 [count] 次。

    多次重复


    :[range]g[lobal]/{pattern}/[cmd]         在 [range] 界定的匹配模式 {pattern} 的文本行上执行 Ex 命令 (缺省是 ":p")。

    :[range]g[lobal]!/{pattern}/[cmd]        在 [range] 界定的_不_匹配模式 {pattern} 的文本行上执行 Ex 命令 (缺省是 ":p")。

    :[range]v[global]/{pattern}/[cmd]        等同于 :g!。

    重复组合操作


    q{0-9a-zA-Z"}        在寄存器 {0-9a-zA-Z"} 里记录键入的字符 (大写名字的寄存器表示附加键入的内容)。
                                  'q' 命令不能在执行寄存器时使用。同样,在映射里也不能。

    q                            停止记录。(停止记录的 'q' 不会被保存在寄存器里,除非它是映射的结果)

    @{0-9a-z".=*}        执行寄存器 {0-9a-z".=*} 的内容 [count] 次。
                                  不能用寄存器 '%' (当前文件名) 和 '#' (轮换文件名) 。
                                  "@=" 则会提示你输入一个表达式。这个表达式的结果会被执行。

    @@                        执行上次执行的 @{0-9a-z":*} [count] 次。

    :[addr]*{0-9a-z".=} 或 :[addr]@{0-9a-z".=*}
                              把寄存器 {0-9a-z".=*} 里的内容看成一个 Ex 命令执行。
                              首先,把光标放在 [addr] 行 (缺省是当前行) 上。
                              如果 'cpoptions' 设定了 'e' 标志位而寄存器的内容最后一行没有 <CR>,会自动加上。
                              ":*" 命令只有在 'cpoptions' 设置 '*' 标志位时才会识别。如果用 'nocompatible',这并非缺省。
                              ":@=" 使用最近使用的表达式。表达式执行的结果被当作 Ex 命令执行。
                              这些命令里,不识别映射。

    :[addr]@:            先把光标放在 [addr] 行 (缺省是当前行) 上,然后重复上次的命令行。

    :[addr]@@          先把光标放在 [addr] 行 (缺省是当前行) 上,然后重复上次的 :@{0-9a-z"}。

    Talk is cheap, show me the code.
  • 相关阅读:
    ASP.NET中使用javascript
    遍历DataList控件
    史上最强劲之android模拟器命令详解
    Android开发环境配置简介
    Android模拟器adb命令介绍
    听一名普通android应用开发人员谈:怎样成为一名Android开发者
    android模拟器安装及优化(集锦)
    Ubuntu 快捷键集锦
    smplayer 中文字幕乱码,进度条及拖放MKV
    如何在Windows下搭建Android开发环境
  • 原文地址:https://www.cnblogs.com/cidgur/p/12517878.html
Copyright © 2020-2023  润新知