【Linux基础开发工具 (三)】Vim从入门到精通(下):效率翻倍的编辑技巧与个性化配置攻略

🔥艾莉丝努力练剑:个人主页

专栏传送门:《C语言》《数据结构与算法》C/C++干货分享&学习过程记录Linux操作系统编程详解笔试/面试常见算法:从基础到进阶

⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平


🎬艾莉丝的简介:


🎬艾莉丝的Linux专栏简介:


目录

前情提示

[1 vi / vim键盘图](#1 vi / vim键盘图)

[2 vim这么多命令想不起来怎么办](#2 vim这么多命令想不起来怎么办)

[3 参考资料](#3 参考资料)

[4 vim的配置项都有哪些?](#4 vim的配置项都有哪些?)

[2 ~> vim编辑器](#2 ~> vim编辑器)

[2.4 vim命令(续)](#2.4 vim命令(续))

[2.4.11 大小写切换:shift + ` = ~](#2.4.11 大小写切换:shift + ` = ~)

[2.4.12 r:对光标所在位置字符进行替换](#2.4.12 r:对光标所在位置字符进行替换)

[2.4.13 替换模式](#2.4.13 替换模式)

[2.4.14 命令](#2.4.14 命令)

[2.5 vim编辑器已知的五种模式(含切换快捷键)](#2.5 vim编辑器已知的五种模式(含切换快捷键))

[2.6 批量化注释和去注释](#2.6 批量化注释和去注释)

[2.6.1 进入Insert模式,逐个注释](#2.6.1 进入Insert模式,逐个注释)

[2.6.2 视图模式下进行区域选择注释](#2.6.2 视图模式下进行区域选择注释)

[2.7 底行模式](#2.7 底行模式)

[2.7.1 底行模式的基本命令](#2.7.1 底行模式的基本命令)

[2.7.2 具体命令解释](#2.7.2 具体命令解释)

[2.7.3 分屏对比文件](#2.7.3 分屏对比文件)

[2.7.4 替换的命令](#2.7.4 替换的命令)

[2.8 两个实用技巧](#2.8 两个实用技巧)

[2.8.1 vim XXX.x +n](#2.8.1 vim XXX.x +n)

[2.8.2 !X](#2.8.2 !X)

[2.9 解决问题](#2.9 解决问题)

[2.9.1 vim异常退出的问题](#2.9.1 vim异常退出的问题)

[2.9.2 给用户进行赋权,添加到"白名单"](#2.9.2 给用户进行赋权,添加到“白名单”)

[2.10 vim的配置](#2.10 vim的配置)

[2.10.1 CentOs版本 / Ubuntu版本的配置安装](#2.10.1 CentOs版本 / Ubuntu版本的配置安装)

[2.10.1.1 CentOs版本的配置安装](#2.10.1.1 CentOs版本的配置安装)

[2.10.1.2 Ubuntu版本的配置安装](#2.10.1.2 Ubuntu版本的配置安装)

[2.10.2 最佳实践:.vimrc属于单个用户,配置也只配置单个用户](#2.10.2 最佳实践:.vimrc属于单个用户,配置也只配置单个用户)

[2.10.3 vim的配置项都有哪些?](#2.10.3 vim的配置项都有哪些?)

[2.10.3.1 创建和编辑配置文件](#2.10.3.1 创建和编辑配置文件)

[2.10.3.2 基本设置](#2.10.3.2 基本设置)

[2.10.3.3 快捷键映射](#2.10.3.3 快捷键映射)

[2.10.3.4 插件管理(使用 Vim-plug)------不建议安装插件(麻烦)](#2.10.3.4 插件管理(使用 Vim-plug)——不建议安装插件(麻烦))

[2.10.3.5 插件配置](#2.10.3.5 插件配置)

[2.10.3.6 实用函数](#2.10.3.6 实用函数)

[2.10.3.7 插件的安装和使用](#2.10.3.7 插件的安装和使用)

[2.10.3.8 常用命令速查](#2.10.3.8 常用命令速查)

[3.10.3.9 高亮当前行](#3.10.3.9 高亮当前行)

博主手记

结尾


前情提示

1 vi / vim键盘图

2 vim这么多命令想不起来怎么办

vim大大小小几百个命令,怎么记得住?其实,就像汉字或者英文单词虽然有上万个,但是常用的也只有几千个,记住那些常用的就行了,真的记不住怎么办------

3 参考资料

链接:vim从入门到精通

4 vim的配置项都有哪些?



2 ~> vim编辑器

2.4 vim命令(续)

2.4.11 大小写切换:shift + ` = ~

shift + ` = ~大小写切换如下图所示------

2.4.12 r:对光标所在位置字符进行替换

r:对光标所在位置字符进行替换;

n + r:对光标所在位置往后字符进行批量化替换。

2.4.13 替换模式

shift + r = R:切换到替换模式。

2.4.14 命令

2.5 vim编辑器已知的五种模式(含切换快捷键)

由此可见,命令模式是vim模式的核心

2.6 批量化注释和去注释

2.6.1 进入Insert模式,逐个注释

命令模式下按"i"进入Insert模式,但是这种方式太矬了,pass!

2.6.2 视图模式下进行区域选择注释

视图模式使得区域选择的时候是可视化的!

shift + g = G......:利用光标移动快速进行区域选择。

2.7 底行模式

使用底行模式之前,记住先按ESC确定你已经处于正常模式,再按:(冒号)即可进入底行模式。

底行模式本质上也是命令模式的一种,前文说过:底行模式本质上是命令模式的子集

记住啦------要保证在命令模式下进入底行模式------在命令模式下按**:(shift + ;)**进入底行模式,如果不确定在什么模式下的话直接无脑ESC就行啦。

2.7.1 底行模式的基本命令

2.7.2 具体命令解释

: / shift + ;:进入底行模式; w(类似于word文档中的Ctrl + S):保存;

q:退出; !:强制; q!:强制退出(会丢失数据); wq:保存并退出;

w!:强制保存; !gcc XXX.c:编译XXX.c后会不会退出vim,在底行模式中直接执行命令;

!man xxx(如fgets):查看手册(q退出返回);

shift zz / ZZ:在命令模式中退出vim(不进入底行模式也可以退出)------不建议,容易误操作;

set nu:底行模式下,输入set nu后,会在文件中的每一行前面列出行号;

set nonu:底行模式下,输入set nonu后,会去掉(文件中)前面列出的行号;

n(next):如果有多个部分字符相同的字符就可以用n来回跳转检索,即多个字符切换;

/[要搜索的关键词]:高亮匹配项目,依次查看匹配项。

2.7.3 分屏对比文件

光标移动:Ctrl ww(在多个窗口间按顺序来回切换)------

因为光标只有一个,光标在哪个区域,我们就在哪个屏幕区域进行编辑------

底行模式中如果你打开了一个不存在的文件,没有编辑直接退出,该文件不会被创建;但是,如果你按w保存了,vim会自动给你新建该文件。

2.7.4 替换的命令

底行模式中,%s/被替换的字符/新的内容(要替换进来的内容)/g:用新内容替换指定内容。

2.8 两个实用技巧

2.8.1 vim XXX.x +n

光标:上次退出的位置 = 下次进入的位置 + 编辑位置

vim test.c +5:光标定位到第五行;也就是说,如果代码报错了(一般会报具体的行号),直接可以定位到错误的位置或者错误的位置附近------

2.8.2 !X

!X:匹配最近的以X为开头的命令。

我们就以test.c为例:(sudo) vim test.c即!v------

sudo vim test.c即!s------

2.9 解决问题

2.9.1 vim异常退出的问题

因为网络问题或者其它原因,vim没有正常关闭(XShell退出),vim闪退了,这个时候不用担心,因为和Windows的WPS、Word文档退出未保存会有一个隐藏文件保存更改内容一样,Linux的vim也会创建一个临时文件(即.XXX.x.swp),这个文件会保存最近一次执行的结果

按 r 恢复------

保存了最近一次执行的结果------

2.9.2 给用户进行赋权,添加到"白名单"

艾莉丝这里重新创建一个新的普通用户------

现在我们新创建的的普通用户Alice就可以sudo提权了,我们实践一下------

2.10 vim的配置

大家有没有感觉现在的vim"很挫"啊?没有命令补齐...为什么这么挫还能被称为是"文本编辑器之神"?

~(家目录)下,手动创建一个.vimrc(隐藏文件)------在自己的账号上。

系统只有一个vim程序哦!

2.10.1 CentOs版本 / Ubuntu版本的配置安装

2.10.1.1 CentOs版本的配置安装

在码云(gitee)上面搜索VimForCpp:VimForCpp

在Xshell中执行指令(想在哪个用户下让vim配置生效,就在哪个用户下执行这个指令,强烈**"不推荐"直接在root下执行**),只要将下面这段代码直接复制到你的普通用户下即可开始下载------

bash 复制代码
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

如下图所示------

安装过程直接刷屏了,这里简单展示一下冰山一角------

注意:这个插件目前只支持 Centos7 x86_64,后面会考虑 Ubuntu 等发行版的支持。

如果想要卸载这款插件,只要在安装了 VimForCpp 的用户下执行以下命令即可------

bash 复制代码
bash ~/.VimForCpp/uninstall.sh

自动补全(语义级别补全+模糊匹配)------

头文件补全------

语法诊断------

跳转到变量 / 函数定义,跳转到头文件------

函数列表------

函数查找------

文件列表------

文件查找------

2.10.1.2 Ubuntu版本的配置安装

在码云(gitee)上面搜索vimplus:

2.10.2 最佳实践:.vimrc属于单个用户,配置也只配置单个用户

各配各的,我就只配置我自己的。

补齐默认是2,这个是阿里巴巴的补齐,我们用VS2022比较习惯了,自动补齐是4,直接用我们前面学到了[n + shift + g(G)]我们改成4就可以了------

2.10.3 vim的配置项都有哪些?

我们可以问一下大模型,艾莉丝这里问的是DeepSeek,提示词如下------

帮我形成一个vim的基本配置命令清单

2.10.3.1 创建和编辑配置文件
bash 复制代码
# 创建 Vim 配置文件
vim ~/.vimrc

# 或者如果已经有配置文件,直接编辑
vim ~/.vimrc
2.10.3.2 基本设置
bash 复制代码
" 基本设置
set nocompatible        " 不使用 Vi 兼容模式
set number              " 显示行号
set relativenumber      " 显示相对行号
set cursorline          " 高亮当前行
set showcmd             " 显示输入的命令
set wildmenu            " 命令行自动补全
set showmatch           " 显示匹配的括号
set scrolloff=5         " 光标上下保留5行

" 缩进设置
set autoindent          " 自动缩进
set smartindent         " 智能缩进
set tabstop=4           " Tab宽度为4空格
set shiftwidth=4        " 自动缩进宽度为4空格
set expandtab           " 将Tab转换为空格
set softtabstop=4       " 退格键一次删除4个空格

" 搜索设置
set ignorecase          " 搜索忽略大小写
set smartcase           " 如果有大写字母,则区分大小写
set incsearch           " 实时搜索
set hlsearch            " 高亮搜索结果

" 编码设置
set encoding=utf-8      " 编码设置
set fileencoding=utf-8

" 其他实用设置
syntax on               " 语法高亮
filetype on             " 检测文件类型
filetype plugin on      " 加载文件类型插件
filetype indent on      " 加载文件类型缩进
set backspace=2         " 退格键可以删除任何内容
set mouse=a             " 启用鼠标支持
2.10.3.3 快捷键映射
bash 复制代码
"  leader键设置为空格
let mapleader = " "

" 快速保存和退出
nmap <leader>w :w<CR>
nmap <leader>q :q<CR>
nmap <leader>wq :wq<CR>

" 清除搜索高亮
nmap <leader>h :nohlsearch<CR>

" 分屏快捷键
nmap <leader>v :vsplit<CR>
nmap <leader>s :split<CR>

" 切换分屏
nmap <C-h> <C-w>h
nmap <C-j> <C-w>j
nmap <C-k> <C-w>k
nmap <C-l> <C-w>l

" 调整分屏大小
nmap <C-left> <C-w><
nmap <C-right> <C-w>>
nmap <C-up> <C-w>+
nmap <C-down> <C-w>-
2.10.3.4 插件管理(使用 Vim-plug)------不建议安装插件(麻烦)

安装 Vim-plug------

bash 复制代码
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

在 .vimrc 中添加插件------

bash 复制代码
" 插件列表开始
call plug#begin('~/.vim/plugged')

" 主题插件
Plug 'morhetz/gruvbox'
Plug 'joshdick/onedark.vim'

" 状态栏
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'

" 文件树
Plug 'preservim/nerdtree'

" 语法高亮增强
Plug 'sheerun/vim-polyglot'

" 自动补全
Plug 'neoclide/coc.nvim', {'branch': 'release'}

" 注释插件
Plug 'tpope/vim-commentary'

" 括号自动补全
Plug 'jiangmiao/auto-pairs'

call plug#end()

没有自动补齐、高亮等是原始vim"很挫"的重要原因。

2.10.3.5 插件配置
bash 复制代码
" 主题设置
colorscheme gruvbox
set background=dark

" NERDTree 设置
map <C-n> :NERDTreeToggle<CR>
let NERDTreeShowHidden=1

" Airline 设置
let g:airline#extensions#tabline#enabled = 1
let g:airline_theme='simple'

" 注释插件快捷键
nmap <leader>/ gcc
vmap <leader>/ gc
2.10.3.6 实用函数
bash 复制代码
" 快速打开 .vimrc
nmap <leader>rc :e ~/.vimrc<CR>

" 重新加载 .vimrc
nmap <leader>so :source ~/.vimrc<CR>

" 自动补全括号和引号
inoremap ( ()<Left>
inoremap [ []<Left>
inoremap { {}<Left>
inoremap ' ''<Left>
inoremap " ""<Left>
2.10.3.7 插件的安装和使用

1、保存配置:将上述配置复制到 ~/.vimrc

2、安装插件:打开 Vim,执行 :PlugInstall;

3、重新加载:执行 :source ~/.vimrc 或重启 Vim。

2.10.3.8 常用命令速查
bash 复制代码
:help option          " 查看选项帮助
:set option?          " 查看选项当前值
:version              " 查看 Vim 版本和特性
:scriptnames          " 查看已加载的脚本
3.10.3.9 高亮当前行

在 Vim 中启用和配置当前行高亮的方法如下所示------

基本当前行高亮------

bash 复制代码
" 启用当前行高亮
set cursorline

" 缩写形式
set cul

关闭当前行高亮------

bash 复制代码
" 关闭当前行高亮
set nocursorline

" 缩写形式
set nocul

如果uu对其它启用和配置"高亮当前行"的命令感兴趣,可以直接用提示词:高亮当前行


博主手记

下面就是艾莉丝在学习vim这部分知识时的手写笔记啦,大家可以了解一下------


结尾

uu们,本文的内容到这里就全部结束了,艾莉丝再次感谢您的阅读!

往期回顾:

【Linux基础开发工具 (二)】详解Linux文本编辑器:Vim从入门到精通------完整教程与实战指南(上)

结语:本期我们在前一篇博客的基础上继续深入学习了Linux中的指令篇,希望对学习Linux指令相关内容的uu有所帮助,不要忘记给博主"一键四连"哦!

🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡

૮₍ ˶ ˊ ᴥ ˋ˶₎ა

相关推荐
草莓熊Lotso2 小时前
C++ STL set 系列完全指南:从底层原理、核心接口到实战场景
开发语言·c++·人工智能·经验分享·网络协议·算法·dubbo
鹿鸣天涯3 小时前
国产服务器操作系统迁移指南
运维·服务器
flypwn3 小时前
TFCCTF 2025 WebLess题解
服务器·前端·数据库
Crazy________3 小时前
40nginx从单节点 HTTPS 到集群负载均衡
linux·运维·服务器
ttthe_MOon3 小时前
LVS-NAT 模式负载均衡集群部署与配置指南
运维·负载均衡·lvs
悟空码字6 小时前
部署Spring Boot项目到Linux服务器数据盘
linux·spring boot·部署·数据盘
AA陈超7 小时前
ASC学习笔记0014:手动添加一个新的属性集
c++·笔记·学习·ue5
Run_Teenage7 小时前
C++:智能指针的使用及其原理
开发语言·c++·算法
Once_day8 小时前
Linux之rsyslog(6)RainerScript
linux·服务器·syslog