[Linux] VIM Practical Note

Practical Vim

命令

.命令

  • 重复上次的修改
  • .范式:用一键移动,另一键执行

    [n] Ctrl-a

  • 对当前或查找到第一个数据,进行加运算

    [n] Ctrl-x

  • 对当前或查找到第一个数据,进行减运算

    gR、gr

  • 虚拟替换模式,替换制表符

    Ctrl - o

  • 跳转列表,回跳

    Ctrl - i

  • 跳转列表,前进

    1. 模式

    普通模式

  • 停顿时请离开画笔
  • 把撤销单元切成块:进入插入 修改 离开,是一次修改
  • 操作符 + 动作命令 = 操作
  • .命令
    • 重复上次的修改
    • .范式:用一键移动,另一键执行
  • vim 的操作符命令 d{motion}
    • c 修改
    • d 删除
    • y 复制到寄存器
    • g~ 反转大小写
    • gu
      • 转换为小写
    • gU
      • 转换为大写
      • 增加缩进
    • <
      • 减少缩进
    • =
      • 自动缩进, 格式化
    • !
      • 使用外部程序过滤{motion}所跨越的行
  • Ctrl - w c
    • 关闭活动窗口
  • Ctrl - w o
    • 只保留活动窗口,关闭其他所有窗口
  • {N} gt
    • 切换到编号为{N}的标签页
  • gt
    • 切换到下一标签页
  • gT
    • 切换到上一标签页

      插入模式

  • Ctrl-h
    • 删除前一个字符
  • Ctrl-w
    • 删除前一个单词
  • Ctrl-u
    • 删除至行首
  • 返回普通模式
    • ESC
    • Ctrl - [
    • Ctrl - o
      • 切换到插入普通模式
      • 执行一次普通模式命令,后返回插入模式
  • Ctrl - r {register}
    • 插入寄存器中的的文本
  • Ctrl-r Ctrl-p {register}
    • 按原义插入寄存器中的的文本,不缩进
  • Ctrl-r =表达式
    • 调用表达式寄存器,插入计算后的值
  • Ctrl - v{code}
    • 用户字符编码插入非常用字符
    • Ctrl-v065
    • Ctrl-vu00bf
  • Ctrl - k{char1}{char2}
    • 用二合字母插入非常用字符
    • Ctrl-k?I

      可视模式

  • v
    • 激活面向字符的可视模式
  • V
    • 激活面向行的可视模式
  • Ctrl - v
    • 激活面向列块的可视模式
  • gv
    • 重选上次的高亮选区

      命令行模式

  • 命令
    • : [range] delete [reg]
      • 删除提定范围的行【到寄存器】
    • : [range] yank [reg]
      • 复制指定范围的行 【到寄存器】
    • : [line] put [reg]
      • 在指定行后粘贴寄存器中的内容
    • : [range] copy {address}
      • 把指定范围的行复制到指定地址行之下
    • : [range] move {address}
      • 把指定范围的行移动到指定地址之下
    • : [range] join
      • 连接指定范围内的行
    • : [range] normal {commands}
      • 对指定范围内的每一行执行普通模式命令 {commands}
    • :[range] substitute/{pattern}/{string}/[flags]
      • 把指定范围内的{pattern} 替换成{string}
    • : [range] global/{pattern}/[cmd]
      • 对指定范围内匹配{pattern}的所有行执行Ex命令{cmd}
  • 地址、范围表示符号
    • 0
      • 虚拟行,位于文件第一行上方
    • 1
      • 文件的第一行
    • $
      • 文件的最后一行
    • .
      • 光标所在行
    • 'm
      • 包含位置标记m的行
    • '<
      • 高亮选区的起始行
    • '>
      • 高亮选区的结束行
    • %
      • 整个文件(:1,$的简写形式)
  • @:
    • 重复上次的Ex命令
  • Tab
    • 自动补全命令
  • Shif - s
    • 返回遍历补全列表
  • Ctrl - d
    • 显示可用的补全列表
  • Ctrl - r Ctrl - w
    • 插入光标下的单词
  • Ctrl -r Ctrl - a
    • 插入光标下的字串
  • q/
    • 打开查找命令历史的命令行窗口
  • q:
    • 打开Ex命令历史的命令行窗口
  • Ctrl - f
    • 从命令行模式切换到命令行窗口
  • 调用外部程序
    • :shell
      • 启动一个shell,exit返回vim
    • :!{cmd}
      • 在shell中执行{cmd}
    • :read !{cmd}
      • 在shell中执行{cmd}, 并把其标准输出插入光标下方
    • :[range]write !{cmd}
      • 在shell中执行{cmd}, 以[range] 作为其标准输入
    • :[range] ! {filter}
      • 使用外部程序{filter} 过滤指定的[range]

        2. 文件

        管理多个文件

  • 缓冲区
    • :ls
      • 查看缓冲区列表
    • :bprev
      • 前一项
    • :bnext
      • 后一项
    • :bfirst
      • 第一项
    • :blast
      • 最后一项
    • :bdelete 删除缓冲区项
      • :bdelete N1 N2 N2
      • :N,M bdelete
    • :args 缓冲区参数列表
      • :args {arglist}
      • :args code/files
      • :args index.html app.js
      • :args cat .chapters
      • :args Glob
        • :args .
        • :args **/*.js
        • :args **/.
    • 退出时,处理隐藏缓冲区的方式
      • :write
      • :edit!
      • :qall!
      • :wall!
  • 分割窗口
    • Ctrl - w
    • Ctrl - v
    • :split {file}
      • 水平切分
    • :vsplit {file}
      • 垂直切分
    • Ctrl-w h|j|k|l
      • 切换到 左下上右窗口
    • Ctrl-w w
      • 切换窗口
    • :close
      • 关闭活动窗口
    • :only
      • 只保留活动窗口,关闭其他所有窗口
    • :lcd {path}
      • 设置当前窗口的本地工作目录
  • 标签页将窗口分组 :h tabpage
    • :windo lcd {path}
      • 为标签页的所有窗口,设置本地工作目录
    • :tabedit {filename}
      • 在新标签页打开文件
    • :Ctrl-w T
      • 把当前窗口移到一个新标签页
    • :tabclose
      • 关闭当前标签页及其所有窗口
    • :tabonly
      • 只保留活动标签页,关闭所有期他标签页
    • :tabnext {N}
    • :tabnext
    • :tabprevious
    • :tabmove [N]
      • 0:移到开头 省略N :移到结尾

        打开及保存文件

  • :edit
  • :edit %:h Tab
  • :edit {path}
  • :find
  • :edit .
  • :Explore
    • 打开文件管理器
  • Ctrl-^
    • 从文件管理器,切换回刚才编辑的文件
  • Ctrl-g
    • 显示当前文件的文件名及状态
  • :!mkdir -p %:h
  • :w !sudo tee % > /dev/null
    • 以超级用户使用tee保存文件

      3. 移动及跳转

      用动作命令移动

  • 行移动
    • h j k l
      • 左 下 上 右 移动g一个实际行
    • gj gh gk gl
      • 左 下 上 右 移动一个屏幕行
    • 0
      • 移动到实际行的行首
    • g0
    • ^
      • 移动到实际行的第一个非空白字符
    • g^
    • $
      • 移动到实际行的行尾
    • g$
  • 单词移动
    • w
      • 正向移到到下一单词开头
    • b
      • 反向移动到当前单词/上一单词的开头
    • e
      • 正向移动到当前单词/下一单词的结尾
    • ge
      • 反向移动到上一单记词的结尾
    • W、B、E、GE
      • 大写表示操作字符串
  • 查找字符
    • f {char}
      • 正向移动到下一个字符所在之处
    • F {char}
      • 反向移动到上一下字符所在之处
    • t {char}
      • 正向移动到下一个字符所在之处的前一个字符上
    • T {char}
      • 反向移动到上一个字符所在之处的后一个字符上
    • ;
      • 重复上次的字符查找命令
    • ,
      • 反转方向查找上次的字符查找命令
  • 精确的文本对象选择选区
    • 分隔符文本对象
      • a) 或 ab
        • a+符号:表示选择一对符号间的内容,包含符号在内
      • a} 或 aB
      • a]
      • a>
      • a'
      • a"
      • a`
      • at
        • 一对XML标签
      • i + ) } ] > ' " ` t
        • i + 符号:表示选择一对符号内部,不包含符号
    • 范围文本对象
      • iw
        • 当前单词
      • iW
        • 当前字串
      • aw
        • 当前单词及一个空格
      • aW
        • 当前字串及一个空格
      • is
        • 当前名子
      • as
        • 当前名子及一个空格
      • ip
        • 当前段落
      • ap
        • 当前段落及一个空行
  • 位置标记
    • m{a-zA-Z}
      • 设置位置标记,小写用于当前缓冲区,大写用于全局
    • '{mark}
      • 跳到位置标记所在行, 光标置于第一个非空白字符 上
    • `{mark}
      • 跳到位置标记所在行, 光标置于位置所在之处,同时恢复行和列位置
    • 自动位置标记
      • ``
        • 当前文件中上次跳转动作之前 的位置
      • `.
        • 上次修改的地方
      • `^
        • 上次插入的地方
      • `[
        • 上次修改或复制的起始位置
      • `]
        • 上次修改或复制的结束位置
      • `<
        • 上次高亮选区的起始位置
      • `>
        • 上次高亮选区的结束位置

          文件间跳转

  • 遍历跳转列表
    • Ctrl - o
      • 跳转列表后退
    • Ctrl - i
      • 跳转列表前进
  • 遍历改变列表 h: changelist
    • :changes 查看改变列表
    • g; 或 g,
      • 正向或反向遍历改变列表
  • gi
    • 转到上次插入位置,并进入插入模式。 ( 恢复`^光标位置,并进入插入模式)
  • gf
    • 跳转到光标下的文件

      4. 寄存器

      :reg

  • 查看寄存器内容

    复制与粘贴

  • ""
    • 无名寄存器
  • "0
    • 复制专用寄存器
  • "_
    • 黑洞寄存器
  • "+
    • 系统剪贴板
  • "*
    • 选择专用寄存器
  • "=
    • 表达式寄存器
  • "%
    • 当前文件名
  • "#
    • 轮换文件名
  • ".
    • 上次插入的文本
  • ":
    • 上次执行的Ex命令
  • "/
    • 上次查找的模式

  • q
    • 录制和停止宏按钮
  • qa 或 qA
    • 录制宏到寄存器a 或 大写字母 追加内容到寄存器a
  • q{register}
    • 录制宏到寄存器
  • @{register}
    • 执行寄存器内的内容
  • @@
    • 重复最近调用过的宏
  • [n]@a
    • 加次数执行宏
  • [range] normal @a
    • 指定范围内执行宏
  • :argdo normal @a
    • 对参数列表的所有缓冲区执行宏@a
    • 提前设置 hidden

      5. 模式

      按模式匹配及按原义匹配

  • :set ignorecase
    • 全局设置大小写敏感性
  • \c \C
    • 每次查找时设置大小写敏感性
  • \v
    • (very magic)来统一正则表达式所有特殊符号的无则
  • \V
    • 原则文本开关
  • ()
    • 捕获子匹配
  • <>
    • 界定单词边界
  • \zs \ze
    • 界定匹配的边界
  • * 转义问题字符
    • 反向查找时转义?号

      查找

  • / 或 ?
    • 正向或反向查找
  • n 或 N
    • 跳转到下一处 或 上一处匹配,保持查找 方向与偏移不变
  • gn 或 gN
    • 进入面向字符的可视模式,并选中下一外或上一处匹配
  • :h incsearch
    • 在执行查找前预览每一处匹配
  • //e
    • e标记,将光标偏移到查找匹配的结尾
  • :%s//"\1"/g
    • 用上次查找模式查找
  • :%s///gn
    • substitute 统计匹配数目,不修改
  • :vimgrep //g %
    • 统计匹配总数

      替换

  • :[range] s[ubstitute]/{pattern}/{string}/[flags]
    • 查找替换
    • g flag
      • 全局范围内执行
    • c
      • 确认或拒绝每一处修改
    • n
      • 抑制正常的替换行为
    • e
      • 屏蔽错误提示
    • &
      • 重用上一次flag
  • 替换域中特殊字符
    • \r
      • 插入换行符
    • \t
      • 制表符
    • \
      • 反斜杠
    • \1
      • 插入第1个匹配
    • \2
      • 插入第2个匹配
    • \0
      • 插入匹配模式的所有内容
    • &
      • 同\0
    • ~
      • 使用上次调时的{string}
    • ={vim script}
      • 执行{vim script}表达式;并将结果作为替换{string}
  • g&
    • 在整个文件范围内重复面向行的替换操作
    • :%s//~/& 等于 g&
  • :[range]&&
    • 重新执行替换
    • g& 是:%&&的快捷方式
  • :%s//=submatch(0)-1/g
    • submatch(0) 可得到当前匹配的内容
  • :%s//={"dog":"man", "man":"dog"}[submatch(1)]/g
    • 用字典映射替换匹配的内容
  • 在整个工程范围内查找
      1. :vimgrep // **/*.txt
      1. :cfdo %s//string/gc
      • 设置 hidden
      • :cfdo %s//string/g | update

        global

  • :[range] global[!] /{pattern}/ [cmd]
    • 在某个指定模式的所有匹配行上运行Ex命令

      6. 工具

      ctags

  • Ctrl - ]
    • 跳转到定义处
  • g Ctrl - ]
    • 如果多处匹配,提示用户指定一处进行跳转
  • Ctrl - t
    • 后退按钮
  • :tag {kewword}
  • :tjump {keyword}
  • :pop 或 Ctrl -t
    • 反向遍历标签历史
  • :tag
    • 正向遍历标签历史
  • :tnext
  • :tprev
  • :tfirest
  • :tlast
  • :tselect

    Quickfix列表

  • :cnext
  • :cprev
  • :cfirst
  • :clast
  • :cnfile
  • :cpfile
  • :cc N
  • :copen
  • :cclose
  • :cdo {cmd}
  • :cfdo {cmd}

    工程内查找

  • grep
  • vimgrep

    自动补全

  • 调出命令
    • Ctrl - n
      • 普通关键字
    • Ctrl -x Ctrl - n
      • 当前缓冲区关键字
    • Ctrl -x Ctrl - i
      • 包含文件关键字
    • Ctrl - x Ctrl - ]
      • 标签文件关键字
    • Ctrl - x Ctrl - k
      • 字典查找
    • Ctrl - x Ctrl - l
      • 整行补全
    • Ctrl - x Ctrl - f
      • 文件名补全
    • Ctrl - x Ctrl - o
      • 全能(Omni)补全
  • 弹出菜单使用
    • Ctrl - n
      • 使用下一匹配项
    • Ctrl - p
      • 使用上一匹配项
    • Down
    • UP
    • Ctrl - y
      • 确认使用当前选中的匹配项
    • Ctrl - e
      • 还原最早输入的文本
    • Ctrl - h
      • 从当前匹配项中删除一个字条
    • Ctrl - l
      • 从当前匹配项中增加一个字符
    • {char}
      • 中止自动补全并插入字符

        Vim拼写检查器

  • :set spell
    • 启用拼写检查器
  • [s
    • 反向跳转
  • ]s
    • 正向跳转
  • z=
    • 修改建议
  • zg
    • 光标下单词添加到拼写文件中
  • zw
    • 标记为拼写错误
  • zug
    • 撤销zg zw操作
  • 插入模式利用拼写补全
    • Ctrl - x s
    • Ctrl -x Crtl - s

      7. 插件

      commentary.vim 注释

  • gc {motion}
    • 切换指定行的注释状态
  • gcap
    • 注释当前段落
  • gcG
    • 注释到结尾
  • gcc
    • 注释当前行

      matchit

  • % 在配对的关键字间跳转

猜你喜欢

转载自www.cnblogs.com/abeen/p/9257084.html