vim
- 一、vim是什么
- [二、Vim 三大核心模式(必懂!)](#二、Vim 三大核心模式(必懂!))
-
- [1. 命令/普通模式](#1. 命令/普通模式)
-
- [1.1 命令模式](#1.1 命令模式)
- [1.2 命令模式的核心命令](#1.2 命令模式的核心命令)
- [2. 插入模式](#2. 插入模式)
-
- [2.1 插入模式(编辑模式)](#2.1 插入模式(编辑模式))
- [3. 底行模式](#3. 底行模式)
-
- [3.1 底行模式(执行命令)](#3.1 底行模式(执行命令))
- [3.2 底行模式的核心命令](#3.2 底行模式的核心命令)
- 三、挑战话题:批量注释与去注释
- 四、vim的配置问题
- 五、补充sudoers权限问题
一、vim是什么
- vim是vi编辑器的增强版
- Linux/macOS终端默认自带
- 纯键盘操作,没有鼠标也能高效编辑
- 核心特点:多模式编辑
二、Vim 三大核心模式(必懂!)
Vim 所有操作都基于 3 种模式,这是它和普通编辑器最大的区别。
使用vim工具:
bash
vim 文件 #用来创建文件或打开文件
1. 命令/普通模式
1.1 命令模式
- 打开vim默认进入的模式,不能直接打字,只能执行命令
- 从其他模式回到命令模式:无脑
Esc - 它是vim的控制中枢,光标移动、复制、粘贴、删除、撤销、进入其他模式都需要通过命令模式
1.2 命令模式的核心命令
- 复制 / 粘贴 / 删除
n + yy:复制当前行,带上n表示从当前行连续复制n行
n + p:粘贴,带上n表示将之前复制的内容粘贴n次
u:撤销 -- 撤销之前的操作
Ctrl + r:反撤销
n + dd:删除指定行 / 或连续n行 - 光标移动
- 行内跳转:
$:跳到行尾
^:跳到行首(非空白字符) - 全文跳转:
gg:跳到文件第一行
G:跳到文件的最后一行
nG:跳到第n行 - 方向移动:
h左、j下、k上、l右
也可以带n,表示向某个方向移动多少个字符 - 单词移动:
w:光标按单词向后移动
b:光标按单词向前移动 - 大小写切换:
~
- 删除 / 替换
n + x:删除光标后的n个字符 (行内)
n + X:删除光标前的n个字符(行内)
n + r:替换光标位置的字符,带上n,从当前光标位置开始,同时替换n个字符为某个字符
R:进入替换模式,直接覆盖文本 - 保存并退出
ZZ:保存并退出,等价于(底行:wq)
2. 插入模式
2.1 插入模式(编辑模式)
- 打字、写代码的模式
- 从命令模式进入到插入模式的方法:
i:在光标前插入
a:在光标后插入
o:在当前行下方新开一行插入
3. 底行模式
3.1 底行模式(执行命令)
- 用来保存、退出、搜索、执行shell命令、分屏等
- 从命令模式进来:按
: - 回到命令模式:执行完命令回车,或者按两次
Esc
tips:插入模式是无法直接进入底行模式的,必须先Esc回到命令模式,再从命令模式到底行模式
3.2 底行模式的核心命令
底行模式就是按:后输入的命令
w:保存文件
q:退出文件
wq:保存并退出
!:强制(比如:q!强制退出不保存)
set nu /set nonu:打开 / 关闭行号
/关键词:搜索
!命令:不退出vim直接执行shell命令(比如:ls查看当前目录文件)
bash
:%s/旧内容/新内容/g #全文件替换 -- 将所有的旧内容都替换为新内容
:%s/旧内容/新内容/gc #全文件+确认替换
💡多文件操作
:vs filename:垂直分屏(左右)打开文件
:sp filename:水平分屏(上下)打开文件
多文件来回切换:
- 分屏切换:
Ctrl + ww(循环切换所有窗口) - 文件来回跳:
Ctrl + ^(当前/上一个文件来回切换) - 直接跳转到指定文件:
:b 文件名
三、挑战话题:批量注释与去注释
这是开发里非常实用的技巧,用块选择模式实现:
批量注释
- 首先在命令模式下按
Ctrl + v进入可视块模式 - 用
h/j/k/l选中要注释的多行开头(垂直选中) - 再按
I进入块插入模式 - 输入注释符//
- 最后按
Esc退出,所有选中行就加上注释了
批量去注释
- 把光标移动到第一行注释的第一个字符/上
- 命令模式下按
Ctrl + v进入可视块模式 - 按
j向下移动,选中所有要去注释的行(此时选中的是多行的第一列) - 再按2次
l向右移动选中两列 - 按
d就能一次性删除所有的//
四、vim的配置问题
- 原理:vim启动时会自动读取配置文件~/.vimrc,不是只执行二进制程序
- .vimrc不是默认自带的,Linux安装vim时,不会自动在用户家目录(~)下生成这个文件
- 没有.vimrc配置文件也能正常使用vim,vim会自动使用默认配置
如果你需要相关配置可以自己创建.vimrc文件并配置,如下图示例:

总结:.vimrc是配置脚本,主要用来定义vim的外观和行为,不存在的时候就是空配置
常见的配置指令
bash
" ==============================================================================
" 基础设置(必开)
" ==============================================================================
set nocompatible " 关闭 vi 兼容模式
set number " 显示行号
set relativenumber " 显示相对行号(方便跳行)
set cursorline " 高亮当前行
set autoindent " 自动缩进
set smartindent " 智能缩进
set showcmd " 显示输入的命令
set showmode " 显示当前模式
set encoding=utf-8 " 编码 UTF-8
" ==============================================================================
" Tab / 缩进设置(写代码最舒服)
" ==============================================================================
set tabstop=4 " Tab 显示为 4 个空格
set shiftwidth=4 " 缩进宽度 4
set expandtab " Tab 自动转成空格
set softtabstop=4
set shiftround
" ==============================================================================
" 搜索设置
" ==============================================================================
set hlsearch " 高亮搜索结果
set incsearch " 边输入边搜索
set ignorecase " 搜索忽略大小写
set smartcase " 大写时自动区分大小写
" ==============================================================================
" 界面美观
" ==============================================================================
syntax on " 语法高亮
set termguicolors " 开启真彩色
set background=dark " 深色背景
set laststatus=2 " 永远显示状态栏
set ruler " 显示光标位置
set wrap " 自动换行
" ==============================================================================
" 操作体验优化
" ==============================================================================
set mouse=a " 开启鼠标支持(点哪跳哪)
set scrolloff=5 " 滚动时上下留 5 行
set history=1000 " 命令历史记录
set updatetime=100 " 响应更快
" ==============================================================================
" 快捷键增强(超级好用)
" ==============================================================================
nnoremap <space> : " 空格唤出命令行
nnoremap H ^ " H 跳到行首
nnoremap L $ " L 跳到行尾
" 分屏快速切换(Alt + hjkl)
nnoremap <A-h> <C-w>h
nnoremap <A-j> <C-w>j
nnoremap <A-k> <C-w>k
nnoremap <A-l> <C-w>l
" 快速切换文件(F2上一个 F3下一个)
nnoremap <F2> :bp<CR>
nnoremap <F3> :bn<CR>
五、补充sudoers权限问题
普通用户zhangsan在使用sudo命令,来进行指令提权时,会提示 "不在sudoers文件中" 解决办法:
- 使用root身份编辑sudoers文件:
vim /etc/sudoers - 找到这行:
root ALL = (ALL:ALL) ALL - 紧挨上一行添加:
zhangsan ALL = (ALL:ALL) ALL - 最后保存并退出(tips:该文件有特殊权限,必须用root修改)