基本概念
提示:本文是网络资源整理
模式: vim 有多种模式,每种模式都有不同的功能。
- 普通模式 (Normal Mode): 默认模式,用于导航和执行命令。
- 插入模式 (Insert Mode): 用于文本输入。可以通过按 i 进入。
- 可视模式 (Visual Mode): 用于选择文本。可以通过按 v 进入。
- 命令模式 (Command-Line Mode): 用于执行命令。可以通过按 : 进入。
启动和退出
- 启动 vim: 在终端中输入 vim filename。
- 退出 vim:
- 保存并退出: :wq 或 :x
- 仅保存: :w
- 仅退出(不保存更改): :q!
基本操作
普通模式
- 移动光标:
- 左移: h
- 右移: l
- 上移: k
- 下移: j
- 到行首: 0
- 到行尾: $
- 跳到文件开头: gg
- 跳到文件末尾: G
- 文本操作:
- 删除当前字符: x
- 删除当前行: dd
- 删除到行尾: d$
- 复制当前行: yy
- 粘贴: p
- 撤销: u
- 恢复: Ctrl+r
查找和替换:
- 查找文本: /pat 然后按 Enter
- 查找下一个匹配: n
- 查找上一个匹配: N
- 替换当前行第一个匹配的文本: 😒/old/new/
- 替换当前行所有匹配的文本: 😒/old/new/g
- 替换整个文件所有匹配的文本: :%s/old/new/g
插入模式
- 进入插入模式:
- 在光标前插入: i
- 在光标后插入: a
- 在当前行前插入新行: O
- 在当前行后插入新行: o
- 退出插入模式: 按 Esc
可视模式
- 选择文本:
- 字符选择: v
- 行选择: V
- 块选择: Ctrl+v
- 操作选择的文本:
- 复制选择的文本: y
- 删除选择的文本: d
- 粘贴: p
- 命令模式
- 保存文件: :w
- 退出 vim: :q
- 保存并退出: :wq 或 :x
- 撤销更改: :undo
- 恢复更改: :redo
高级功能
窗口和标签
- 分割窗口:
- 横向分割: :split filename
- 纵向分割: :vsplit filename
- 在窗口之间切换: Ctrl+w 然后使用方向键
- 关闭当前窗口: :q
宏和自动化
录制宏:
1、开始录制:
- 按 q 进入录制模式,然后按一个寄存器键(如 q)。这个寄存器键会用来存储录制的宏。
- 示例: 按 q 然后按 a 开始录制到寄存器 a 中。
2、执行操作: - 执行你希望录制的操作。例如,移动光标、删除文本、插入文本等。
3、停止录制:
-按 q 停止录制宏。此时,所有在录制期间执行的操作都会存储在你选择的寄存器中。
执行宏
1、执行宏:
- 要执行录制的宏,按 @ 然后按寄存器键。
- 示例: 按 @a 执行存储在寄存器 a 中的宏。
常见问题及解决方法
1、宏没有效果:
- 确保你在正确的模式下运行宏。通常,宏在普通模式下执行。
- 检查宏是否录制正确。可以通过执行 :registers 查看寄存器的内容,确认录制的宏是否存在。
2、宏录制错误: - 如果录制的宏不如预期工作,可能是因为在录制过程中操作的不一致。尝试重新录制并确保操作的步骤一致。
3、宏在不同上下文中执行: - 有些宏可能依赖于特定的光标位置或上下文。在不同的上下文中运行宏可能会产生不同的效果。
示例
假设你有一个文本文件,每一行都是一个需要删除的项目,并且你想要批量删除这些行的开头部分。
1、录制宏:
- 按 qa 开始录制到寄存器 a。
- 移动光标到行首: 0
- 删除到第一个空格: d
- 移动到下一行: j
- 停止录制: 按 q
2、执行宏:
- 在文件中移动光标到你想开始的行,然后按 @a 执行宏。
- 如果你想在多行上重复宏,可以按 n@a,其中 n 是重复的次数。
插件和扩展
vim 支持插件,通过插件可以增强编辑功能。一些常用插件管理工具包括:
- Vundle: https://github.com/VundleVim/Vundle.vim
- Pathogen: https://github.com/tpope/vim-pathogen
- vim-plug: https://github.com/junegunn/vim-plug
安装插件:
1、将插件 URL 添加到 ~/.vimrc 文件中。
2、运行 :PluginInstall(对于 Vundle)或 :PlugInstall(对于 vim-plug)。
示例配置
在 ~/.vimrc 文件中,你可以添加一些自定义配置来增强 vim 的使用体验:
" 设置行号 set number " 高亮当前行 set cursorline " 自动缩进 set autoindent set smartindent " 启用语法高亮 syntax on " 设置制表符宽度 set tabstop=4 set shiftwidth=4 set expandtab