原生Vim操作大全

Vim模式

  1. ​普通模式(Normal mode)​ - 默认模式,用于导航和操作文本
  2. ​插入模式(Insert mode)​ - 用于输入文本
  3. ​可视模式(Visual mode)​ - 用于选择文本
  4. ​命令行模式(Command-line mode)​ - 用于执行命令

模式切换

  1. 普通模式 -> 插入模式

    • i - 在光标前进入插入模式
    • I - 在行首进入插入模式
    • a - 在光标后进入插入模式
    • A - 在行尾进入插入模式
    • o - 在当前行下方新建一行并进入插入模式
    • O - 在当前行上方新建一行并进入插入模式
    • c - 删除选中字符并插入
    • cc - 删除当前行并插入
    • C - 删除到行尾并插入
    • s - 删除当前/选中字符并插入,删除当前字符并进入插入模式时等价于cl
    • S - 等价于cc
  2. 普通模式 -> 可视模式

    • v - 进入字符可视模式
    • V - 进入行可视模式
    • Ctrl+v - 进入块可视模式
  3. 普通模式 -> 命令行模式

    • : - 进入命令行模式
    • 执行外部命令(原生)
      • :!<cmd> - 执行shell命令
      • :r !<cmd> - 插入命令输出
      • :r <file> - 插入文件内容
    • 选项设置(原生)
      • :set all - 查看所有选项
      • :set <option> - 开启选项
      • :set no<option> - 关闭选项
      • :set <option>? - 查看选项值
      • :set <option>=<value> - 设置选项值
  4. 其余模式 -> 普通模式

    • ESC- 返回普通模式

移动操作

基本移动

  • j - 下移
  • J - 将两行文本连接成一行
  • k - 上移
  • l - 右移
  • h - 左移
  • w - 移动到下一个词开头
  • W - 移动到下一词开头(以空格划分词)
  • e - 移动到下一个词末尾
  • E - 移动到下一个词末尾(以空格划分词)
  • b - 移动到上一个词开头
  • B - 移动到上一个词开头(以空格划分词)

行内移动

  • 0 - 移动到行首
  • $ - 移动到行尾
  • ^ - 移动到行首第一个非空白字符
  • % - 移动到配对的字符处
  • f<char> - 移动到当前行下一个<char>字符
  • F<char> - 移动到当前行上一个<char>字符
  • t<char> - 移动到当前行下一个<char>字符前
  • T<char> - 移动到当前行上一个<char>字符后
  • ; - 重复上次f/F/t/T命令
  • , - 反向重复上次f/F/t/T命令
  • 折行内移动
    • gj - 移动折行视觉上的下一行
    • gk - 移动到折行视觉上的上一行
    • g0 - 移动到折行视觉上的开头
    • g$ - 移动到折行视觉上的末尾
    • g^ - 移动到折行视觉上的第一个非空字符

跨行移动

  • gg - 移动到文件开头
  • g, - 移动到最近一次编辑位置(原生)
  • G - 移动到文件末尾
  • <num>G - 移动到指定行号,是:<num>的快捷键
  • H - 移动到屏幕顶部
  • M - 移动到屏幕中间
  • L - 移动到屏幕底部
  • } - 移动到下一个段落
  • { - 移动到上一个段落
  • ]] - 移动到下一个函数/代码块
  • [[ - 移动到上一个函数/代码块

视图调整

  • Ctrl+y - 向上一行
  • Ctrl+e - 向下一行
  • Ctrl+f - 向下翻页
  • Ctrl+b - 向上翻页
  • Ctrl+u - 向上半页
  • Ctrl+d - 向下半页
  • zz - 聚焦光标

标记定位

  • m<letter> - 设置标记
  • '<letter> - 跳转到标记行首
  • :marks - 查看当前文件所有标记
  • :delmarks <letter> - 删除对应标记

编辑操作

文本缩进

  • >> - 普通模式下向右缩进当前行
  • > - 可视模式下向右缩进当前行
  • << - 普通模式下向左缩进当前行
  • < - 可视模式下向左缩进当前行

文本折叠(原生)

  • zf - 对选中行创建折叠
  • zd - 删除选中行的折叠
  • zo - 打开折叠
  • zc - 关闭折叠
  • zj - 移动到下一个折叠
  • zk - 移动到上一个折叠
  • :mkview - 保存折叠
  • :loadview - 加载折叠

文本剪切

  • x - 剪切当前字符,等价于dl
  • X - 剪切前一个字符
  • d - 剪切选定内容
  • dd - 普通模式下剪切当前行
  • D - 剪切到当前行结尾

复制粘贴

  • y - 复制选中内容
  • yy - 普通模式下复制整行
  • Y - 等价于yy(历史原因不是复制到行尾)
  • p - 在光标后粘贴
  • P - 在光标前粘贴
  • "<reg>y - 复制到指定寄存器
  • "<reg>p - 从指定寄存器粘贴

重复、撤销&重做

  • . - 重复上次编辑操作
  • u - 撤销
  • Ctrl+r - 重做

查找替换

  • /<pattern> - 向下查找<pattern>
  • ?<pattern> - 向上查找<pattern>
  • n - 重复上次查找
  • N - 反向重复上次查找
  • u/U - 切换选中的文本为小写/大写
  • ~ - 切换当前字符大小写
  • 替换命令,其中分隔符可以是/、.或|
    • :s|old|new - 替换当前行第一个匹配
    • :s|old|new|g - 替换当前行所有匹配
    • :'<,'>s|old|new|g - 替换当前选中行所有匹配
    • :'<,'>s|old|new|gc - 交互式替换当前选中行匹配
    • :%s|old|new|g - 替换整个文件所有匹配
    • :%s|old|new|gc - 交互式替换整个文件匹配

批量操作

组合命令

  1. 重复操作:<num> + <operation>
    • 3j - 向下移动3行
    • 5dd - 删除5行
    • 10x - 删除10个字符
    • 2p - 粘贴2次
  2. 文本对象操作:<operator> + <number> +<i/a> + <文本对象>,其中常见的文本对象有单词w,句子s,段落p,引号"/',括号()/[]/{}/<>,标签t
    • daw - 删除一个单词(包括周围空格)
    • d2w - 删除两个单词
    • di( - 删除括号内内容
    • ci" - 修改引号内内容
    • yit - 复制HTML标签内容

宏&寄存器

  • q<reg> - 开始录制到寄存器
  • q - 停止录制
  • @<reg> - 执行寄存器中的宏
  • @@ - 重复上次执行的宏
  • "<reg> - 指定寄存器
  • :reg - 查看寄存器内容
  • :reg <reg> - 查看特定寄存器内容

文件操作

信息统计

  • Ctrl+g - 显示光标位置状态(原生)

保存退出

  • :w - 保存文件
  • :w <file> - 另存为
  • :x - 保存并退出,是:wq的快捷键
  • :q - 退出
  • :q! - 强制退出不保存

文件跳转

  • :e - 创建缓存文件(原生)
    • tab - 提示与补全当前目录下的文件(夹),左右选择当前目录下的文件,上下选择上/下一级目录
    • :ls - 查看缓存文件
    • :b+<编号> - 切换缓存文件
    • :bp/bn - 上下切换缓存文件
    • :bd - 删除当前缓存文件
    • :<编号>+bd - 删除对应编号缓存文件
  • Ctrl+o - 跳转到上一个文件中
  • Ctrl+i - 跳转到下一个文件中
  • gd - 跳转到局部定义
  • gD - 跳转到全局定义
  • Ctrl+z - 挂起vim,返回终端中(通过在终端中用fg命令返回)
    • 当有多个任务被挂起,通过jobs在终端查看任务编号n
    • 通过fg %n返回

窗口分割(原生)

  • :vs - 垂直分割窗口
  • :sp - 水平分割窗口
  • Ctrl+w h/j/k/l - 在窗口间移动
  • Ctrl+w w - 切换到下一个窗口
  • Ctrl+w c - 关闭当前窗口
  • Ctrl+w o - 关闭其他窗口
  • Ctrl+w r - 交换窗口位置
  • 窗口宽度/高度调整
    • Ctrl+w > - 增加窗口宽度
    • Ctrl+w < - 减少窗口宽度
    • Ctrl+w + - 增加窗口高度
    • Ctrl+w - - 减少窗口高度
  • 窗口宽度/高度最大化/回归默认
    • Ctrl+w | - 最大化当前窗口宽度
    • Ctrl+w _ - 最大化当前窗口高度
    • Ctrl+w = - 均衡窗口大小

标签页管理(原生)

  • :tabe <file> - 新建标签页
  • :tabc - 关闭当前标签页
  • :tabo - 关闭其他标签页
  • gt - 下一个标签页
  • gT - 上一个标签页
  • ngt - 切换到第n个标签页
  • :a - 全选所有标签页

Vim配置

打开文件时,所有配置都会在默认配置的基础上执行。而在配置文件中用:so的时候,则是在当前配置的基础上执行。

基本配置

vimscript 复制代码
" 设置行号 
set number

" 设置<leader>
nnoremap <Space> <Nop>
let mapleader = " "

" 在视觉行移动
nnoremap j gj
nnoremap k gk
nnoremap 0 g0
nnoremap $ g$
nnoremap ^ g^

" 让复制粘贴使用系统剪切板
vnoremap y "+y
vnoremap x "+x
nnoremap p "+p
nnoremap <leader>p ""p

" 全选 
nnoremap <C-a> ggVG

" 保存
nnoremap <C-s> :w<CR>

" 窗口间移动
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l 

" 取消高亮
nnoremap <silent><Esc> :nohl<CR>

" 消除^M
nnoremap <C-m> :%s.\r..g<CR>
相关推荐
向成科技35 分钟前
XC3576H工控主板|深度适配Ubuntu 26.04 LTS,释放边缘AI与工业开发新潜能
linux·人工智能·ubuntu·机器人·硬件·主板·边缘ai
Fcy6481 小时前
Linux下 进程间关系与守护进程
linux·运维·服务器·守护进程
码农小韩2 小时前
Linux驱动理论(二)——Linux字符设备驱动
linux·嵌入式软件开发·linux操作系统·linux应用开发·linux驱动理论
well06122 小时前
Linux粘滞位与Makefile机制深度解析
linux·运维·服务器
再写一行代码就下班2 小时前
linux sh脚本在windows修改导致无法使用解决方式
java·linux·centos
额额额对了2 小时前
SPI通信
linux·c语言·汇编·单片机·嵌入式硬件·arm
子木HAPPY阳VIP3 小时前
Ubuntu 关闭防火墙操作步骤
linux·运维·ubuntu
王振超wzc3 小时前
嵌入式开发环境搭建--WM软件安装,Ubuntu操作系统安装
linux·运维·ubuntu
GeW4 小时前
制造强国底座:Linux与数据库驱动的新型工业基础设施
linux
xiaoye-duck5 小时前
《Linux 网络编程》深入理解 IO 多路复用:select 函数详解与 Echo 服务实战
linux·网络