侧边栏壁纸
博主头像
LYMTICS

海纳百川,有容乃大

  • 累计撰写 45 篇文章
  • 累计创建 37 个标签
  • 累计收到 19 条评论

目 录CONTENT

文章目录

VIM学习笔记

LYMTICS
2022-01-13 / 0 评论 / 1 点赞 / 148 阅读 / 4,004 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-04-09,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

VIM学习笔记基础篇

注:本文章为本人学习VIM时记录的笔记,且经过整理,适合临时查询,不适合做完整的学习。

相关资料:

初步接触

帮助手册

对某一个命令进行查询:

  • :help :qa
  • 简写 :h :qa
  • 在非桌面模式下: F1 进入

有两种帮助手册:

  • 用户帮助手册,像是一本使用指南
  • 引用帮助手册,更适合查询,讲的比较详细

理解模式

VIM 一共有6种基本模式:

  • 正常模式(Normal mode)
    • 也叫默认模式。
    • 进入 vim 时默认的模式所有输入的键都直接对应着命令
    • 也被叫做命令模式.
  • 插入模式(Insert mode)
    • 任何键盘录入都会插入到当前文档中
  • 可视模式(Visual mode)
    • 很像正常模式
    • 但是移动命令会改变选中的一块高亮区域
    • 执行的命令会对选定范围进行
  • 选择模式(Select mode)
    • 可以用鼠标或光标键高亮选择文本
    • 任何输入都会替换选择的高亮文本
    • 并进入插入模式
  • 命令行模式(Command-Line mode)
    • 可以窗口下方执行一条命令
    • 一般是通过 : 执行单行命令
    • 通过 / 和 ? 进行搜索
  • Ex mode(多行命令执行模式)
    • Ex 指的是 Execute
    • Normal 正常模式下使用 gQ 进入
    • 使用 :visual 退出

移动

  • 使用hjkl进行移动
  • 通过配置:set mouse=a可以用鼠标移动光标、使用滚轮翻页、使用鼠标点击链接,具体可以:h mouse 查看更多帮助
  • 另外如果只是用键盘,可以用CTRL + ]跳入链接,使用CTRL + o跳出链接
  • e end of word
  • ge 向前end of word
  • ^ 行首第一个非空字符,0 行首第一个字符
    $ 行尾最后一个字符,g_ 本行最后一个非空字符
  • + 向下到行首非空字符,相当于j^
  • - 向上,同上
  • ggG 跳到第一行和跳到最后一行
  • 2G 跳到第二行,命令模式::30到30行
  • ``跳到上一次,只能是上一次,不能是上上次
  • CTRL+O CTRL+I 跳转到上一次,下一次
  • 10|跳转到10列
  • 20%跳转到20%

标记

  • 做标记a:ma
  • 看标记::mark
  • ' 是上次跳转操作光标所在的位置
  • " 是上次退出当前文件的位置
  • [ 是上次编辑(删除修改等)的开始位置
  • ] 是上次编辑(删除修改等)的结束位置
  • . 是上次编辑(删除修改等)的最后的操作位置
  • 删除标记:delma
  • \

插入

  • a append 在光标前插入
  • i insert 在光标后插入
  • I 在本行的最前面插入
  • A 在本行的最后面插入
  • o 在下一行插入
  • O 在上一行插入

插入模式下按CTRL + o进入插入普通模式,可以执行一次命令

查看信息

查看文档当前的信息

  • CTRL + G
  • :f
  • :file

这里的位置百分比是光标所在位置在整体文件种的相对比例

配置参数

行号

  • set nu
  • set nonu
  • set rnu
  • set nornu

按键映射

map <Left> <Nop>	

修改按键映射

Options

  • set ru[ler]
  • set noru[ler]

打开开关文件:options

  • set number? 查看状态
  • 复原 set number&
  • set cursorline
  • set cursorcolumn

其他实用开关

  • set number 显示行号
  • set relativenumber 显示相对行号
  • set cursorline 光标所在的当前行高亮
  • set cursorcolumn 光标所在的当前列高亮
  • set nocompatible 使用 vim 模式,不与 Vi 兼容
  • syntax on 打开语法高亮
  • set showmode 在底部显示,当前所处模式
  • set showcmd 命令模式下,在底部显示键入指令
  • set mouse-=a 纯键盘操作
  • set encoding=utf-8 使用 utf-8 编码
  • set autoread 硬盘文件变化后,自动读取
  • 把上述这些存储到 ~/.vimrc 之后,以后这些配置就会自动起作用了
  • 也可以去 github 搜索 .vimrc 找到关于配置的更多信息

文件类型

:filetype on 检测文件扩展名

:filetype off 关闭检测文件扩展名

:set filetype=c 强制设置文件类型

为某种文件单独设置配置

要打开文件类型缩进的开关

:filetype indent on

然后在/usr/share/vim/vim81/indent/ 目录下进行配置:

  • c.vim
  • java.vim
  • 等等

横滚幅度

前提:

  • :set nowrap 不换行

如果一行特别长,一致往左,当到达边界后,会继续向左,但光标会移动到屏幕中间。

  • 可以通过设置sidescroll来控制横滚的幅度
  • 可以通过设置sidescrolloff来控制距离边缘还有多少时才滚动,默认是0

如果设置了自动换行,那么hl会上下显示的一行移动,而不是实际的一行,此时可以用gjgk来这么操作

whichwrap 属性:

默认情况下,在 VIM 中当光标移到一行最左边的时候,我们继续按左键,光标不能回到上一行的最右边。同样地,光标到了一行最右边的时候,我们不能通过继续按右跳到下一行的最左边。但是,通过设置 whichwrap 我们可以对一部分按键开启这项功能。如果想对某一个或几个按键开启到头后自动折向下一行的功能,可以把需要开启的键的代号写到 whichwrap 的参数列表中,各个键之间使用逗号分隔。

瞬移秘籍

垂直翻页

  • :set scrolloff=2 设置上下翻动的留边(就是还剩2行就会发生滚动)
  • H 到当前屏幕显示的最上行High
    M 到当前屏幕显示的正中 Middle
    L 到当前屏幕显示的最下 Low
  • 右下角显示的百分比是和左上角的行号关联的
  • 翻页:
    CTRL + f 向前翻页 forward
    CTRL + b 向后翻页 backward
    可以在前面加数字表示翻的页数
  • CTRL + e 屏幕向上移动一行,光标位置不变
    CTRL + y 屏幕向下移动一行,光标位置不变
  • CTRL + d 向下走,翻半屏 down
    CTRL + u 向上走,翻半屏 up
    光标在屏幕的相对位置不变,屏幕整体向上或向下移动
    设置:set scroll=15来明确翻的行数
  • zt 光标保持在当前位置,移动屏幕,让光标出现在顶部 top
    zz 光标保持在当前位置,移动屏幕,让光标出现在中间
    zb 光标保持在当前位置,移动屏幕,让光标出现在底部 bottom
    scrolloff的影响

屏位行号

如何让屏幕不动,只移动光标?

  • 2H 移动到距离屏幕最顶端第2行的位置
    3L 会移动到距离屏幕最低3行的位置

文字区块

  • { 让光标向后移动一段
    } 让光标向前移动一段
    段落是用回车符分割的一段一段的文字
  • ( 让光标向后移动一句
    ) 让光标向前移动一句
  • [[ 本块的第一行
    ]] 本块的最后一行

函数跳转

  • % 跳转到括号对的前半部分,如果已经在,则跳转到后半部分
  • [{ 跳转到上一个(
    ]} 跳转到下一个)
  • [*[/ 上一个注释的头
    ]*]/ 下一个注释的头
  • ]m下一个函数开头
    ]M下一个函数结尾
    [m上一个函数开头
    [M上一个函数结尾
  • gd 找到本地定义 goto global decclaration
  • 插件matchit可以让%支持标签的跳转

查找文本

全文查找:

/ 向后查找,? 向前查找

配置:

  • :set hls[earch]set nohls[search]设置高亮开关
    noh[lsearch] 命令
  • :hi Search ctermbg=erd ctermfg=black 设置高亮颜色
  • :set w[rap]s[can] ,:set nows当遍历到结尾处后是否可以从头开始

遍历查找:

  • n 下一个匹配项
    N 上一个匹配项

行内搜索:

  • f find 向前查找,F 反向
  • t till 向前查找,落在目标前,T反向
  • ;进行同向重复,,反向重复

配置:

  • 如果;被映射过,要修改映射:map ; ;

查找进阶:

  • :set incsearch :set noincsearch 实时匹配搜索输入
  • :set i[gnore]c[ase] :set noic 忽略大小写
    :set smartcase 智慧大小写 优先完全匹配,否则忽略大小写
    /xxx\C \C表示区分大小写,\c 不区分大小写
  • * 当在一个单词上面时,向前查找这个单词
    # 当在一个单词上面时,向后查找这个单词
    g* 当在一个单词上面时,查有这个单词的单词
  • /as\> 查找以as结尾的单词
    /\<as 查找以as开头的单词
  • 可以在查找的时候使用正则表达式,如:/^T.m$
  • /之后,配合上下键看以看到查找历史

文本编辑

插入字符

  • i 插入
  • 插入模式下:
    CTRL + v 输入ascii
    CTRL + k 进入二合字符输入状态,详情:h dig(raphs)
    Ctrl + r 寄存器计算,如输入=3+3,得到6
  • J 将两行连在一起

删除字符

  • dd 删除一行
  • x 删除一个字符,Ctrl + x 删除前一个字符
    :reg 查看寄存器
    CTRL + W
  • d$ = D 从光标删到行尾

常用操作

退出InsertMode

CTRL + C

缩进

  • <<向前

  • >>向后

  • ==当前行自动缩进

  • gg=G全部缩进

  • set list使得tab被显示为^I,行尾会显示$

  • 设置特殊字符::set listchars=eol:$,tab:>-,space:_

  • :set listchars=eol:$,tab:>-,space:_ 设置高亮

  • shiftwidth值是整个缩进的基础

:set shiftwidth=4

  • shiftwidth 是一个基础的值,对应
  • 按下 >> 缩进的宽度
  • 按下 tab 缩进的宽度
  • 退格或者删除 \t 时缩进的宽度
  • 一般tabstop,softtabstop都与他相同
  • 一般都是 4
  • 如果 shiftwidth 是 0 的话
  • 就按照 tabstop

tabstop:读取文件时,读到\t时解释为几个字符

  • :set expandtab 把输入的tab变成空格

  • retab! 把已经存在的tab强制转换成空格

  • :set autoindent 添加与上一行一致的缩进, :set ai

  • :set smartindent在上述的基础上根据括号调整本行缩进,需要保证:se nopaste

  • :set cindent 根据类似c、java的代码动态调节缩进

整体设定

  • :set noexpandtab
  • :set shiftwidth=4
  • :set tabstop =4
  • :set softtabstop=4
  • :set autoindent
  • 简写为 :set noet sw=4 ts=4 sts=4 ai
  • 这都个人喜好
  • 没有绝对规定
1

评论区