Vim的相关用法

vim的用法

一、Vim 基础认知与核心模式

1. Vim 简介与学习资源

  • 定位:Linux 系统上的高效文本编辑器,支持多模式操作,且多数主流 IDE 可安装 Vim 插件实现兼容。

  • 权威学习资料:Vim 内置帮助文档,启动 Vim 后输入:help即可查看(英文);也可通过科学上网获取更多演变历史与学习资源。

  • 核心配置文件:Linux 系统中为~/.vimrc(家目录下的隐藏文件,不存在可手动创建),可配置显示行号、快捷键映射、插件等,例如将ESC键映射为连续两次j键:inoremap jj <Esc>

2. Vim 四大核心模式

模式名称 进入方式 核心功能 退出方式
正常模式 Vim 启动默认进入;其他模式按ESC(或jj 浏览文件、光标移动、复制 / 粘贴 / 删除等操作 i/I/a/A/o/O等进入插入模式;按:/进入命令模式
插入模式 正常模式下按i/I/a/A/o/O/s/S 输入、编辑文本 ESC返回正常模式
命令模式 正常模式下按:(冒号)或/(斜杠) 执行文件操作、环境设置、查找替换等指令 执行指令后自动返回正常模式;未执行指令按ESC返回
可视模式 正常模式下按v(字符可视)、V(行可视)、Ctrl+v(块状可视) 选中文本(类似鼠标选择),便于批量操作 ESC(或jj)返回正常模式;再次按对应模式键退出

二、Vim 文件操作:打开、切换与分屏

1. 打开文件

  • 打开单个文件:终端输入vim 文件名,示例:vim file1(打开名为file1的文件)。

  • 打开多个文件:终端输入vim 文件名1 文件名2 ...,示例:vim file1 file2(打开file1file2,默认显示第一个文件)。

2. 多文件切换与管理

  • 查看已打开文件列表:正常模式下按:进入命令模式,输入:ls,会显示所有打开文件的序号与文件名。

  • 切换文件:命令模式下输入:b序号bbuffer),示例::b2(切换到序号为 2 的文件);也可输入:bn(切换到下一个文件)、:bp(切换到上一个文件)。

3. 分屏操作

(1)终端启动时直接分屏

  • 左右分屏:终端输入vim -On 文件名1 文件名2 ...O为大写,n为文件数量),示例:vim -O2 file1 file2(左右分屏显示file1file2)。

  • 上下分屏:终端输入vim -on 文件名1 文件名2 ...o为小写,n为文件数量),示例:vim -o2 file1 file2(上下分屏显示file1file2)。

(2)Vim 内部分屏

分屏类型 操作命令 示例
上下分割当前文件 正常模式下按Ctrl + w s Ctrl + w后松开,再按s,当前文件上下分屏
上下分割并打开新文件 命令模式输入:sp 文件名 :sp file3(当前文件与file3上下分屏)
左右分割当前文件 正常模式下按Ctrl + w v Ctrl + w后松开,再按v,当前文件左右分屏
左右分割并打开新文件 命令模式输入:vsp 文件名 :vsp file3(当前文件与file3左右分屏)

(3)分屏切换与关闭

  • 光标切换:正常模式下按Ctrl + w后,按h(左屏)、l(右屏)、j(下屏)、k(上屏),示例:Ctrl + w h(光标移到左侧分屏)。

  • 分屏移动:正常模式下按Ctrl + w后,按H(当前分屏移到最左)、L(当前分屏移到最右)、J(当前分屏移到最下)、K(当前分屏移到最上),示例:Ctrl + w H(当前分屏移到左侧)。

  • 关闭分屏:正常模式下按Ctrl + w c(关闭当前分屏);按Ctrl + w q(关闭当前分屏,若为最后一个分屏则退出 Vim)。

三、Vim 退出与文件保存命令

命令 功能描述
:w 保存当前文件修改,不退出
:w! 强制保存当前文件修改,不退出(适用于只读文件等场景)
:w 文件名 将当前文件修改保存为新文件(另存为)
:q 退出 Vim,仅适用于未修改的文件
:q! 强制退出 Vim,不保存任何修改
:qa! 强制退出所有打开的文件,不保存任何修改
:wq 保存当前文件修改并退出 Vim
:x 保存当前文件修改并退出 Vim(与:wq功能类似,仅文件有修改时才保存)
:e 文件名 在当前 Vim 窗口打开新文件
:e! 放弃当前文件所有修改,恢复到上次保存状态
:saveas 文件名 将当前文件另存为指定文件名,保留原文件
ZZ 正常模式下连续按两次大写Z,保存修改并退出(快捷操作)

四、Vim 插入模式:文本编辑与快捷进入

1. 从正常模式进入插入模式的命令

命令 功能描述
i 在光标所在字符插入文本
I 在光标所在行的行首插入文本
a 在光标所在字符插入文本
A 在光标所在行的行尾插入文本
o 在光标所在行下方新建一行,在行首插入文本
O 在光标所在行上方新建一行,在行首插入文本
s 删除光标所在字符,然后插入文本
S 删除光标所在整行,然后在该行首插入文本
cw 删除光标处到当前单词结尾的字符,然后插入文本

五、Vim 命令模式:环境设置、查找替换与 Linux 命令调用

1. 文本显示与行号设置

命令 功能描述
:set nu 显示文本行号
:set nonu 取消显示行号
:n 快速定位到第n行(n为数字)

2. 文本查找与大小写设置

若需 精准匹配独立单词(仅匹配 test 本身,不包含前后字符),需用单词边界标记 \<\> 输入 /(正向查找)或 ?(反向查找)

命令 功能描述 示例
/目标字符串 从光标位置向后查找目标字符串,匹配结果高亮 /Vim(查找所有 “Vim”,按n跳转到下一个,N跳转到上一个)
:set ic 查找时忽略大小写 输入:set ic后,查找 “vim” 会匹配 “Vim”“VIM” 等
:set noic 查找时区分大小写 输入:set noic后,查找 “vim” 仅匹配 “vim”

3. 文本删除与替换

(1)多行删除

  • 命令格式::n1,n2dn1为起始行号,n2为结束行号,d为删除关键字)

  • 示例::3,5d(删除第 3 行到第 5 行的文本)

(2)文本替换

  • 命令格式::{作用范围}s/{目标字符串}/{替换字符串}/{替换标志}

  • 详细示例:

命令 作用范围 替换标志含义 功能描述
:s/zempty/handsome/g 当前行 g(全局替换) 将当前行所有 “zempty” 替换为 “handsome”
:%s/zempty/handsome/g 全文(%表示) g(全局替换) 将全文所有 “zempty” 替换为 “handsome”
:2,4s/zempty/handsome/g 第 2-4 行 g(全局替换) 将第 2-4 行所有 “zempty” 替换为 “handsome”
:'<,'>s/zempty/handsome/g 可视模式选区 g(全局替换) 可视模式选中文本后,输入:, 自动补全:'<,'>, 再输入命令,替换选区内 “zempty” 为 “handsome”
:s/zempty/handsome 当前行 无(仅替换第一次匹配) 将当前行第一个 “zempty” 替换为 “handsome”
:%s/zempty/handsome/i 全文 i(忽略大小写) 全文替换 “zempty” 为 “handsome”,忽略大小写
:%s/zempty/handsome/gi 全文 g+i(全局 + 忽略大小写) 全文替换所有 “zempty”(忽略大小写)为 “handsome”
:%s/zempty/handsome/gc 全文 g+c(全局 + 确认) 全文替换 “zempty” 为 “handsome”,每处匹配需确认(按y确认,n跳过,a全替换,q退出)

4. Vim 中调用 Linux 命令

(1)执行 Linux 命令并查看结果(不插入文本)

  • 命令格式::!Linux命令!为调用外部命令的标志)

  • 示例:

    • :!date:执行date命令,显示当前系统时间,按Enter返回 Vim 编辑界面。
    • :!ls:执行ls命令,显示当前目录下的文件列表,按Enter返回 Vim。
    • :!pwd:执行pwd命令,显示当前工作目录路径,按Enter返回 Vim。

(2)执行 Linux 命令并将结果插入文本

  • 命令格式::r !Linux命令r为 “读取” 标志,将命令结果读取到文本中)

  • 示例:

    • :r !date:执行date命令,将当前时间插入到光标所在位置(如光标在第 5 行,时间会插入到第 5 行之后)。
    • :r !cat file2:执行cat file2命令,将file2的内容插入到光标所在位置。
    • :r !ls -l:执行ls -l命令,将目录下文件的详细信息(权限、大小等)插入到文本中。

5. 自定义快捷键与文本缩写

(1)自定义快捷键(map命令)

  • 命令格式::map 快捷键 操作序列快捷键需用Ctrl + v + 按键生成,如Ctrl + m需按Ctrl + v + m显示为^M

  • 示例:

    • :map ^M I#<ESC>^M代表Ctrl + m,按该快捷键可在光标所在行首插入#(注释符号),并返回正常模式。
    • :map ^D Ahelloworld<ESC>^D代表Ctrl + d,按该快捷键可在光标所在行尾添加 “helloworld”,并返回正常模式。

(2)文本缩写(ab命令)

  • 命令格式::ab 缩写 完整文本(插入模式下输入缩写,会自动替换为完整文本)

  • 示例:

    • :ab email xxx@gmail.com:设置后,在插入模式输入 “email”,会自动替换为 “xxx@gmail.com”,适用于频繁输入的长文本。

六、Vim 正常模式:光标移动、复制粘贴与文本操作

移动类型 快捷键 功能
基础方向移动 h/j/k/l 左 / 下 / 上 / 右移动光标
行内移动 0 移动到行首
行内移动 ^ 移动到本行第一个非空白字符
行内移动 $ 移动到行尾
行内移动 g_ 移动到本行最后一个非空白字符
单词移动 w 移动到下一个单词开头
单词移动 e 移动到下一个单词结尾
字符定位移动 faa 为目标字符) 移动到本行下一个 “a” 处
字符定位移动 nfan 为次数) 移动到本行第 n 个 “a” 处
字符定位移动 Fa 移动到本行上一个 “a” 处
字符定位移动 nFa 移动到本行第 n 个 “a”(向前找)
字符定位移动 ta 移动到 “a” 的前一个字符
字符定位移动 nta 移动到第 n 个 “a” 的前一个字符
字符定位移动 Ta 移动到 “a” 的前一个字符(向前找)
字符定位移动 nTa 移动到第 n 个 “a” 的前一个字符(向前找)
字符定位跳转 ;/, f/F/t/T 后,跳转到下一个 / 上一个目标字符
跨行移动 nG 定位到第 n 行首
跨行移动 gg 定位到第一行首
跨行移动 G 定位到最后一行首