• Vim 常用命令记录


    移动光标

    单位级

    • h 向左一字符
    • j 下一行
    • k 上一行
    • l 向右一字符

    单词级

    • w or W 向右移动到下一单词开头
    • e or E 向右移动到单词结尾
    • b or B 向左移动到单词开头

    块级

    • gg 到文档第一行
    • G 到文档最后一行
    • 0 到行首(第 1 列)
    • ^ 到第一个非空白字符
    • $ 到行尾
    • H 移动到屏幕顶端
    • M 移动到屏幕中间
    • L 移动到屏幕底部
    • Ctrl-d 向下移动半页
    • Ctrl-u 向上移动半页
    • Ctrl-f 向下移动一页
    • Ctrl-b 向上移动一页
    • : or gg 跳转到第 N 行
    • :+ or j 向下跳 N 行
    • :- or k 向上跳 N 行

    Vim 中打开文件

    • :e 打开名为 filename 的文件,若文件不存在则创建之
    • :Ex 在 Vim 中打开目录树,光标选中后回车打开对应文件(提示:- 进入上级目录)

    查找

    文档内查找

    • * 向后查找光标当前所在单词
    • # 向前查找光标当前所在单词
    • / 向后查找指定字符串
    • ? 向前查找指定字符串
    • n 继续查找下一个
    • N 继续查找上一个

    行内查找

    • f 当前行内向行尾方向查找并定位到字符 X
    • t 当前行内向行尾方向查找并定位到字符 X 之前
    • F 当前行内向行首方向查找并定位到字符 X
    • T 当前行内向行首方向查找并定位到字符 X 之后
    • ; 继续向当前方向查找下一个字符
    • , 向当前相反方向查找下一个字符

    匹配查找

    Vim 中可以使用 %()[]{} 进行匹配查找

    当光标位于其中一个符号上时

    按下 %,光标会跳到与之匹配的另外一个符号上


    修改文档

    插入

    • i 当前字符前插入
    • a 当前字符后插入
    • I 行首插入
    • A 行尾插入
    • o 在下一行插入
    • O 在上一行插入

    删除(并保存到 Vim 剪贴板)

    • s 删除当前字符,并进入 INSERT 模式
    • S 删除当前行并保存到 Vim 剪贴板,同时进入 INSERT 模式(等同于 cc
    • x 删除当前字符,相当于 insert 模式下的 Delete
    • X 删除前一个字符,相当于 insert 模式下的 Backspace
    • dd 删除当前行,并将删除的内容保存到 Vim 剪贴板
    • dw/de 删除一个连续的字符串,区别是删不删空格
    • d 删除指定内容并保存到 Vim 剪贴板
    • cc 删除当前行并保存到 Vim 剪贴板,同时进入 INSERT 模式
    • c 删除指定内容并保存到 Vim 剪贴板,同时进入 INSERT 模式
    • xp 非行尾交换两个字符,如从bs变成sb
    • df" 删除到出现的第一个双引号

    复制

    • yy 复制当前行到 Vim 剪贴板
    • y 复制指定内容到 Vim 剪贴板
    • yw 复制光标开始的一个单词
    • y$ 复制光标到行尾
    • yfA 复制光标到第一个大写A中间的内容
    • y2fA 复制光标到第二个大写A中间的内容

    粘贴

    • p 在当前位置后粘贴
    • P 在当前位置前粘贴

    合并

    • J 将当前行与下一行合并

    替换

    • r 将当前字符替换为 X
    • gu 将指定的文本转换为小写
    • gU 将指定的文本转换为大写
    • :%s/// 查找 search 内容并替换为 replace 内容
    • cw 替换一个单词

    撤销、重做

    • u 撤销
    • Ctrl-r 重做

    保存文件

    • :w 保存当前文件
    • :wa 保存全部文件
    • :wq or ZZ 保存并退出
    • :q! or ZQ 强制退出,不保存
    • :saveas 文件另存为
    • :w 文件另存一份名为 的副本并继续编辑原文件

    调整文本

    • %s/$/sth/ 在行尾追加sth
    • %s/^M//g 替换掉dos换行符,^M使用ctrl+v + Enter即可输入
    • g/^\s$/d* 删除空行以及只有空格的行
    • %s/#.*//g 删除#之后的字符

    简单设置 Vim

    • :set number 显示行号
    • :set relativenumber 显示相对行号(这个非常重要,慢慢体会)
    • :set hlsearch 搜索结果高亮
    • :set autoindent 自动缩进
    • :set smartindent 智能缩进
    • :set tabstop=4 设置 tab 制表符所占宽度为 4
    • :set softtabstop=4 设置按 tab 时缩进的宽度为 4
    • :set shiftwidth=4 设置自动缩进宽度为 4
    • :set expandtab 缩进时将 tab 制表符转换为空格
    • :filetype on 开启文件类型检测
    • :syntax on 开启语法高亮

    缩进

    • >> 向右缩进当前行
    • << 向左缩进当前行

    自动排版

    • == 自动排版当前行
    • gg=G 当前文档全文自动排版
    • == 对从当前行开始的 N 行进行自动排版
    • =j 对当前行以及向下 N 行进行自动排版
    • =k 对当前行以及向上 N 行进行自动排版

    窗口分屏

    分屏方式

    • :split 缩写 :sp or Ctrl-w s 上下分屏
    • :vsplit 缩写 :vs or Ctrl-w v 左右分屏
    • :diffsplit 缩写 :diffs diff 模式打开一个分屏,后面可以加上 {filename}

    窗口跳转

    • Ctrl-w w 激活下一个窗口
    • Ctrl-w j 激活下方窗口
    • Ctrl-w k 激活上方窗口
    • Ctrl-w h 激活左侧窗口
    • Ctrl-w l 激活右侧窗口

    移动分屏

    • Ctrl-w L 移动到最右侧
    • Ctrl-w H 移动到最左侧
    • Ctrl-w K 移动到顶部
    • Ctrl-w J 移动到底部

    屏幕缩放

    • Ctrl-w = 平均窗口尺寸
    • Ctrl-w + 增加高度
    • Ctrl-w - 缩减高度
    • Ctrl-w _ 最大高度
    • Ctrl-w > 增加宽度
    • Ctrl-w < 缩减宽度
    • Ctrl-w | 最大宽度

    标签页

    创建标签页

    • :tabnew or :tabedit 缩写 :tabe 打开新标签页
    • Ctrl-w gf 在新标签页中打开当前光标所在位置的文件名

    注意::tabnew:tabedit 后面都可以跟一个 <空格><文件名> 用以在新标签页中
    打开指定文件,还可以在 : 后面加一个数字,指出新标签页在列表中的位置(从 0 开始)。

    切换标签页

    • gt or :tabnext 缩写 :tabn 下一个标签页(最后一个会循环到第一个)
    • gT or :tabprevious 缩写 :tabp 上一个标签页(第一个会循环到最后一个)
    • :tabrewind 缩写 :tabr or :tabfirst 缩写 :tabfir 到第一个
    • :tablast 缩写 :tabl 到最后一个标签页

    关闭标签页

    • :tabclose 缩写 :tabc 关闭当前标签页
    • :-tabc 关闭上一个标签页
    • :+tabc 关闭下一个标签页
    • :tabonly 缩写 :tabo 关闭其他标签页

    函数设定

    • 定义保存退出函数
    " 定义保存退出函数
    func! SaveExit()
    exec "wq"
    endfunc
    
    " 映射Ctrl+z键调用保存退出函数
    map  :call SaveExit()
    imap   :call SaveExit()
    vmap   :call SaveExit()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 定义保存编译并执行代码函数
    " 定义保存编译并执行代码函数
    func! ComplieCode()
    exec "w"
    if &filetype == "c"
    exec "!gcc -std=gnu99 % -lm && ./a.out"
    endif
    endfunc
    
    " 映射Ctrl+x键调用编译并执行函数
    map  :call ComplieCode()
    imap   :call ComplieCode()
    vmap   :call ComplieCode()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 定义添加头文件和Main函数
    " 定义添加头文件和Main函数
    func! InsertMain()
    if &filetype == "c"
    call setline(1,"#include ")
    call setline(2,"")
    call setline(3,"int main(int argc,const char* argv[])")
    call setline(4,"{")
    call setline(5,"\t")
    call setline(6,"}")
    exec "5"
    endif
    endfunc
    map  :call InsertMain()i
    
    
    " 自动添加头文件卫士
    func! InsertIfndef()
    call setline(1,"#ifndef ".toupper(expand("%:t:r"))."_H")
    call setline(2,"#define ".toupper(expand("%:t:r"))."_H")
    call setline(3,"")
    call setline(4,"#endif//".toupper(expand("%:t:r"))."_H")
    endfunc
    
    autocmd BufNewFile *.h :call InsertIfndef()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    第20篇 2D绘图(十)图形视图框架(下)
    【笔记】编写cmakelist的常用命令含义及使用
    mybatis插入数据不返回主键id可能原因及解决
    Ubuntu22.04 在线安装 LAMP
    正厚干货 | Git客户端用户使用指南
    【网络工程师8个疑难杂症解决方案】
    tf.cond()
    驱动开发---基于gpio子系统编写LED灯的驱动
    Day1讲题题单
    Knife4j 基础(OpenAPI3+SpringBoot2.7)
  • 原文地址:https://blog.csdn.net/qq_38973721/article/details/128109559