三个模式
在 Vim 中,核心的三大模式是:普通模式(Normal Mode)、插入模式(Insert Mode) 和 命令行模式(Command-Line Mode)。它们是 Vim 高效操作的基础。以下是详细解析:
1. 普通模式(Normal Mode)
- 默认模式:启动 Vim 或按
<Esc>后进入的模式。 - 核心功能:
- 移动光标:
h(左)、j(下)、k(上)、l(右)。 - 文本操作:
- 删除:
d(如dw删除一个单词)。 - 复制:
y(如yy复制一行)。 - 粘贴:
p。
- 删除:
- 撤销/重做:
u(撤销)、Ctrl + r(重做)。
- 移动光标:
- 设计哲学:用单键或组合键高效操作文本,无需鼠标。
示例:
在普通模式下按 dd → 删除当前行。
2. 插入模式(Insert Mode)
- 进入方式:
- 普通模式下按
i(光标前插入)、a(光标后插入)、o(下方新行插入)。
- 普通模式下按
- 核心功能:
- 直接输入文本,像常规编辑器一样编辑内容。
- 快捷键有限:仅支持少量组合键(如
Ctrl + h删除前字符)。
- 退出方式:按
<Esc>返回普通模式。
示例:
按 i 进入插入模式,输入文字后按 <Esc> 退出。
3. 命令行模式(Command-Line Mode)
- 进入方式:普通模式下按
:。 - 核心功能:
- 执行命令:如
:w(保存)、:q(退出)、:s/old/new(替换文本)。 - 管理文件/窗口:
:e filename(打开文件)、:vsplit(垂直分屏)。 - 配置操作:
:set number(显示行号)。
- 执行命令:如
- 扩展模式:
- 可视模式(Visual Mode):按
v进入,用于选中文本块。 - 替换模式(Replace Mode):按
R进入,直接覆盖文本。
- 可视模式(Visual Mode):按
示例:
输入 :wq → 保存并退出。
总结表
| 模式 | 进入方式 | 核心用途 |
|---|---|---|
| 普通模式 | <Esc> 或启动 Vim |
移动光标、文本操作、命令触发 |
| 插入模式 | i, a, o |
自由输入文本 |
| 命令行模式 | : |
执行保存、退出、替换等命令 |
| 可视模式 | v, V, Ctrl + v |
文本块选择操作 |
| 替换模式 | R |
覆盖原有文本 |
杂项
set nu "行号显示
syntax on "开启语法显示
set nobackup "不产生备份文件
set noswapfile "不产生swp文件
set noundofile "不产生undo文件
set guifont=Consolas:h22 "设置字体
set showmatch "开启括号匹配
colorscheme evening "自定义配色方案"evening"
set nowrap "禁止自动换行
启动窗口配置
启动时自动切换当前目录,垂直分割窗口,左侧是文件浏览器,右侧是新缓冲区
autocmd VimEnter * cd D:\ProjectSpace\Vim | lefta vsplit | Explore | wincmd l | enew
+---------------------+---------------------+
| | |
| 文件浏览器 | 空白编辑缓冲区 |
| (Netrw) | (未命名) |
| | |
+---------------------+---------------------+
调整窗口占比70%。调整的是当前创建的窗口。在右侧窗口创建命令之后执行就是左右3:7的比例。
autocmd VimEnter * execute "vertical resize " . (&columns * 70 / 100)
也可以写成左侧窗口30%占比方式。
autocmd VimEnter * cd D:\ProjectSpace\Vim | lefta vsplit | Explore | execute "vertical resize " . (&columns * 30 / 100) | wincmd l | enew
文件浏览器设置
let g:netrw_liststyle = 3 " 启用树形显示(1=列表,2=详细列表,3=树形)
let g:netrw_banner = 0 " 隐藏顶部横幅
let g:netrw_browse_split = 4 "文件浏览器默认右侧窗口打开文件
文件浏览器文件命令表格
| 操作 | 效果 |
|---|---|
<Enter> |
默认在当前窗口打开(覆盖文件浏览器) |
o |
水平拆分窗口打开(下方) |
v |
垂直拆分窗口打开(右侧) |
p |
预览模式(不切换焦点) |
t |
新标签页打开 |
let g:netrw_browse_split = 4 |
让 <Enter> 在右侧窗口打开(推荐) |
文件浏览器中:
Enter 打开文件或展开目录。
- 返回上级目录。
R 刷新列表。
切换窗口
| 快捷键 | 作用 |
|---|---|
Ctrl + w h |
切换到 左侧 窗口 |
Ctrl + w j |
切换到 下方 窗口 |
Ctrl + w k |
切换到 上方 窗口 |
Ctrl + w l |
切换到 右侧 窗口 |
记忆技巧:
hjkl对应 Vim 的 方向键(左、下、上、右)。- 必须先按
Ctrl + w,再按方向键。
快速循环切换窗口 | 快捷键 | 作用 | |--------|------| | Ctrl + w w | 按 顺序 循环切换窗口 | | Ctrl + w W | 按 逆序 循环切换窗口 |
使用 :wincmd 命令
在命令模式下输入:
:wincmd h " 切换到左侧窗口
:wincmd j " 切换到下方窗口
:wincmd k " 切换到上方窗口
:wincmd l " 切换到右侧窗口
适用于脚本或自定义映射。
快捷键映射
注意快捷键映射有可能会替换VIM原来的快捷键功能
ctrl+s保存
"插入模式下ctrl+s映射为命令行模式的:w保存命令,<CR> 代表回车 a在光标后插入
inoremap <C-s> <Esc>:w<CR>a
"普通模式下ctrl+s映射为命令行模式的:w保存命令,<CR> 代表回车
noremap <C-s> :w<CR>
ctrl+u撤销
"插入模式ctrl+u映射为普通模式的u+a命令
inoremap <C-u> <Esc>ua
"普通模式ctrl+u映射为u命令
noremap <C-u> u
ctrl+r重做
"插入模式ctrl+r映射为普通模式ctrl+r
inoremap <C-r> <Esc><C-r>a
"普通模式ctrl+r本来就是重做
编译
进入命令模式,输入下面的命令编译运行当前c/cpp文件并且运行
!g++ % -o %<.exe && %<.exe
占位符含义
| 占位符 | 含义 | 示例(文件为 main.cpp) |
|---|---|---|
% |
当前完整文件名 | main.cpp |
%< |
去掉扩展名的文件名 | main |
%:p |
文件的完整绝对路径 | /home/user/project/main.cpp |
%:h |
文件所在目录 | /home/user/project |
自动保存后编译
:w | !g++ % -o %<.exe && %<.exe
:w:先保存文件。|:分隔多个命令。&& ./%<:编译成功后运行程序。
项目文件编译makefile
手动编写makefile文件,之后命令模式
:!mingw32-make