avatar😊
w乐意wlyのblog

与你相遇 好幸运

欢迎来到我的小窝

Vim使用教程

Vim 是一个高度可配置的文本编辑器,旨在实现高效的文本编辑。它是大多数 UNIX 系统中分发的 vi 编辑器的改进版本。

Vim 通常被称为“程序员的编辑器”,对于编程非常有用,以至于许多人认为它是一个完整的 IDE。但这不仅仅适用于程序员。Vim 非常适合各种文本编辑,从撰写电子邮件到编辑配置文件。

安装

你可以在Linux终端中输入下面的命令来查看是否安装了

bash
vim --version

如果出现一大串版本信息,说明 Vim 已经在了。 如果提示 Command 'vim' not found,就安装一下:

bash
sudo apt update && sudo apt install vim -y

安装完后再用 vim --version 确认即可。

基本操作

创建并打开文件

我们创建一个叫hello.txt的文件来练习:

bash
vim hello.txt

回车后,你的终端会变成 Vim 的界面,大概长这样:

text
~
~
~
"hello.txt" [New File]

此刻你处于普通模式(Normal Mode),这是 Vim 的“默认状态”,所有按键都被理解成命令,而不是输入文字。

编辑文件

想往文件里写内容,必须先进入插入模式(Insert Mode)。按一下键盘上的 i 键(小写字母 i)。你会看到屏幕底部出现 -- INSERT -- 字样,说明现在可以像普通记事本一样打字了。试试输入下面这段文字(可以随意改内容):

text
Hello, Vim!
This is my first step.
I'm not afraid anymore.

随意换行,就像平常一样。写完内容后,按一下 Esc 键(键盘左上角那个键)。你会发现底部的 -- INSERT -- 消失了,这就回到了普通模式。在普通模式下,键盘上的字母又变回了命令。

核心认知:在 Vim 里,你要么在“打字模式”,要么在“命令模式”,大脑要时刻清楚自己在哪种模式里。这是新手最难适应但最重要的一点。

保存文件

然后需要保存文件。保存文件需要在普通模式下输入 : 进入“命令行模式”,然后输入 w(代表 write)并回车。

操作序列:

  1. 确认你已经在普通模式(看不到 --INSERT--)。
  2. : 键(冒号,需要组合 Shift + ;)。
  3. 屏幕底部会出现一个 : 提示符。
  4. 接着输入 w
  5. Enter 回车。

你会看到底部显示类似:

text
"hello.txt" [New] 3L, 60B written

这表示文件已保存(写入了 3 行,60 字节)。

退出文件

保存之后,我们想退出。还是在普通模式下:

  1. 输入 : (冒号)
  2. 输入 q (代表quit)
  3. Enter

Vim界面消失,回到终端提示符,说明你已经安全退出。输入

bash
cat hello.txt

查看我们刚刚编辑的文件,如果看到刚刚输入的文字,说明编辑成功。

假设我们修改了文件内容,但是又不想保存,直接退出,再打开文件

bash
vim hello.txt

这次按 i 进入插入模式,胡乱加一些内容,然后按 Esc 回到普通模式,输入 :q 回车。Vim会报错:

text
E37: No write since last change (add ! to override)

意思是文件被修改过,但没保存,我们输入 :q! 回车强制退出,不保存。你会直接退回终端,刚才的修改不会保存。

命令总结

我们可以在普通模式下输入 :wq 回车,意思是保存并离开

操作命令说明
从终端打开/创建文件vim 文件名进入 Vim
进入插入模式i屏幕底部出现 --INSERT--
退出插入模式Esc回到普通模式
保存:w冒号+w,回车
退出(无修改时):q冒号+q,回车
强制退出不保存:q!放弃修改,直接退出
保存并退出:wq:x保存后离开

移动的艺术

请先用 vim 打开一个文件,我们边看边练:

bash
vim practice.txt

然后按 i 进入插入模式,把下面这段示例文本一字不差地打进去(或复制粘贴也行,但要确认粘贴成功)。这段文本是我们全章的练习场:

text
The quick brown fox
jumps over the lazy dog.
It was the best of times,
it was the worst of times.
Hello, Vim World!

Esc 回到普通模式,我们开始移动。

常见移动方式

基础移动 h j k l

  • h —— 向左(←)
  • j —— 向下(↓)
  • k —— 向上(↑)
  • l —— 向右(→)

词间移动 w b e

  • w —— 跳到下一个单词的开头(word)
  • b —— 跳到上一个单词的开头(back)
  • e —— 跳到当前(或下一个)单词的末尾(end)

行内精准移动 0 ^ $

  • 0 —— 跳到这一行的绝对开头(第 0 列)
  • ^ —— 跳到这一行第一个非空白字符
  • $ —— 跳到这一行的末尾

文件级跳跃 gg G

  • gg —— 跳转到文件的第一行
  • G —— 跳转到文件的最后一行

数字 + G 可以跳到指定行,比如 3G 跳转到第 3 行。

屏幕级滚动 Ctrl-u Ctrl-d Ctrl-f Ctrl-b

  • Ctrl + u —— 向上翻半页(up)
  • Ctrl + d —— 向下翻半页(down)
  • Ctrl + f —— 向前翻一整页(forward)
  • Ctrl + b —— 向后翻一整页(backward)

为了验证效果,我们可以把刚刚的内容多复制几遍,尽量超过一页

命令总结

移动范围命令动作
字符h / j / k / l左 / 下 / 上 / 右
单词w下一个单词开头
单词b上一个单词开头
单词e当前/下一个单词末尾
行内0行首(绝对)
行内^行首(第一个非空字符)
行内$行尾
文件gg文件第一行
文件G文件最后一行
文件数字G跳到指定行号
屏幕Ctrl+u / Ctrl+d上半页 / 下半页
屏幕Ctrl+f / Ctrl+b下整页 / 上整页

操作符与动作组合

操作符 (Operator) 是“做啥”:d 删除,c 修改,y 复制

动作 (Motion) 是“对哪做”:w 一个词,$ 到行尾,gg 到文件头

把它们组合起来,就是一句话。比如 “删除一个单词” 就是 d + w = dw

常见操作

删除操作符 d

  • dw —— 删除一个单词
  • d$ —— 删除到行尾
  • dd —— 删除整行
  • dG —— 删除到文件尾

修改操作符 c—— 删除并进入插入模式

cd 的动作范围一模一样,但它多做了一个动作:删完后自动按了 i,让你进入插入模式开始写新东西。

  • cw —— 修改一个单词(从当前位置删除一个词,并进入插入模式)
  • c$ —— 修改到行尾(从当前位置一直删除到行尾,并进入插入模式)
  • cc —— 修改整行(删除整行并进入插入模式)

复制操作符 y

  • yw —— 复制一个单词
  • yiw —— 复制光标下整个词,iw 是个文本对象,代表 "inner word",它会精准选中光标下的整个单词,不论光标在词的首尾还是中间。
  • yy —— 复制整行
  • y$ —— 复制到行尾

粘贴操作符 p / P

  • p —— 粘贴到光标后(下方)
  • P —— 粘贴到光标前(上方)

撤销操作符 u

  • u —— 撤回上一步

搜索、替换与撤销

创建一个练习文件:

bash
vim chapter4.txt

进入插入模式,输入以下文本:

text
The quick brown fox.
jumping jackrabbits jump joyfully.
This fox is very fast.
The fox and the dog are friends.
Foxes are everywhere.
A quick fox jumps over the quick fox.
The QUICK brown Fox.
quick quick QUICK QuIcK

搜索

在 Vim 里搜索不需要先按冒号,在普通模式直接按 /? 即可。

  • / —— 正向搜索(从光标位置向文件尾方向找)
  • ? —— 反向搜索(从光标位置向文件头方向找)

gg 回到文件开头。按 /,你会看到屏幕左下角出现一个 / 提示符。输入 fox,然后按 Enter 回车。光标立刻跳到第一个 fox 上。现在按 n —— 跳到下一个匹配项(next)。再按 n 几次,一直跳到文件末尾的 fox。现在按 N(大写,即 Shift+n)—— 跳回上一个匹配项。用 nN 在匹配项之间来回穿梭几趟。

?,输入 fox,回车。Vim 会从光标位置向上搜索。按 nN 的跳跃方向也会随之反转。

Vim 默认是区分大小写的。搜索 /fox 不会匹配到 Fox。如果你想忽略大小写搜索,可以临时加 \c,比如 /fox\c 会匹配 fox、Fox、FOX 等。\C 则强制区分大小写。

搜索完后,所有匹配的词可能都被高亮了。如果这些高亮干扰了阅读,可以暂时关掉:输入 :nohlsearch 或简写 :noh,回车。高亮就消失了。下次你再搜索时,高亮会自动恢复。

替换

Vim 的替换命令是经典的 :s 命令,格式为:

text
:[range]s/pattern/replacement/[flags]

替换当前行第一个匹配项

  1. 把光标移动到第二行 Jumping jackrabbits jump joyfully.
  2. 输入 :s/jump/leap/ 然后回车。
  3. 你会发现这行里第一个 jump 变成了 leap,但后面的 jump 没变。

替换当前行所有匹配项

  1. u 撤销上一步。
  2. 输入 :s/jump/leap/g 然后回车。
  3. 这次整行里所有的 jump 都变成了 leap。末尾的 g 是 global 的意思,代表整行范围。

指定行的替换

如果你想对第 3 行到第 6 行做替换:输入 :3,6s/fox/cat/g 回车。观察文件:只有第 3 行到第 6 行的 fox 变成了 cat,其他行不受影响。

全文件替换

输入 :%s/fox/cat/g 回车。% 代表整个文件,这条命令会把文件里所有的 fox 替换成 cat。做完后请按 u 撤销回来,我们还要练下面的。

确认式替换

批量替换有时很危险,你不想全自动改,而是想看一个、决定一个。加 c 确认标志即可。输入 :%s/fox/cat/gc 回车。光标会跳到第一个 fox,底部出现提示:

text
replace with cat (y/n/a/q/l/^E/^Y)?
  • y —— 改这一个
  • n —— 不改,跳到下一个
  • a —— 全改(all),放弃确认
  • q —— 不改了,直接退出替换
  • l —— 改完这一个就直接退出

撤销与重做

  • u —— 撤销(undo)
  • Ctrl + r —— 重做(redo)

Vim 的撤销不像普通编辑器那样“Ctrl+Z 再 Ctrl+Y 就没了”,它有一个撤销树,我们暂时只感受线性部分:

  1. 任意删除一行(dd)。
  2. 修改一个词(cw 输入新词后 Esc)。
  3. 粘贴一行(p)。
  4. 现在连续按 u 几次,观察文件一步步退回之前的状态。
  5. 再连续按 Ctrl + r,一步一步把撤销掉的操作重新“做”回来。

命令总结

操作命令说明
正向搜索/关键词n / N 跳下一个/上一个
反向搜索?关键词方向与 / 相反
关闭高亮:noh暂时关闭搜索结果高亮
当前行替换:s/old/new/只替换该行第一个匹配项
当前行全局替换:s/old/new/g替换该行所有匹配项
指定行范围替换:3,6s/old/new/g对第3到第6行进行全局替换
全文替换:%s/old/new/g替换整个文件
确认式替换:%s/old/new/gc每个匹配项都询问是否替换
撤销u撤销上一步操作
重做Ctrl+r重做被撤销的操作

多文件与窗口管理

为了这次练习,我们需要先准备两个文件。请退出 Vim,在终端里执行:

bash
echo -e "apple\nbanana\ncherry\ndate\nelderberry" > fruits.txt
echo -e "red\nyellow\npink\nbrown\npurple" > colors.txt

缓冲区

你打开一个文件,Vim 就在内存里为它创建一个“缓冲区”(buffer)。你可以同时打开好几个缓冲区,只在需要时切换显示。

跟着做:

bash
vim fruits.txt

你现在打开了 fruits.txt,这是缓冲区列表里的第一个。

在 Vim 里,用下面命令打开第二个文件:

text
:e colors.txt

(意思是 edit 一个新文件)。现在你看到的是 colors.txt,但 fruits.txt 的缓冲区还在后台。

查看缓冲区列表:输入::ls(或 :buffers:files,都是同一个命令)

你会看到类似:

text
1 #    "fruits.txt"                   line 1
2 %a   "colors.txt"                   line 1
  • % 表示当前正在显示的文件
  • a 表示激活的缓冲区
  • # 表示上一个访问的缓冲区

切换缓冲区

Ctrl + ^。这个操作会在“当前文件”和“上一个文件”之间来回跳。按一次跳回 fruits.txt,再按一次跳回 colors.txt。这是最快的两个文件互切方式。

按编号或名字切换:

  • :b 1 切换到编号为 1 的缓冲区
  • :b fruits 甚至能支持模糊匹配,只要打出部分名字,按 Tab 自动补全

窗口分割

colors.txt 界面里,输入

text
:spilt fruits.txt

简写(:sp fruits.txt

屏幕被水平分割成上下两半,上面是 colors.txt,下面是 fruits.txt

  • Ctrl + w 然后按 j —— 跳到下面的窗口
  • Ctrl + w 然后按 k —— 跳到上面的窗口
  • 规律是:Ctrl+w 开启窗口命令模式,然后再按方向键(我们就用hjkl

垂直分割

输入::vsplit(或 :vsp),把当前窗口左右再分成两半。如果你还没打开新文件,分割出来的两个窗口会显示同一个缓冲区,可以在其中一个用 :e 换文件。

Ctrl + w 再按 =,所有窗口立刻均分屏幕空间。

关闭当前窗口

:q 正常关闭(或者 Ctrl + w 再按 q

标签页

创建标签页

  • 输入 :tabnew,会打开一个空白的新标签页,里面只有一个窗口
  • 在新标签页里,用 :e fruits.txt 打开文件

切换标签页

  • gt —— 跳到下一个标签页
  • gT —— 跳到上一个标签页
  • 数字+gt —— 跳到指定的标签页(比如 1gt 跳到第一个标签页)

关闭标签页

  • :tabclose:tabc

文件浏览

打开当前目录的文件浏览器

text
:Explore

(简写 :Ex)。你会看到一个文件列表,用 j k 上下移动,回车打开文件或者进入目录,如果想看上层目录,光标移到 ../ 上回车即可。

窗口间复制粘贴

场景:把 fruits.txt 里的内容,逐行复制到 colors.txt 的每一行前面。

  1. :sp fruits.txt 水平分割,上下各一个文件。
  2. 在上面窗口(colors.txt)定位到第一行。
  3. Ctrl + w 再按 j 跳到下面窗口。
  4. 光标放在 apple 上,按 yy 复制整行。
  5. Ctrl + w 再按 k 跳回上面窗口。
  6. P(大写)将 apple 粘贴到当前行之前。
  7. 然后按 j 下移一行,再按 Ctrl+w j 跳下去复制 banana,如此循环。

命令总结

类别命令说明
打开文件:e 文件名在缓冲区打开文件
缓冲区列表:ls列出所有缓冲区
切换缓冲区Ctrl+^在最近两个缓冲区间切换
切换缓冲区:b 编号/名字按编号或名字切换
水平分割:sp 文件名上下分屏
垂直分割:vsp 文件名左右分屏
窗口间跳转Ctrl+w j/k/h/l按方向跳窗口
均分窗口Ctrl+w =窗口等大
关闭窗口Ctrl+w q关闭当前窗口
新建标签页:tabnew创建空白标签页
切换标签gt / gT下一个/上一个标签
文件浏览:Ex打开内置文件浏览器

高效定制

编辑 .vimrc 文件

Vim 的配置都写在一个叫 .vimrc 的文件里,它就在你的用户主目录下。

在终端里输入:

bash
vim ~/.vimrc

如果文件已经存在(有些系统会预装一个示例),你可以先备份一下:

bash
cp ~/.vimrc ~/.vimrc.backup

现在用 Vim 打开它,我们一起写几行。

基础设置

~/.vimrc 里输入以下内容

vim
" 基础设置
set number              " 显示行号
set relativenumber      " 显示相对行号(配合跳转很好用)
set autoindent          " 自动缩进
set smartindent         " 更智能的缩进(比如换行自动对齐)
set tabstop=4           " Tab 键宽度为 4 个空格
set shiftwidth=4        " 自动缩进时使用 4 个空格
set expandtab           " 把输入的 Tab 自动转成空格(写代码常用)
set cursorline          " 高亮当前行
set hlsearch            " 搜索时高亮所有匹配项
set incsearch           " 输入搜索词时即时匹配
set ignorecase          " 搜索时默认忽略大小写
set smartcase           " 但如果搜索词包含大写字母,就区分大小写
set showcmd             " 在屏幕右下角显示正在输入的命令
set showmode            " 在屏幕左下角显示当前模式(-- INSERT -- 等)
set ruler               " 显示光标所在行号和列号
set laststatus=2        " 始终显示状态栏
set wildmenu            " 命令行补全时显示增强菜单
set mouse=a             " 启用鼠标支持(选文本、调窗口大小等,适合新人过渡)

保存并退出(:wq)。重新打开 Vim,你就可以看到设置生效了。你可以试试新的变化。或者在不退出的情况下,在任意打开的文件里执行:

text
:source ~/.vimrc

创建快捷键映射

Vim 允许你把常用的组合键映射成更方便的快捷键。我们会改的都是普通模式下的映射。在 ~/.vimrc 里继续添加:

vim
" 快捷键映射
" <Leader> 键默认是反斜杠 \,可以自定义为空格
let mapleader = "\<Space>"

" 用 <Leader> + w 快速保存
nnoremap <Leader>w :w<CR>

" 用 <Leader> + q 快速退出
nnoremap <Leader>q :q<CR>

" 用 <Leader> + x 保存并退出
nnoremap <Leader>x :wq<CR>

" 用 Ctrl + j/k 在窗口间快速切换(代替 Ctrl+w j/k)
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-h> <C-w>h
nnoremap <C-l> <C-w>l

" 用 H/L 快速跳到行首/行尾(省去按 Shift)
nnoremap H ^
nnoremap L $

" 用 J/K 一次移动 5 行(实现“快速滚动”)
nnoremap J 5j
nnoremap K 5k

" 用 <Leader> + / 清除搜索高亮
nnoremap <Leader>/ :noh<CR>

注意:nnoremap 表示只在普通模式下生效,且不会递归映射。这是安全且推荐的做法。

重新加载配置(:source ~/.vimrc)

安装插件管理器

Vim 社区有无数插件,能让编辑器支持语言补全、文件树、模糊搜索等等。我们需要一个插件管理器来管理它们。这里推荐 vim-plug,因为它简单、快、支持异步安装。

安装 vim-plug:

在终端里运行这一条命令(它会把 plug.vim 下载到正确位置):

bash
curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

配置 ~/.vimrc 以使用插件

打开 ~/.vimrc,在文件里合适的位置加入插件定义块:

vim
" 插件管理
call plug#begin('~/.vim/plugged')

" 一个超好用的注释插件:gc 注释/取消注释
Plug 'tpope/vim-commentary'

" 状态栏美化(可选,新手友好)
Plug 'vim-airline/vim-airline'

" 文件树浏览器(可选,类似 IDE 侧边栏)
Plug 'preservim/nerdtree'

call plug#end()

保存文件并重新加载(:source ~/.vimrc 或重启 Vim),然后执行:

text
:PlugInstall

你会看到 vim-plug 自动下载并安装这几个插件。等它们装好后,我们立刻体验一个:vim-commentary

体验第一个插件 —— vim-commentary

这个插件提供了一个非常符合 Vim 哲学的功能:用 gc 动作来注释或取消注释代码/文本。

创建一个 test.py,随意写一些代码,在普通模式下:

  • gcc —— 注释/取消注释当前行
  • gc 然后按 j —— 注释当前行及下一行(gc + 动作)
  • 选中一段文字(用 V 进入可视行模式,然后 j 选几行),再按 gc —— 注释选中的多行

它支持大量文件类型(貌似.txt文件不支持,好像文本文件本身就不能注释),自动判断用 //# 还是 " 等注释符。

命令总结

操作命令/设置说明
编辑配置文件vim ~/.vimrc所有配置的入口
重新加载配置:source ~/.vimrc不用重启 Vim
显示行号set number绝对行号
相对行号set relativenumber方便看到跳几行
Tab 转空格set expandtab写 Python/YAML 必开
高亮当前行set cursorline定位更直观
搜索忽略大小写set ignorecase配合 smartcase 使用
设置 <Leader>let mapleader = "\<Space>"把 Leader 改成空格键很流行
定义快捷映射nnoremap 键 动作只在普通模式生效
安装 vim-plug见上方 curl 命令一次性安装
声明插件Plug '作者/插件名'写在 plug#begin/end 块内
安装插件:PlugInstall安装块内所有插件
注释插件使用gc + 动作/文本对象vim-commentary 插件

总结

Vim 的基本使用差不多就是以上这些,如果还需要深入学习,可以自行上网搜索。比如说可视化模式宏操作等。

GitHub主页美化教程
Zotero使用教程
Valaxy v0.28.4 驱动|主题-Yunv0.28.4
本站总访问量
本站访客数 人次
本站已摇摇晃晃运行 0 天0 小时0 分0 秒