VIM使用

作者: 五城十九洲 | 来源:发表于2019-08-18 19:44 被阅读0次

    VIM使用

    一、三种模式简介

    1.Normal模式

    ESC | ctrl+[

    2.Insert模式

    小写 i (insert) 当前字母前面插入 | 大写 I 行首插入

    小写 a (append) 当前字母后面插入 | 大写 A行末插入

    小写 o (open a line below) 当前行下方插入空行并进入插入模式 | 大写 O当前行上方插入空行并进入插入模式

    小写 s (substitute) 删除当前字符并进入插入模式 | 大写 S删除当前行并进入插入模式 (注意会有删除操作)

    3.Visual模式 普通模式下使用v进行visual选择,例如

    选择 普通模式 按v,左下角变成VISUAL,光标往右移动(会选中一段区域),eg:按d或x删除

    选择行 大V整行选中,使用上下方向键,eg:按d或x删除

    选择块 Ctrl + v 配合方向键可以选择一块区域,eg:按d或x删除

    Command命令,普通模式下输入“:”之后执行命令,例如
    :wq 保存退出
    :vs 垂直分屏 vertical split
    :sp 横向分屏 split
    :%s /oldstr/newstr /g 全局替换
    :syntax on 语法高亮
    :set hls 高亮搜索
    :set incsearch 增量搜索


    二、移动

    上下左右:h (←) j (↓) k (↑) l (→)

    ADM-3A 终端机全貌.png 键盘.png
    单词移动.png

    单词移动

    w/W 移到下一个word/WORD开头

    e/E 移动到下一个word/WORD结尾 # 首次执行,若光标不在当前单词结尾,则会跳到本单词结尾

    b/B 回到上一个word/WORD开头 # 首次执行,若光标不在当前单词开头,则会跳到本单词开头

    其中 word -以非空白符分割的单词,WORD -以空白符分割的单词

    行间搜索移动

    f{char} 正向移动到下一个{char}字符上,F{char}表示反过来搜前面的字符

    t{char} 正向移动到char的前一个字符,大写的T反过来向前,移动到char的后一个字符

    ; 重复上次的命令

    , 反转方向执行上次的命令

    Vim水平移动

    0移动到行首第一个字符

    $移动到行尾

    Vim页面移动

    gg/G 移动到文件的开头和结尾,可以使用Ctrl + o快速返回(可连续返回)

    Ctrl + u/Ctrl + f 上下翻页(upword/forword)
    Ctrl+u/Ctrl+d 上下翻半页(up/down)

    标记跳转

    m{mark} 标记

    `{mark} 返回标记

    三、文本对象

    • 操作方式:[number]<command>[text object]

      number 次数
      command 命令,d(delete),c(change),y(yank)
      text object 要操作的文本对象,比如单词w,句子s,段落p

    • 范围文本对象:

      ​ iw 当前单词 ; aw 当前单词及一个空格

    • 分隔符文本对象:i (in) 选择分隔符内部的文本,a (around) 选择包括分隔符在内的整个文本

      a) 一对圆括号 ; i) 圆括号内部

    image.png

    四、增删改查

    Vim删除

    • Vim在Normal模式下:

      x 删除光标处字符 4x 删除4个字符
      dw/daw(d around word) 删除光标所在单词
      diw 不会删除单词周围的空格
      dd 删除当前行 5dd 删除5行

    • 插入模式下:
      ctrl+h 删除上一个字符,ctrl+w删除上一个单词,ctrl+u删除当前行(同样,这几个快捷键适用于终端)

    Vim 快速修改

    • 常用有三个,r(replace),c(change),s(substitute)
    • normal模式下使用r可替换一个字符。s替换并进入插入模式
    • 使用c配合文本对象,快速修改</pre>

    撤销操作

    u (undo)表示撤销最后一次修改 #可以连续用

    U 表示撤销对整行的修改 #只能用一次,再用旧是恢复撤销的内容,二者不断切换

    Ctrl + r 恢复撤销的内容 #可以连续用

    Vim查询

    • 使用/或?进行前向或者反向搜索

    • 使用n/N跳转到下一个或者上一个匹配

    • 使用*或者#进行光标所在单词的向前和向后匹配 # 得在查询时才能这样用

    五、搜索替换

    用途:代码中命名错误、重构代码

    :[rang] s[ubstitute]/{pattern}/{string}/[flags]

    • rang:表示范围,比如:10,20 表示 10-20 行,% 表示全部。

    • pattern:表示要替换的模式(支持:正则)。

    • string:替换后的文本。

    • flags:替换标志位。g(global) 表示全局范围内执行;c(confirm) 表示确认,可以确认或拒绝修改;n(number)报告匹配到的次数而不替换。

    Tips:

    • 单词精确匹配,可使用 <>,如::% s/\<hello\>/world/g,将所有的 hello 替换为 world。

    六、复制粘贴与寄存器

    Normal模式复制粘贴

    选中 v(visual) 复制 y(yank) 粘贴 p(put) 剪切 d(delete),剪贴dp

    粘贴代码需要注意:默认设置autoindent(自动缩进),粘贴python代码缩进混乱

    需要使用:set paste 和:set nopaste解决

    Vim寄存器

    Vim里操作的是寄存器而不是系统剪切板

    默认我们使用d删除或者y复制的内容都放到了“无名寄存器”

    • 通过 "{register} 前缀可以指定寄存器,不指定默认用无名寄存器。

      • 如: "ayiw 复制一个单词到寄存器 a 中,"bdd删除当前行到寄存器 b 中。
    • 复制专用寄存器 "0 使用 y 复制文本同时会被 拷到复制寄存器 0

    • 系统剪贴板 "+ 可以在复制前加上 "+ 复制到系统剪贴板。注:需要支持 :echo has('clipboard') 返回结果为:1。

    • 其它一些寄存器,如: ". 上次插入的文本; "% 当前文件名。

    Tips:

    • :set clipboard=unnamed 可以直接复制粘贴系统剪贴板的内容。

    • :reg a 查看寄存器a中的内容

    • :call setreg('a', '') 清空寄存器a的内容

    • 常见寄存器:

      "" 无名寄存器,缺省使用,""p等同于p

      "a等 有名寄存器a-z

      "0 复制专用寄存器,使用y复制文本同时会被拷贝到复制寄存器0

      "+ 系统剪贴板,可以在复制前加上 "+ 复制到系统剪贴板

      "% 当前文件名

      ". 上次插入的文本

    七、宏(macro)批量操作

    • 使用 q 来进行录制,同时使用 q 来结束录制。

    • 使用 q{register} 选择要保存的寄存器,把录制的命令保存其中。

    • 使用 @{register} 回放寄存器中保存的一系列命令,达到批量操作。

    例子:给多行url链接加上双引号

    方法一:先使用q开始录制,给一行加上双引号,之后使用q退出;在剩下的所有行中回放录制的宏

    录制 -->

    qa #开始录制,保存在寄存器a(左下角出现recording @a)

    I -> 加上前双引号 -> ESC #在行首插入双引号

    A -> 加上后双引号 -> ESC #在行尾巴插入双引号

    q #结束录制(左下角recording @a 消失)

    回放 -->

    1)一行行回放

    j #到下一行

    @a #回放寄存器a中的录制的操作

    2)全篇回放

    V #大V选中一行(左下角变成 --VISUAL LINE--)

    G #选中行一直到结尾,即全选

    : #进入命令行模式(左下角变为 :'<,'> )

    normal @a #命令行模式下输入该命令,回车完成全部修改

    八、Vim 补全

    • ctrl+n(nest),ctrl+p(previous)搜索文件内的关键词,匹配补全

    • ctrl+x+f 补全文件名。

    相关文章

      网友评论

        本文标题:VIM使用

        本文链接:https://www.haomeiwen.com/subject/xyrdsctx.html