Linux系统编程:(七)Vim 编辑器完全指南:从入门到精通的全方位实战教程

分类: 365bet开户注册 发布时间: 2026-06-16 12:42:56 作者: admin

前言 在 Linux 系统的开发与运维工作中,编辑器是不可或缺的工具。而 Vim 作为一款功能强大的多模式编辑器,凭借其高效的操作方式、强大的定制能力和跨平台特性,成为了 Linux 用户的首选编辑器之一。无论是编写代码、修改配置文件,还是日常文本编辑,Vim 都能凭借丰富的命令和灵活的操作模式大幅提升工作效率。

本文将基于 Linux 基础开发工具的核心知识点,全面详解 Vim 编辑器的使用方法,包括 Vim 与 Vi 的区别、核心模式概念、基本操作流程、常用命令集、操作总结以及个性化配置,下面就让我们正式开始吧!

一、Linux 编辑器 - Vim 使用概述 在 Linux 系统中,文本编辑器种类繁多,从简单的 nano、cat 到功能复杂的 Vim、Emacs,不同编辑器适用于不同场景。其中 Vim(Vi Improved)是 Vi 编辑器的增强版本,不仅完全兼容 Vi 的所有指令,还新增了语法高亮、可视化操作、插件扩展等实用功能,使其在专业性和易用性上都有了质的飞跃。

1.1 Vim 与 Vi 的核心区别 Vi 是 Linux 系统自带的基础文本编辑器,诞生于 Unix 早期版本,功能相对基础但足够满足简单文本编辑需求。而 Vim 在 Vi 的基础上进行了全面升级,主要区别如下:

语法高亮:Vim 能根据文件类型(如 C、C++、Shell 脚本、配置文件等)自动对代码关键字、注释、字符串等进行颜色区分,提高代码可读性。可视化操作:支持块选择、可视化编辑等功能,方便批量修改文本。跨平台支持:不仅可在 Linux 终端运行,还能在 Windows、macOS、X Window 等系统中使用。插件扩展:支持丰富的第三方插件,可通过插件增强代码补全、文件管理、版本控制等功能。更多实用功能:如多级撤销、代码折叠、正则表达式搜索等。 在实际使用中,Linux 系统通常默认安装 Vi,而 Vim 可能需要手动安装。以 CentOS 和 Ubuntu 系统为例,安装命令如下:

安装 Vim(CentOS 系统)代码语言:javascript复制sudo yum install -y vim输出结果示例:

代码语言:javascript复制Loaded plugins: fastestmirror, langpacks

Loading mirror speeds from cached hostfile

Resolving Dependencies

--> Running transaction check

---> Package vim-enhanced.x86_64 2:7.4.629-8.el7_9 will be installed

--> Finished Dependency Resolution

Dependencies Resolved

================================================================================

Package Arch Version Repository Size

================================================================================

Installing:

vim-enhanced x86_64 2:7.4.629-8.el7_9 updates 1.0 M

Transaction Summary

================================================================================

Install 1 Package

Total download size: 1.0 M

Installed size: 2.9 M

Downloading packages:

vim-enhanced-7.4.629-8.el7_9.x86_64.rpm | 1.0 MB 00:00:01

Running transaction check

Running transaction test

Transaction test succeeded

Running transaction

Installing : 2:vim-enhanced-7.4.629-8.el7_9.x86_64 1/1

Verifying : 2:vim-enhanced-7.4.629-8.el7_9.x86_64 1/1

Installed:

vim-enhanced.x86_64 2:7.4.629-8.el7_9

Complete!安装 Vim(Ubuntu 系统)代码语言:javascript复制sudo apt install -y vim输出结果示例:

代码语言:javascript复制Reading package lists... Done

Building dependency tree

Reading state information... Done

The following additional packages will be installed:

vim-common vim-runtime xxd

Suggested packages:

ctags vim-doc vim-scripts

The following NEW packages will be installed:

vim vim-common vim-runtime xxd

0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.

Need to get 6,212 kB of archives.

After this operation, 30.1 MB of additional disk space will be used.

Get:1 http://mirrors.aliyun.com/ubuntu focal/main amd64 xxd amd64 2:8.1.2269-1ubuntu5 [37.5 kB]

Get:2 http://mirrors.aliyun.com/ubuntu focal/main amd64 vim-common amd64 2:8.1.2269-1ubuntu5 [164 kB]

Get:3 http://mirrors.aliyun.com/ubuntu focal/main amd64 vim-runtime all 2:8.1.2269-1ubuntu5 [5,490 kB]

Get:4 http://mirrors.aliyun.com/ubuntu focal/main amd64 vim amd64 2:8.1.2269-1ubuntu5 [520 kB]

Fetched 6,212 kB in 2s (3,106 kB/s)

Selecting previously unselected package xxd.

(Reading database ... 125532 files and directories currently installed.)

Preparing to unpack .../xxd_2%3a8.1.2269-1ubuntu5_amd64.deb ...

Unpacking xxd (2:8.1.2269-1ubuntu5) ...

Selecting previously unselected package vim-common.

Preparing to unpack .../vim-common_2%3a8.1.2269-1ubuntu5_amd64.deb ...

Unpacking vim-common (2:8.1.2269-1ubuntu5) ...

Selecting previously unselected package vim-runtime.

Preparing to unpack .../vim-runtime_2%3a8.1.2269-1ubuntu5_all.deb ...

Adding 'diversion of /usr/share/vim/vim81/doc/help.txt to /usr/share/vim/vim81/doc/help.txt.vim-tiny by vim-runtime'

Adding 'diversion of /usr/share/vim/vim81/doc/tags to /usr/share/vim/vim81/doc/tags.vim-tiny by vim-runtime'

Unpacking vim-runtime (2:8.1.2269-1ubuntu5) ...

Selecting previously unselected package vim.

Preparing to unpack .../vim_2%3a8.1.2269-1ubuntu5_amd64.deb ...

Unpacking vim (2:8.1.2269-1ubuntu5) ...

Setting up xxd (2:8.1.2269-1ubuntu5) ...

Setting up vim-common (2:8.1.2269-1ubuntu5) ...

Setting up vim-runtime (2:8.1.2269-1ubuntu5) ...

Setting up vim (2:8.1.2269-1ubuntu5) ...

update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vim (vim) in auto mode

update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vimdiff (vimdiff) in auto mode

update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rvim (rvim) in auto mode

update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rview (rview) in auto mode

update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vi (vi) in auto mode

update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/view (view) in auto mode

update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/ex (ex) in auto mode

Processing triggers for man-db (2.9.1-1) ... 安装完成后,可通过以下命令验证 Vim 版本:

代码语言:javascript复制vim --version输出结果示例(部分):

代码语言:javascript复制VIM - Vi IMproved 8.1 (2018 May 18, compiled Jun 15 2020 16:41:35)

Included patches: 1-2269

Modified by team+vim@tracker.debian.org

Compiled by team+vim@tracker.debian.org

Huge version without GUI. Features included (+) or not (-):

+acl -farsi +mouse_sgr +tag_binary

+arabic +file_in_path -mouse_sysmouse -tag_old_static

+autocmd +find_in_path +mouse_urxvt -tag_any_white

+autochdir +float +mouse_xterm -tcl

-autoservername +folding +multi_byte +termguicolors

-balloon_eval -footer +multi_lang +terminal

+balloon_eval_term +fork() -mzscheme +terminfo

-browse +gettext +netbeans_intg +termresponse

++builtin_terms -hangul_input +num64 +textobjects

+byte_offset +iconv +packages +textprop

+channel +insert_expand +path_extra +timers

+cindent +job -perl +title

-clientserver +jumplist +persistent_undo -toolbar

-clipboard +keymap +postscript +user_commands

+cmdline_compl +lambda +printer +vartabs

+cmdline_hist +langmap +profile +vertsplit

+cmdline_info +libcall -python +virtualedit

+comments +linebreak +python3 +visual

+conceal +lispindent +quickfix +visualextra

+cryptv +listcmds +reltime +viminfo

+cscope +localmap +rightleft +vreplace

+cursorbind -lua -ruby +wildignore

+cursorshape +menu +scrollbind +wildmenu

+dialog_con +mksession +signs +windows

+diff +modify_fname +smartindent +writebackup

+digraphs +mouse -sound -X11

-dnd -mouseshape +spell -xfontset

-ebcdic +mouse_dec +startuptime -xim

+emacs_tags +mouse_gpm +statusline -xpm

+eval -mouse_jsbterm -sun_workshop -xsmp

+ex_extra +mouse_netterm +syntax -xterm_clipboard

+extra_search +mouse_sgr +tag_bind -xterm_save

system vimrc file: "$VIM/vimrc"

user vimrc file: "$HOME/.vimrc"

second user vimrc file: "~/.vim/vimrc"

user exrc file: "$HOME/.exrc"

fall-back for $VIM: "/usr/share/vim"

Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -Wdate-time -g -O2 -fdebug-prefix-map=/build/vim-Yf7H7j/vim-8.1.2269=. -fstack-protector-strong -Wformat -Werror=format-security -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1

Linking: gcc -L. -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now1.2 Vim 的适用场景 Vim 凭借其高效的操作逻辑和强大的功能,适用于以下场景:

代码编写:支持多种编程语言的语法高亮、缩进优化、代码折叠等功能,配合插件可实现代码补全、语法检查。配置文件修改:Linux 系统的大部分配置文件(如/etc/profile、/etc/nginx/nginx.conf等)均为纯文本格式,Vim 的多模式操作能快速修改配置。远程服务器操作:通过 SSH 连接远程服务器时,终端环境下 Vim 是最便捷的文本编辑工具,无需图形界面支持。批量文本处理:借助 Vim 的正则表达式替换、块操作等功能,可快速处理大量文本(如日志分析、数据格式转换)。二、Vim 的基本概念 Vim 的核心特性是多模式编辑,不同模式下的操作逻辑和命令各不相同。初学者最容易困惑的就是模式切换,因此掌握 Vim 的基本模式是学好 Vim 的关键。

2.1 Vim 的三种核心模式 Vim 提供了多种编辑模式,其中最常用、最基础的三种模式分别是:命令模式(Normal mode)、插入模式(Insert mode)和底行模式(Last line mode)。熟练掌握这三种模式的切换方式和核心功能,就能应对大部分文本编辑场景。

2.1.1 命令模式(Normal mode)进入方式:启动 Vim 后默认进入命令模式;在插入模式或底行模式下按ESC键可返回命令模式。核心功能:控制光标移动、文本选择、删除、复制、粘贴、替换、撤销等基础操作,是 Vim 模式切换的 “中转站”。操作特点:无需输入冒号或其他前缀,直接按下对应命令键即可执行操作(如按x删除光标所在字符)。2.1.2 插入模式(Insert mode)进入方式:在命令模式下通过特定命令(i、a、o)进入。核心功能:输入文本内容,与普通文本编辑器的编辑状态类似。操作特点:底部状态栏会显示-- INSERT --标识,此时输入的字符会直接插入到文本中,按ESC键可返回命令模式。2.1.3 底行模式(Last line mode)进入方式:在命令模式下按Shift + ;(即输入冒号:)进入。核心功能:文件保存、退出、查找替换、行号显示、跳转指定行等高级操作。操作特点:光标会移动到屏幕底部的命令输入栏,输入命令后按回车键执行,执行完成后自动返回命令模式(部分命令除外),底部状态栏会显示输入的命令。2.2 模式切换逻辑 三种核心模式的切换关系如下:

启动 Vim:默认进入命令模式。命令模式 → 插入模式:按i、a、o等插入命令。插入模式 → 命令模式:按ESC键(无论当前输入到何种状态,按ESC均可快速返回)。命令模式 → 底行模式:按:(冒号)。底行模式 → 命令模式:按ESC键或执行命令后自动返回。模式切换示意图:

2.3 其他模式(了解即可) 除了三种核心模式,Vim 还提供了其他进阶模式,适用于特定场景:

可视化模式(Visual mode):在命令模式下按v(字符可视化)、V(行可视化)、Ctrl + v(块可视化)进入,用于选择文本块进行批量操作(如复制、删除、替换)。替换模式(Replace mode):在命令模式下按R进入,输入的字符会直接替换光标所在位置的字符,直到按ESC返回命令模式。选择模式(Select mode):类似可视化模式,但更接近图形界面编辑器的选择逻辑,按Ctrl + g可切换到可视化模式。 Vim 官方文档中总共定义了 12 种模式(6 种基础模式 + 6 种附加模式),但对于初学者而言,无需掌握所有模式,先熟练运用三种核心模式即可满足日常使用,后续可根据需求逐步学习进阶模式。

三、Vim 的基本操作 Vim 的基本操作围绕 “文件管理” 和 “模式切换” 展开,包括文件的打开、编辑、保存、退出等核心流程,掌握这些操作是使用 Vim 的基础。

3.1 打开文件 在终端中通过vim命令可打开指定文件,若文件不存在则会创建该文件(退出时需手动保存才能生成文件)。

基本语法代码语言:javascript复制vim [文件名]示例 1:打开已存在的文件 假设当前目录下有test.c文件,打开命令如下:

代码语言:javascript复制vim test.c 执行后会进入 Vim 的命令模式,界面显示test.c的文件内容(若文件为空则显示空白界面),底部状态栏会显示文件名、行数、列数等信息。

示例 2:创建并打开新文件 打开不存在的hello.txt文件(退出时保存会生成该文件):

代码语言:javascript复制vim hello.txt 执行后进入 Vim 命令模式,界面空白,底部状态栏显示"hello.txt" [New File],表示当前是新文件。

示例 3:打开文件并跳转到指定行 若文件较大,可直接跳转到指定行,语法如下:

代码语言:javascript复制vim +[行号] [文件名] 例如,打开test.c并跳转到第 10 行:

代码语言:javascript复制vim +10 test.c 执行后进入命令模式,光标直接定位到第 10 行,底部状态栏显示"test.c" 15L, 320C(15L 表示 15 行,320C 表示 320 个字符)。

3.2 模式切换实战3.2.1 命令模式 → 插入模式(三种常用方式) 在命令模式下,进入插入模式的常用命令有三种,适用场景不同:

i:在光标当前位置插入文本(光标不动,新输入的字符插入到光标左侧)。a:在光标下一个位置插入文本(光标向右移动一位,新输入的字符插入到光标原来的位置右侧)。o:在光标所在行的下方插入新行,光标定位到新行的行首并进入插入模式。O(大写):在光标所在行的上方插入新行,光标定位到新行的行首并进入插入模式。示例操作:

打开hello.txt文件:vim hello.txt(命令模式)。按i进入插入模式,底部状态栏显示-- INSERT --。输入文本:Hello Vim!。按ESC返回命令模式,底部-- INSERT --标识消失。按o在当前行下方插入新行,进入插入模式,输入:This is my first Vim edit.。按ESC返回命令模式。移动光标到第一行末尾(后续会讲解光标移动命令),按a在光标后插入文本: I love Linux!。按ESC返回命令模式,此时文本内容如下:代码语言:javascript复制Hello Vim! I love Linux!

This is my first Vim edit.3.2.2 命令模式 → 底行模式 在命令模式下按:(冒号),光标会移动到屏幕底部,进入底行模式,此时可输入底行命令。

示例操作:

处于命令模式,按:进入底行模式,底部显示:。输入w(保存命令),按回车键执行,底部显示"hello.txt" [New File] 2L, 53C written,表示文件保存成功,自动返回命令模式。3.3 保存与退出文件 文件编辑完成后,需通过底行命令保存并退出,常用的保存退出命令如下:

命令

功能描述

适用场景

:w

保存当前文件(不退出)

编辑过程中随时保存,防止内容丢失

:q

退出 Vim(文件已保存时)

保存后退出

:wq

保存并退出 Vim

编辑完成后保存退出

:q!

强制退出 Vim(不保存修改)

编辑错误或无需保存时强制退出

:w!

强制保存文件

文件为只读时(需权限)强制保存

:w [文件名]

另存为指定文件

不想覆盖原文件时使用

示例 1:保存并退出编辑完hello.txt后,处于命令模式。按:进入底行模式,输入wq,按回车键。退出 Vim,返回终端,当前目录下生成hello.txt文件,查看文件内容:代码语言:javascript复制cat hello.txt 输出结果:

代码语言:javascript复制Hello Vim! I love Linux!

This is my first Vim edit.示例 2:强制退出(不保存)打开hello.txt:vim hello.txt。按i进入插入模式,输入无关文本:test force quit。按ESC返回命令模式。按:进入底行模式,输入q!,按回车键强制退出。返回终端,查看文件内容:代码语言:javascript复制cat hello.txt 输出结果仍为原内容,新增的test force quit未被保存,说明q!命令成功放弃修改并退出。

示例 3:另存为新文件打开hello.txt:vim hello.txt。按:进入底行模式,输入w hello_backup.txt,按回车键。底部显示"hello_backup.txt" 2L, 53C written,表示另存为成功,返回命令模式。按:输入q退出 Vim。查看当前目录,新增hello_backup.txt文件,内容与hello.txt一致:代码语言:javascript复制ls

cat hello_backup.txt 输出结果:

代码语言:javascript复制hello.txt hello_backup.txt

Hello Vim! I love Linux!

This is my first Vim edit.3.4 放弃修改(撤销操作) 在编辑过程中,若误操作可通过命令模式的撤销命令恢复,常用撤销相关命令如下:

u:撤销上一次操作(可多次按u撤销多步操作)。Ctrl + r:恢复撤销操作(即 “反撤销”,撤销u命令的效果)。示例操作:

1. 打开hello.txt:vim hello.txt。

2. 按i进入插入模式,在第三行输入This is a mistake.。

3. 按ESC返回命令模式,此时文本内容:

代码语言:javascript复制Hello Vim! I love Linux!

This is my first Vim edit.

This is a mistake.4. 按u撤销上一次插入操作,第三行的This is a mistake.消失。

5. 按Ctrl + r恢复撤销,第三行内容重新出现。

6. 按u再次撤销,第三行内容消失,按:wq保存退出。

四、Vim 正常模式命令集 命令模式是 Vim 的核心模式,提供了丰富的文本操作命令,涵盖光标移动、文本删除、复制粘贴、替换、撤销等功能。熟练掌握这些命令能大幅提升编辑效率,以下是最常用的命令分类详解。

4.1 光标移动命令 Vim 的光标移动命令非常灵活,支持按字符、单词、行、段落、屏幕等维度移动,无需依赖方向键,仅用字母键即可完成高效移动。

4.1.1 基础移动(按字符 / 行)命令

功能描述

示例

h

光标向左移动 1 格

按h,光标左移

j

光标向下移动 1 行

按j,光标下移

k

光标向上移动 1 行

按k,光标上移

l

光标向右移动 1 格

按l,光标右移

0(数字 0)

光标移动到当前行的行首

光标在该行中间,按0跳至行首

$

光标移动到当前行的行尾

光标在该行中间,按$跳至行尾

^

光标移动到当前行的第一个非空白字符

行首有空格时,按^跳至第一个有效字符

示例操作:假设文本内容如下(光标初始在第一行Hello的H后):

代码语言:javascript复制Hello Vim! I love Linux! # 行1

This is my first Vim edit. # 行2按l5 次,光标移动到Vim!的!后。按$,光标跳至行 1 末尾(Linux!的!后)。按0,光标跳至行 1 行首(H前)。按j,光标下移到行 2 的行首。按^,若行 2 行首无空格,光标保持在行首;若有空格,跳至第一个非空格字符(T前)。按k,光标返回行 1 行首。4.1.2 按单词移动命令

功能描述

示例

w

光标跳至下一个单词的开头

光标在Hello的H后,按w跳至Vim!的V前

e

光标跳至当前单词或下一个单词的末尾

光标在Hello的H后,按e跳至Hello的o后

b

光标跳至当前单词或上一个单词的开头

光标在Vim!的V后,按b跳至Hello的H前

W(大写)

按 “长单词” 移动(忽略标点符号)

光标在Vim!的!后,按W跳至I前(忽略!)

E(大写)

按 “长单词” 移动,跳至单词末尾

光标在Vim!的V后,按E跳至!后

B(大写)

按 “长单词” 移动,跳至单词开头

光标在I前,按B跳至Vim!的V前

说明:Vim 中 “单词” 的定义为:由字母、数字、下划线组成的连续字符序列;“长单词” 的定义为:由非空白字符组成的连续字符序列(忽略标点符号)。

示例操作:文本内容:Hello Vim! I love Linux!(光标初始在H后)

按w:光标跳至Vim!的V前。按e:光标跳至Vim!的!后。按w:光标跳至I前。按b:光标跳回Vim!的V前。按W:光标跳至I前(与w效果一致,因!后是空格)。按e:光标跳至I后。按w:光标跳至love的l前。4.1.3 按屏幕移动(翻页)命令

功能描述

类似操作

Ctrl + f

屏幕向前翻一页(滚动到下一页)

类似 PageDown 键

Ctrl + b

屏幕向后翻一页(滚动到上一页)

类似 PageUp 键

Ctrl + d

屏幕向前滚动半页

向下滚动半屏

Ctrl + u

屏幕向后滚动半页

向上滚动半屏

Ctrl + e

屏幕向下滚动 1 行(光标不动)

屏幕下移,光标位置不变

Ctrl + y

屏幕向上滚动 1 行(光标不动)

屏幕上移,光标位置不变

H

光标移动到屏幕顶部行的行首

屏幕顶部

M

光标移动到屏幕中间行的行首

屏幕中间

L

光标移动到屏幕底部行的行首

屏幕底部

示例操作:假设打开一个 100 行的longfile.txt文件,当前屏幕显示第 1-20 行:

按Ctrl + f:屏幕翻到第 21-40 行,光标在第 21 行首。按Ctrl + b:屏幕返回第 1-20 行,光标在第 1 行首。按Ctrl + d:屏幕滚动到第 11-30 行,光标在第 11 行首。按H:光标跳至屏幕顶部行(第 1 行)首。按M:光标跳至屏幕中间行(第 10 行)首。按L:光标跳至屏幕底部行(第 20 行)首。4.1.4 按文本全局移动命令

功能描述

示例

gg

光标移动到文本的第一行首

无论当前在第几行,按gg跳至文首

G(大写)

光标移动到文本的最后一行首

按G跳至文尾

[行号]G

光标移动到指定行的行首

按50G跳至第 50 行首

Ctrl + g

显示当前光标位置信息(行号、列号、总行数)

底部显示10,1-8 5%(第 10 行,第 1-8 列,占总文本 5%)

示例操作:文本共 50 行,当前光标在第 20 行:

按gg:光标跳至第 1 行首。按G:光标跳至第 50 行首。按30G:光标跳至第 30 行首。按Ctrl + g:底部状态栏显示30,1-0 60%(第 30 行,第 1 列,占总文本 60%)。4.2 文本删除命令 Vim 的删除命令以d(delete)为核心,配合光标移动命令可实现不同范围的文本删除,删除的内容会被存入 Vim 缓冲区,可通过粘贴命令恢复。

4.2.1 基础删除命令命令

功能描述

示例

x

删除光标所在位置的 1 个字符

光标在a上,按x删除a

X(大写)

删除光标所在位置左侧的 1 个字符

光标在a后,按X删除a

#x

删除光标所在位置及右侧共#个字符

按3x删除光标处及右侧 2 个字符(共 3 个)

#X

删除光标所在位置左侧共#个字符

按2X删除光标左侧 2 个字符

dd

删除光标所在的整行

光标在第 5 行,按dd删除第 5 行

#dd

从光标所在行开始,删除#行

按5dd删除光标行及下方 4 行(共 5 行)

D

删除光标所在位置到行尾的所有字符

光标在该行中间,按D删除光标后至行尾内容

d$

与D功能一致,删除光标到行尾

同D

d^

删除光标所在位置到行首的所有字符(不含光标处字符)

光标在该行中间,按d^删除行首至光标前内容

dw

删除光标所在位置到下一个单词开头的字符

光标在Hello的e后,按dw删除o及后续空格

de

删除光标所在位置到当前单词末尾的字符

光标在Hello的e后,按de删除o

db

删除光标所在位置到上一个单词开头的字符

光标在Vim的i后,按db删除Vi

示例操作:文本内容(光标初始在H后):Hello Vim! I love Linux!

按x:删除H后的e,文本变为Hllo Vim! I love Linux!。按3x:删除H后的llo,文本变为H Vim! I love Linux!。按X:删除H左侧无字符,无效果;移动光标到V后,按X删除V,文本变为H im! I love Linux!。按dd:删除当前行,文本仅剩第二行(若为单行则文本为空)。重新打开文件,按d$:删除光标到行尾,若光标在V前,文本变为Hello。4.2.2 组合删除命令(配合光标移动) Vim 的删除命令支持 “命令 + 范围” 的组合模式,即d + 光标移动命令,表示删除 “光标当前位置到光标移动后位置” 的文本。常用组合如下:

d0:删除光标到行首(同d^)。d$:删除光标到行尾(同D)。dw:删除光标到下一个单词开头。de:删除光标到当前单词末尾。db:删除光标到上一个单词开头。dj:删除光标所在行及下一行(同2dd)。dk:删除光标所在行及上一行。dG:删除光标所在行到文本末尾的所有行。dgg:删除光标所在行到文本开头的所有行。d[行号]G:删除光标所在行到指定行的所有行。 示例操作:文本共 10 行,光标在第 3 行:

按dG:删除第 3-10 行,仅剩第 1-2 行。按dgg:删除第 1-3 行(当前光标在第 3 行),仅剩第 4-10 行。按d5G:删除第 3-5 行,剩余行自动上移。4.3 复制与粘贴命令 Vim 的复制命令以y(yank)为核心,粘贴命令为p(put),复制的内容会存入缓冲区,支持跨文件粘贴。

4.3.1 复制命令命令

功能描述

示例

yw

复制光标所在位置到当前单词末尾的字符

光标在Hello的e后,按yw复制o

#yw

复制光标所在位置开始的#个单词

按2yw复制当前单词及下一个单词

yy

复制光标所在的整行

按yy复制当前行

#yy

从光标所在行开始,复制#行

按3yy复制光标行及下方 2 行(共 3 行)

y$

复制光标所在位置到行尾的字符

光标在该行中间,按y$复制光标后至行尾

y^

复制光标所在位置到行首的字符

光标在该行中间,按y^复制行首至光标前

yG

复制光标所在行到文本末尾的所有行

按yG复制光标行至文尾

ygg

复制光标所在行到文本开头的所有行

按ygg复制光标行至文首

示例操作:文本内容:

代码语言:javascript复制Line 1: Hello Vim!

Line 2: This is a test.

Line 3: I love Linux. 光标在第 2 行首:

按yy:复制第 2 行(Line 2: This is a test.)。按3yy:复制第 2-4 行(若只有 3 行则复制第 2-3 行)。移动光标到第 1 行末尾,按yw:复制Vim!。按y$:复制第 1 行光标后至行尾的Vim!(同yw效果)。4.3.2 粘贴命令命令

功能描述

示例

p(小写)

粘贴缓冲区内容到光标所在位置的下方(行复制)或右侧(字符复制)

复制行后按p,在光标行下方粘贴;复制字符后按p,在光标右侧粘贴

P(大写)

粘贴缓冲区内容到光标所在位置的上方(行复制)或左侧(字符复制)

复制行后按P,在光标行上方粘贴;复制字符后按P,在光标左侧粘贴

示例操作:延续上面的复制示例:

1. 复制第 2 行(yy)后,移动光标到第 3 行尾,按p:在第 3 行下方粘贴第 2 行内容,文本变为:

代码语言:javascript复制Line 1: Hello Vim!

Line 2: This is a test.

Line 3: I love Linux.

Line 4: This is a test.2. 移动光标到第 1 行的Vim!后,按P:在Vim!左侧粘贴之前复制的Vim!,第 1 行变为Line 1: Hello Vim!Vim!。

3. 复制第 1 行(yy)后,移动光标到第 2 行首,按P:在第 2 行上方粘贴第 1 行内容,文本变为:

代码语言:javascript复制Line 1: Hello Vim!Vim!

Line 2: Hello Vim!Vim!

Line 3: This is a test.

Line 4: I love Linux.

Line 5: This is a test.4.4 替换命令 Vim 的替换命令用于修改光标所在位置的字符,常用命令如下:

命令

功能描述

示例

r(小写)

替换光标所在位置的 1 个字符(替换后仍处于命令模式)

光标在a上,按r后输入b,将a替换为b

R(大写)

进入替换模式,持续替换光标所在位置及右侧字符,按ESC返回命令模式

按R后输入abc,替换光标处及右侧 3 个字符

cw

替换光标所在位置到当前单词末尾的字符(替换后进入插入模式)

光标在Hello的e后,按cw输入i,将lo替换为i

c#w

替换光标所在位置开始的#个单词(替换后进入插入模式)

按c2w输入test,替换当前单词及下一个单词

cc

替换光标所在的整行(替换后进入插入模式)

按cc输入New line.,替换当前行内容

#cc

替换光标所在行开始的#行(替换后进入插入模式)

按2cc输入两行新内容,替换当前行及下一行

示例操作:文本内容:Hello Vim! I love Linux!(光标在Vim!的i上)

按r输入o:将i替换为o,文本变为Hello Vom! I love Linux!,仍处于命令模式。按R输入ersion:替换Vom!为Version,文本变为Hello Version I love Linux!,按ESC返回命令模式。移动光标到love的l上,按cw输入like:将love替换为like,文本变为Hello Version I like Linux!,自动进入插入模式,按ESC返回。按cc输入This is a replaced line.:替换当前行,文本变为This is a replaced line.。4.5 撤销与恢复命令命令

功能描述

示例

u

撤销上一次操作

误删字符后按u恢复

#u

撤销上#次操作

按3u撤销最近 3 步操作

Ctrl + r

恢复撤销的操作(反撤销)

撤销后发现操作正确,按Ctrl + r恢复

U(大写)

撤销对当前行的所有修改

对某行多次修改后,按U恢复该行原始状态

示例操作:

打开文本:Hello Vim!。按x删除V,文本变为Hello im!。按u:恢复V,文本变回Hello Vim!。按dd删除该行,文本为空。按u:恢复该行,文本变回Hello Vim!。按Ctrl + r:再次删除该行,文本为空。按u恢复该行,按i输入 I love Vim!,文本变为Hello Vim! I love Vim!。按U:撤销对当前行的所有修改,文本变回Hello Vim!。4.6 其他常用命令命令

功能描述

示例

J(大写)

合并光标所在行与下一行(删除换行符)

两行文本间按J合并为一行

>>

光标所在行向右缩进 1 个制表位

按>>缩进当前行

<<

光标所在行向左缩进 1 个制表位

按<<取消当前行缩进

#>>

光标所在行及下方#-1行向右缩进

按3>>缩进当前行及下方 2 行

#<<

光标所在行及下方#-1行向左缩进

按2<<取消当前行及下方 1 行缩进

.(点号)

重复上一次操作

按x删除字符后,按.重复删除

~(波浪号)

切换光标所在字符的大小写

光标在a上按~变为A,在B上按~变为b

示例操作:文本内容:

代码语言:javascript复制Line 1: Hello Vim!

Line 2: This is line 2.

Line 3: Indent test.光标在第 1 行尾,按J:合并第 1-2 行,文本变为Line 1: Hello Vim!Line 2: This is line 2.。移动光标到第 3 行,按>>:第 3 行向右缩进 1 个制表位,文本变为 Line 3: Indent test.。按<<:第 3 行向左缩进,恢复原样。按x删除test的t,文本变为Line 3: Inden test.。按.:重复删除操作,删除e,文本变为Line 3: Indn test.。移动光标到Indn的I上,按~:变为i,文本变为Line 3: indn test.。五、Vim 末行模式命令集 底行模式(末行模式)通过输入命令实现文件管理、查找替换、行号显示等高级功能,命令以冒号:开头,按回车键执行,常用命令分类详解如下:

5.1 文件管理命令命令

功能描述

示例

:w

保存当前文件

:w → 保存文件,返回命令模式

:w!

强制保存文件(需权限)

只读文件修改后,:w!强制保存

:w [文件名]

另存为指定文件

:w backup.txt → 另存为 backup.txt

:wq

保存并退出 Vim

:wq → 保存文件并退出

:wq!

强制保存并退出

只读文件修改后,:wq!强制保存退出

:q

退出 Vim(文件已保存)

无修改时,:q直接退出

:q!

强制退出(不保存修改)

有修改但无需保存时,:q!强制退出

:x

保存并退出(同:wq,但文件无修改时不更新文件时间戳)

:x → 保存退出,比:wq更高效

:e [文件名]

在当前 Vim 会话中打开另一个文件

:e newfile.txt → 打开 newfile.txt

:e!

放弃当前修改,重新加载当前文件

误修改后,:e!恢复文件原始内容

:saveas [文件名]

另存为指定文件(同:w [文件名])

:saveas copy.txt → 另存为 copy.txt

示例操作:

编辑test.txt后,:w → 保存文件,底部显示"test.txt" 3L, 60C written。想另存为test_backup.txt,:w test_backup.txt → 底部显示"test_backup.txt" 3L, 60C written。继续编辑后,:x → 保存并退出 Vim。重新打开test.txt,误删内容后,:e! → 恢复原始内容。打开newfile.txt,:e newfile.txt → 切换到 newfile.txt 编辑。5.2 行号相关命令命令

功能描述

示例

:set nu

显示行号(nu = number)

:set nu → 每行前显示行号

:set nonu

隐藏行号

:set nonu → 取消行号显示

:set nu!

切换行号显示状态(显示↔隐藏)

:set nu! → 切换行号显示

:[行号]

跳转到指定行

:5 → 跳转到第 5 行

:$

跳转到最后一行

:$ → 跳转到文尾

:1

跳转到第一行

:1 → 跳转到文首

示例操作:

1. 打开test.c文件,:set nu → 显示行号,界面如下:

代码语言:javascript复制 1 #include

2

3 int main()

4 {

5 printf("Hello Vim!\n");

6 return 0;

7 }2. 输入:10 → 若文件只有 7 行,光标跳至第 7 行(最后一行)。

3. 输入:$ → 跳至第 7 行。

4. 输入:set nonu → 隐藏行号,恢复无行号显示。

5.3 查找与替换命令 查找与替换是 Vim 的强大功能之一,支持普通字符查找、正则表达式查找,替换功能支持全局替换、指定范围替换等。

5.3.1 查找命令命令

功能描述

示例

/[关键字]

从光标位置向后查找关键字

/Vim → 向后查找 “Vim”

?[关键字]

从光标位置向前查找关键字

?Hello → 向前查找 “Hello”

n

继续查找下一个匹配项(与查找方向一致)

/Vim后按n → 查找下一个 “Vim”

N

继续查找上一个匹配项(与查找方向相反)

/Vim后按N → 查找上一个 “Vim”

:set ic

查找时忽略大小写(ic = ignore case)

:set ic → 查找 “vim” 时匹配 “Vim”“VIM” 等

:set noic

查找时区分大小写

:set noic → 恢复区分大小写

:set hlsearch

高亮显示所有匹配项

:set hlsearch → 高亮查找结果

:set nohlsearch

取消高亮显示

:set nohlsearch → 取消高亮

:nohl

临时取消高亮(不修改 hlsearch 设置)

:nohl → 临时隐藏高亮,下次查找仍高亮

示例操作:文本内容:

代码语言:javascript复制Hello Vim!

Vim is a powerful editor.

I love Vim and Linux.输入/Vim → 向后查找 “Vim”,光标跳至第一行的 “Vim”。按n → 光标跳至第二行的 “Vim”。按n → 光标跳至第三行的 “Vim”。按n → 底部显示Pattern not found (press RETURN),无更多匹配项。输入?Linux → 向前查找 “Linux”,光标跳至第三行的 “Linux”。按N → 向前查找下一个 “Linux”,无匹配项,底部显示Pattern not found。输入:set ic → 忽略大小写,输入/vim → 匹配所有 “Vim”。输入:set hlsearch → 高亮所有匹配的 “Vim”。输入:nohl → 临时取消高亮。5.3.2 替换命令 替换命令的基本语法:

代码语言:javascript复制:[范围]s/[查找内容]/[替换内容]/[选项]范围:指定替换的范围(如无范围,默认只替换当前行的第一个匹配项)。s:替换命令标识(substitute)。查找内容:需要替换的字符或正则表达式。替换内容:替换后的字符。选项:替换规则(如全局替换、确认替换等)。 常用范围:

n,m:替换第 n 行到第 m 行的匹配项。%:替换整个文件的所有匹配项(等价于1,$)。.:当前行。$:最后一行。 常用选项:

g:全局替换(global),替换指定范围内的所有匹配项(无 g 则只替换每个行的第一个匹配项)。c:确认替换(confirm),替换前提示用户确认(y = 替换,n = 不替换,a = 全部替换,q = 退出替换)。i:忽略大小写(ignore case)。I:区分大小写(默认)。p:替换后显示替换结果。 常用替换命令示例:

命令

功能描述

示例

:s/old/new

替换当前行的第一个 “old” 为 “new”

当前行有 “old old”,替换后为 “new old”

:s/old/new/g

替换当前行的所有 “old” 为 “new”

当前行有 “old old”,替换后为 “new new”

:%s/old/new

替换整个文件每行的第一个 “old” 为 “new”

所有行的第一个 “old” 被替换

:%s/old/new/g

替换整个文件的所有 “old” 为 “new”

全局替换所有 “old”

:3,8s/old/new/g

替换第 3-8 行的所有 “old” 为 “new”

指定行范围全局替换

:%s/old/new/gc

全局替换 “old” 为 “new”,替换前确认

每次替换前提示用户

:%s/old/new/gi

全局替换 “old” 为 “new”,忽略大小写

匹配 “Old”“OLD” 等并替换

示例操作:文本内容(共 5 行):

代码语言:javascript复制1. old text old

2. Old content

3. test old data

4. old old old

5. no match1. 光标在第 2 行,:s/Old/New → 替换第 2 行的第一个 “Old” 为 “New”,第 2 行变为New content。

2. 光标在第 4 行,:s/old/new/g → 替换第 4 行所有 “old” 为 “new”,第 4 行变为new new new。

3. :%s/old/New/g → 全局替换所有 “old” 为 “New”(区分大小写),结果:

代码语言:javascript复制1. New text New

2. Old content

3. test New data

4. new new new

5. no match4. :%s/old/New/gi → 全局替换 “old” 为 “New”,忽略大小写,第 2 行变为New content。

5. :1,3s/old/New/gc → 替换第 1-3 行的 “old” 为 “New”,并提示确认:

代码语言:javascript复制replace with New (y/n/a/q/l/^E/^Y)?按y → 替换当前匹配项。按a → 替换所有剩余匹配项。按q → 退出替换。5.4 多文件编辑命令 Vim 支持同时打开多个文件,通过底行命令切换文件、分屏编辑等。

命令

功能描述

示例

:args [文件1] [文件2] ...

指定多个文件作为编辑对象

:args a.txt b.txt c.txt → 打开 3 个文件

:next(缩写:n)

切换到下一个文件

:n → 切换到下一个文件

:previous(缩写:prev)

切换到上一个文件

:prev → 切换到上一个文件

:first

切换到第一个文件

:first → 切换到第一个文件

:last

切换到最后一个文件

:last → 切换到最后一个文件

:args

查看当前编辑的文件列表

:args → 显示所有打开的文件

:split [文件名](缩写:sp)

水平分屏打开文件

:sp b.txt → 水平分屏打开 b.txt

:vsplit [文件名](缩写:vsp)

垂直分屏打开文件

:vsp c.txt → 垂直分屏打开 c.txt

Ctrl + w + w

在分屏窗口间切换

按Ctrl + w + w → 切换到下一个分屏

:close(缩写:clo)

关闭当前分屏窗口

:clo → 关闭当前分屏

示例操作:

终端中打开多个文件:vim a.txt b.txt c.txt。底行输入:args → 底部显示a.txt b.txt c.txt,当前编辑 a.txt。输入:n → 切换到 b.txt。输入:prev → 切换回 a.txt。输入:sp c.txt → 水平分屏打开 c.txt,上半屏为 a.txt,下半屏为 c.txt。按Ctrl + w + w → 切换到下半屏(c.txt)。输入:vsp b.txt → 垂直分屏打开 b.txt,下半屏左侧为 c.txt,右侧为 b.txt。输入:clo → 关闭当前分屏(b.txt)。输入:wqall → 保存所有文件并退出 Vim。5.5 其他常用底行命令命令

功能描述

示例

:help [命令]

查看指定命令的帮助文档

:help w → 查看:w命令的帮助

:help vim-modes

查看 Vim 所有模式的帮助

:help vim-modes → 显示 12 种模式说明

:cd [目录]

切换 Vim 的当前工作目录

:cd /home/user → 切换到 /home/user

:pwd

显示当前工作目录

:pwd → 显示当前目录路径

:! [终端命令]

在 Vim 中执行终端命令(不退出 Vim)

:!ls → 查看当前目录文件列表

:set fileencoding

查看当前文件编码

:set fileencoding → 显示utf-8

:set fileencoding=utf-8

设置文件编码为 UTF-8

:set fileencoding=utf-8 → 转换文件编码

示例操作:

输入:help dd → 打开dd命令的帮助文档,按q退出帮助。输入:cd /tmp → 切换 Vim 工作目录到 /tmp。输入:pwd → 底部显示/tmp。输入:!date → 执行终端date命令,显示当前时间,按回车键返回 Vim。输入:set fileencoding → 若文件编码为 UTF-8,底部显示fileencoding=utf-8。六、Vim 操作总结 Vim 的操作看似复杂,但核心逻辑围绕 “模式切换” 和 “命令组合” 展开,只要掌握了以下的核心要点,就能熟练运用 Vim 进行高效编辑。

6.1 核心模式切换总结启动 Vim → 命令模式(默认模式)。命令模式 ↔ 插入模式:i/a/o 进入,ESC 返回。命令模式 ↔ 底行模式:: 进入,ESC 或执行命令后返回。可视化模式:命令模式下按v/V/Ctrl + v进入,ESC 返回。 模式切换口诀:启动默认命令模,插入就用 i/a/o,底行模式冒号调,ESC 一键回命令。

6.2 常用命令分类总结6.2.1 快速上手必备命令(入门必记)功能

命令(命令模式)

命令(底行模式)

打开文件

vim 文件名

-

保存文件

-

:w

退出 Vim

-

:q、:wq、:q!

光标移动

h/j/k/l(上下左右)

-

插入文本

i/a/o

-

删除字符

x

-

删除整行

dd

-

复制整行

yy

-

粘贴

p/P

-

撤销操作

u

-

查找关键字

/关键字、?关键字

-

6.2.2 高效编辑常用命令(进阶必备)功能

命令

说明

行首 / 行尾移动

0/$

快速跳至行首 / 行尾

单词移动

w/e/b

按单词高效移动光标

文本翻页

Ctrl + f/b

快速翻页,适合大文件

全局移动

gg/G

跳至文首 / 文尾

全局替换

:%s/old/new/g

批量修改文本

分屏编辑

:sp/:vsp

多文件同时编辑

重复操作

.(点号)

重复上一次有效操作

反撤销

Ctrl + r

恢复误撤销的操作

6.3 操作技巧总结减少方向键使用:命令模式下h/j/k/l移动光标,比方向键更高效(无需移动手位)。善用组合命令:d + 光标移动命令(如dw、d$)实现精准删除,y + 光标移动命令实现灵活复制。批量操作优先用可视化模式:选择文本块后按d删除、y复制、s替换,高效处理批量文本。查找替换加确认:全局替换时加c选项(如:%s/old/new/gc),避免误替换。随时保存:编辑过程中按:w定期保存,防止意外退出导致内容丢失。利用帮助文档:遇到未知命令时,:help 命令查看官方文档,快速掌握用法。6.4 常见问题与解决方案误按Ctrl + s导致 Vim 卡死:按Ctrl + q解锁(终端流控制快捷键冲突)。无法退出 Vim:确保处于命令模式,输入:q(已保存)或:q!(强制退出)。查找时不区分大小写::set ic开启忽略大小写,:set noic恢复。替换后想要撤销:命令模式下按u,撤销底行模式的替换操作。中文乱码::set fileencoding=utf-8设置文件编码为 UTF-8。七、简单 Vim 配置 Vim 支持通过配置文件自定义编辑环境,如设置行号、语法高亮、缩进规则等。配置文件分为系统级配置和用户级配置,用户级配置仅对当前用户生效,推荐优先使用用户级配置。

7.1 配置文件位置系统级配置文件:/etc/vimrc(对所有用户生效,修改需 root 权限)。用户级配置文件:~/.vimrc(当前用户主目录下,仅对当前用户生效,无则创建)。7.2 常用基础配置(必学) 编辑用户级配置文件:

代码语言:javascript复制vim ~/.vimrc 添加以下配置(每行一条配置,可根据需求调整):

代码语言:javascript复制" 基础配置(双引号后为注释)

set nu " 显示行号

set nonu " 注释掉此行则隐藏行号(默认显示)

set syntax on " 开启语法高亮

set autoindent " 自动缩进(新行继承上一行的缩进)

set smartindent " 智能缩进(针对代码的自动缩进优化)

set shiftwidth=4 " 缩进宽度为4个空格

set tabstop=4 " Tab键宽度为4个空格

set expandtab " 将Tab键转换为空格(避免不同编辑器Tab显示不一致)

set softtabstop=4 " 按Tab键时,实际插入4个空格

set hlsearch " 高亮显示查找结果

set incsearch " 增量查找(输入查找关键字时实时匹配)

set ignorecase " 查找时忽略大小写

set smartcase " 当查找关键字包含大写字母时,自动区分大小写

set wrap " 自动换行(长行内容换行显示)

set linebreak " 按单词边界换行(避免单词拆分)

set scrolloff=5 " 光标距离屏幕顶部/底部5行时自动滚动

set mouse=a " 启用鼠标支持(终端中可使用鼠标操作)

set encoding=utf-8 " 设置编码为UTF-8,避免中文乱码

set fileencoding=utf-8 " 设置文件编码为UTF-8

set showmode " 底部状态栏显示当前模式(如-- INSERT --)

set showcmd " 底部状态栏显示当前输入的命令

set laststatus=2 " 始终显示状态栏(显示文件名、行号、列号等信息)

set wildmenu " 命令行补全时显示菜单

set cursorline " 高亮显示光标所在行(方便定位光标)

set cursorcolumn " 高亮显示光标所在列(可选,根据需求开启)

set backup " 开启备份(编辑文件时生成备份文件,后缀为~)

set backupdir=~/.vim/backup/ " 备份文件存放目录(需手动创建)

set undofile " 开启持久化撤销(关闭文件后重新打开仍可撤销操作)

set undodir=~/.vim/undo/ " 撤销历史存放目录(需手动创建)7.3 配置生效与目录创建保存配置文件:编辑完~/.vimrc后,:wq保存退出。创建备份和撤销目录(配置中指定的目录):代码语言:javascript复制mkdir -p ~/.vim/backup ~/.vim/undo 生效配置:

重新打开 Vim,配置自动生效。无需重启 Vim,在 Vim 中执行:source ~/.vimrc,配置立即生效。7.4 配置效果验证 打开一个 C 语言文件test.c,验证配置效果:

代码语言:javascript复制vim test.c 输入以下代码:

代码语言:javascript复制#include

int main()

{

printf("Hello Vim config!\n");

if (1) {

printf("Indent test.\n");

}

return 0;

} 我们可以尝试一下验证以下效果:

显示行号:每行前显示行号。语法高亮:关键字#include、int、printf等显示不同颜色。自动缩进:if语句内的printf自动缩进 4 个空格。Tab 键转换:按 Tab 键插入 4 个空格(而非制表符)。光标行高亮:光标所在行背景高亮。状态栏显示:底部状态栏显示test.c、行号、列号、模式等信息。7.5 进阶配置(插件安装) 原生 Vim 功能有限,通过安装插件可增强代码补全、文件管理、代码片段等功能。下面我为大家提供了以 Vim-Plug 为插件管理器的一些常用插件及安装方法。

7.5.1 安装 Vim-Plug(插件管理器) Vim-Plug 是一款轻量、高效的 Vim 插件管理器,支持插件一键安装、更新、卸载,且支持延迟加载插件以提升 Vim 启动速度。

1. 下载 Vim-Plug(Linux/macOS 系统) 打开终端,执行以下命令下载 Vim-Plug 并安装到用户级插件目录(~/.vim/autoload/):

代码语言:javascript复制# 下载plug.vim到autoload目录(确保目录存在)

curl -fLo ~/.vim/autoload/plug.vim --create-dirs \

https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim 若因网络问题无法访问 GitHub,也可使用国内镜像源(如 Gitee):

代码语言:javascript复制curl -fLo ~/.vim/autoload/plug.vim --create-dirs \

https://gitee.com/mirrors/vim-plug/raw/master/plug.vim2. 验证安装 安装完成后,打开 Vim 并在底行模式输入以下命令:

代码语言:javascript复制:PlugStatus 若安装成功,底部会显示PlugStatus: No plugins defined.(表示尚未配置插件),且无报错信息;若提示E492: Not an editor command: PlugStatus,则说明安装失败,需重新检查命令和网络。

3. Windows 系统安装 若在 Windows 系统(如 cmd、Git Bash)中使用 Vim,执行以下命令:

代码语言:javascript复制# PowerShell中执行

iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |`

ni $HOME/vimfiles/autoload/plug.vim -Force7.5.2 配置常用插件(基础必备) 插件配置需在~/.vimrc中添加特定格式的配置块,遵循 “call plug#begin(插件目录) → 插件列表 → call plug#end()” 的结构。以下是开发中常用的基础插件及配置:

1. 插件配置模板(更新~/.vimrc) 编辑~/.vimrc,在原有基础配置后添加以下内容:

代码语言:javascript复制" ==================== Vim-Plug插件配置 ====================

" 定义插件安装目录(默认~/.vim/plugged,可自定义)

call plug#begin('~/.vim/plugged')

" 1. 代码补全插件:YouCompleteMe(支持多语言语法补全)

" 特点:实时补全、支持C/C++/Python/Go等多种语言、可配置语法检查

Plug 'ycm-core/YouCompleteMe', { 'do': './install.py --all' }

" --all表示安装所有语言支持,若仅需C/C++支持,可改为--clang-completer

" 2. 文件管理器插件:NERDTree(可视化目录树)

" 特点:支持鼠标操作、目录快速导航、文件类型图标显示

Plug 'preservim/nerdtree'

Plug 'ryanoasis/vim-devicons' " 配合NERDTree显示文件类型图标(需终端支持图标)

" 3. 代码片段插件:vim-snippets(预设常用代码片段)

" 特点:支持C/C++/Python/Shell等语言、可自定义片段、Tab键触发补全

Plug 'honza/vim-snippets'

Plug 'SirVer/ultisnips' " 代码片段引擎(需与vim-snippets配合使用)

" 4. 语法检查插件:ALE(异步语法检查)

" 特点:实时检查代码语法错误、支持多语言、可集成linter工具(如clang-tidy、pylint)

Plug 'dense-analysis/ale'

" 5. 代码注释插件:vim-commentary(快速注释/取消注释)

" 特点:支持单行/多行注释、不同语言自动适配注释格式(//、#、/* */等)

Plug 'tpope/vim-commentary'

" 6. 光标移动增强:vim-easymotion(快速跳转光标)

" 特点:通过快捷键+字符组合快速跳转到任意位置,提升大文件导航效率

Plug 'easymotion/vim-easymotion'

" 插件配置结束

call plug#end()

" ==================== 插件使用配置(根据插件需求添加) ====================

" ------------------- NERDTree配置 -------------------

map :NERDTreeToggle " 按F3键快速打开/关闭目录树

autocmd VimEnter * NERDTree " Vim启动时自动打开NERDTree

autocmd BufEnter * if winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | q | endif " 关闭最后一个窗口时自动退出Vim

let g:NERDTreeShowHidden=1 " 显示隐藏文件(如.gitignore、.vimrc)

let g:NERDTreeDevIconsEnable=1 " 启用文件图标显示

" ------------------- ultisnips配置 -------------------

let g:UltiSnipsExpandTrigger='' " 按Tab键触发代码片段补全

let g:UltiSnipsJumpForwardTrigger='' " 按Ctrl+j跳转到片段下一个占位符

let g:UltiSnipsJumpBackwardTrigger='' " 按Ctrl+k跳转到片段上一个占位符

let g:UltiSnipsEditSplit='vertical' " 垂直分屏编辑自定义片段

" ------------------- ALE配置 -------------------

let g:ale_lint_on_save=1 " 保存文件时自动进行语法检查

let g:ale_lint_on_enter=1 " 打开文件时自动进行语法检查

let g:ale_lint_on_text_changed='always' " 文本变化时实时检查

let g:ale_sign_error='✗' " 错误标识(可自定义符号)

let g:ale_sign_warning='⚠' " 警告标识(可自定义符号)

" 为C/C++配置clang-tidy作为linter(需先安装clang-tidy:sudo yum install clang-tidy 或 sudo apt install clang-tidy)

let g:ale_linters={'c': ['clang-tidy'], 'cpp': ['clang-tidy']}

" ------------------- vim-commentary配置 -------------------

" 按gc注释/取消注释(默认快捷键,无需额外配置,示例:

" - 命令模式下:gc + 光标移动(如gc3j注释当前行及下方2行)

" - 可视化模式下:选中文本后按gc快速注释)

" ------------------- vim-easymotion配置 -------------------

map s (easymotion-overwin-f) " 按\s(\为Leader键)搜索字符并跳转

let g:EasyMotion_smartcase=1 " 搜索时智能区分大小写(同Vim基础配置)2. 安装插件(关键步骤) 配置完成后,保存~/.vimrc并重新打开 Vim,在底行模式执行以下命令安装插件:

代码语言:javascript复制:PlugInstall 执行后会显示插件安装进度界面,左侧为插件列表,右侧为安装状态(Installed表示安装成功)。安装过程中需等待依赖下载(如 YouCompleteMe 需编译安装,耗时较长,需保持网络畅通)。

安装成功:底部会显示Finished. X plugins installed.(X 为插件数量)。安装失败:查看右侧报错信息(常见原因:网络问题、依赖缺失),根据提示修复(比如安装 YouCompleteMe 需要cmake和python3-dev,可通过sudo yum install cmake python3-devel或sudo apt install cmake python3-dev安装依赖)。7.5.3 插件使用实战示例1. NERDTree(文件管理器)打开 / 关闭:按F3键快速切换目录树显示状态,启动 Vim 时会自动打开。操作示例: 打开test.c文件:vim test.c,左侧自动显示 NERDTree 目录树。用方向键导航到test.c文件,按Enter键打开文件。按o键在当前窗口打开文件,按i键水平分屏打开,按s键垂直分屏打开。按R键刷新目录树(新增 / 删除文件后刷新),按a键在当前目录新建文件。2. 代码片段(ultisnips + vim-snippets) 以 C 语言为例,快速生成main函数片段:

新建test.c文件:vim test.c。

进入插入模式(按i),输入main,按Tab键触发片段补全,自动生成以下代码:

代码语言:javascript复制int main(int argc, char *argv[]) {

/* code */

return 0;

}光标默认在/* code */处,输入代码后按Ctrl + j跳转到return 0;行(片段占位符跳转)。

自定义片段:按Ctrl + n新建文件,输入mysnippet.snippets,添加自定义片段(如 C 语言循环片段):

代码语言:javascript复制for (int ${1:i} = 0; ${1:i} < ${2:count}; ${1:i}++) {

${3:// code}

}

保存后,在 C 文件中输入for并按Tab,即可触发自定义循环片段。

3. 语法检查(ALE) 以 C 语言的语法错误检查为例:

在test.c中输入错误代码:int main() { printf("Hello"); }(缺少#include )。保存文件(:w),ALE 会自动检查并在左侧显示警告标识(⚠)。将光标移动到printf处,底部状态栏会显示错误信息:warning: implicit declaration of function 'printf' is invalid in C99 [-Wimplicit-function-declaration]。添加#include 后保存,警告标识自动消失,说明语法检查生效。4. 快速注释(vim-commentary)单行注释:光标在目标行,命令模式下按gcc,该行会添加//注释(C/C++)或#注释(Shell/Python)。多行注释:光标在起始行,按gc3j(注释当前行及下方 2 行),或可视化模式下选中多行后按gc。取消注释:对已注释的行执行相同命令(如gcc),即可取消注释。7.5.4 插件管理(更新、卸载、查看) Vim-Plug 提供便捷的插件管理命令,在底行模式执行即可:

命令

功能描述

示例

:PlugInstall

安装配置文件中新增的插件

新增插件后执行,自动下载安装

:PlugUpdate

更新所有已安装的插件

插件有新版本时执行,更新到最新版

:PlugUpgrade

更新 Vim-Plug 本身

提升插件管理器稳定性和功能

:PlugClean

卸载配置文件中已删除的插件

删除call plug#begin()和call plug#end()之间移除的插件

:PlugStatus

查看所有插件的安装状态

显示插件是否已安装、是否有更新、安装路径等

示例操作:

更新所有插件::PlugUpdate,执行后会显示更新进度,完成后底部提示更新结果。卸载插件:在~/.vimrc中删除对应插件的Plug语句(如删除Plug 'preservim/nerdtree'),执行:PlugClean,按y确认卸载,即可删除 NERDTree 插件。查看插件状态::PlugStatus,底部显示所有插件的状态(如[OK] nerdtree表示安装正常,[UPDATED] youcompleteme表示有更新)。7.5.5 注意事项依赖安装:部分插件需系统依赖支持(如 YouCompleteMe 需cmake、python3-dev,ALE 需clang-tidy/pylint),安装插件前需先通过yum或apt安装依赖,否则插件无法正常工作。终端兼容性:文件图标(vim-devicons)需终端支持 Unicode 图标(如 Alacritty、Kitty、Windows Terminal),若使用默认终端(如 CentOS 的 GNOME Terminal),可能无法显示图标,可注释let g:NERDTreeDevIconsEnable=1关闭图标功能。性能优化:插件过多可能导致 Vim 启动变慢,可通过以下方式优化: 对非必需插件使用延迟加载(Vim-Plug 支持Plug '插件名', { 'on': '命令' },仅在执行指定命令时加载插件)。关闭插件的冗余功能(如 ALE 关闭实时检查,仅保存时检查)。配置备份:~/.vimrc和~/.vim目录包含个人所有配置和插件,建议定期备份(如tar -czf vim_config_backup.tar.gz ~/.vimrc ~/.vim),更换设备时可直接恢复。 通过以上配置,Vim 将从基础编辑器升级为功能强大的 “轻量级 IDE”,支持代码补全、语法检查、文件管理等核心开发需求。后续大家也可以根据个人开发语言(如 Python、Go、Java)和习惯,进一步添加专项插件(如 Python 的jedi-vim、Go 的vim-go等),持续优化编辑体验。

总结 本期博客为大家详细介绍了Linux中的vim编辑器的使用全指南,vim编辑器是大家无论在学习Linux过程中,还是日后在企业工作中所必须掌握的一个Linux软件,熟练使用之后可以极大提高大家的工作效率。如果本期博客对大家有帮助的话,欢迎大家在评论区留言,也拜托大家点赞收藏一下,大家的支持就是我最大的动力!

上一篇: 古剑奇谭饰品哪个好 下一篇: 42号麻将

相关文章

字谜猜猜看,探索汉字丌的奥秘

字谜猜猜看,探索汉字丌的奥秘

excel直流电的符号怎么打

excel直流电的符号怎么打

优秀PHP开源项目集合

优秀PHP开源项目集合

中国信徒布道会─《中信》月刊(简): 我为什么是基督徒?/萧亮明

中国信徒布道会─《中信》月刊(简): 我为什么是基督徒?/萧亮明

揭示天秤男消失背后的三大真相,让你不再懵懂!

揭示天秤男消失背后的三大真相,让你不再懵懂!

BB战士三国传机体

BB战士三国传机体