linux运维一天一个shell命令之vim详解

前言:

在日常运维工作中,掌握好 Vim 的使用可以极大地提高工作的效率。Vim 作为一个强大的文本编辑器,广泛应用于各种运维场景

一、定义

Vim 是一个非常强大的文本编辑器,在 Unix/Linux 环境中非常流行。它具有许多高级功能和快捷键,适合编写代码、编辑配置文件等。

1、特点:

  • 高级文本编辑:支持模式编辑(命令模式、插入模式、可视模式等),功能强大。
  • 可扩展性:通过插件进行功能扩展,常用插件管理器如 vim-plug。
  • 效率高:熟练使用后,编辑效率极高,适合大量文本处理和编程。
  • 跨平台使用:不仅在 Linux 上使用广泛,其他系统也有安装包。

2、安装:

bash 复制代码
ubuntu:
apt-get install vim

ceontos:
yum install vim*

3、启动和退出 Vim

3.1、启动 Vim 并打开文件:

bash 复制代码
vim filename

3.2、退出 Vim:

bash 复制代码
在普通模式下,输入 :q 退出。如果有未保存的更改,Vim 会提示你。
输入 :q! 强制退出且不保存更改。
输入 :wq 或 :x 保存更改并退出。

二、vim的使用

1、Vim 的几种主要模式:

  • 普通模式(Normal Mode):这是 Vim 启动后的默认模式。在这个模式下,你可以进行导航和操作文本。
  • 插入模式(Insert Mode):在这个模式下,你可以像普通编辑器一样输入文本。
  • 命令模式(Command Mode):在这个模式下,你可以输入命令,如保存文件、退出 Vim、搜索等
  • 可视模式(Visual Mode):在这个模式下,允许你选择文本块并对其执行操作

2、普通模式(Normal Mode)

2.1、进入普通模式:

启动vim 后默认进入普通模式
vim /filename

2.2、普通模式下的操作

  • 导航
bash 复制代码
h:左移一个字符
j:下移一行
k:上移一行
l:右移一个字符
w:移动到下一个单词开头
b:移动到前一个单词开头
0:移动到行首
$:移动到行尾
gg:移动到文件开头
G:移动到文件结尾
  • 编辑
bash 复制代码
i:进入插入模式,在光标前插入文本
a:进入插入模式,在光标后插入文本
o:在当前行下方插入新行并进入插入模式
O:在当前行上方插入新行并进入插入模式
x:删除光标所在字符
dd:删除当前行
yy:复制当前行
p:粘贴复制或剪切的内容
  • 撤销和重做
bash 复制代码
u:撤销
Ctrl + r:恢复撤销的操作
  • 搜索
bash 复制代码
/pattern:向下搜索 pattern
?pattern:向上搜索 pattern
n:跳转到下一个匹配项
N:跳转到上一个匹配项

3、插入模式

3.1、进入插入模式

在普通模式下按 i、a、o 或 O 进入插入模式。

bash 复制代码
i:在光标前插入。
I:在行首插入。
a:在光标后插入。
A:在行尾插入。
o:在当前行的下方插入新行并进入插入模式。
O:在当前行的上方插入新行并进入插入模式。

3.2、退出插入模式

要退出插入模式并返回普通模式,可以按 Esc 键

4、可视模式

4.1、分类

  • 字符可视模式(Character-wise Visual Mode) 字符可视模式允许你逐字符选择文本。
  • 行可视模式(Line-wise Visual Mode) 行可视模式允许你逐行选择文本。
  • 块可视模式(Block-wise Visual Mode) 块可视模式允许你选择矩形文本块

4.2、进入可视模式

在普通模式下,进入可视模式的方法如下:

bash 复制代码
- v:进入字符可视模式(Character-wise Visual Mode)
- V:进入行可视模式(Line-wise Visual Mode)
- Ctrl + v:进入块可视模式(Block-wise Visual Mode)

4.3、字符可视模式下的操作

4.3.1、选择文本:

使用导航键(如 h、j、k、l)选择文本。

4.3.2、编辑文本
bash 复制代码
d:删除选中的文本
y:复制选中的文本
c:修改选中的文本(删除并进入插入模式)
>:增加缩进
<:减少缩进
~:切换选中字符的大小写
U:将选中字符转换为大写
u:将选中字符转换为小写

4.4、行可视模式

4.4.1、选择行:

使用导航键(如 j、k)选择行。

4.4.2、编辑行
bash 复制代码
d:删除选中的行
y:复制选中的行
c:修改选中的行(删除并进入插入模式)
>:增加缩进
<:减少缩进

4.5、块可视模式

4.5.1、选择块

使用导航键(如 h、j、k、l)选择块

4.5.2、编辑块
bash 复制代码
d:删除选中的块
y:复制选中的块
c:修改选中的块(删除并进入插入模式)
I:在选中块的每一行前插入文本
A:在选中块的每一行后插入文本

4.6、退出可视模式

按 Esc 键。退出可视模式并返回普通模式

5、命令行模式

用于执行各种命令,例如保存文件、退出 Vim、搜索和替换文本等

5.1、进入命令行模式

bash 复制代码
: :执行命令
/:向前搜索
?:向后搜索
!:执行外部命令

5.2、命令操作

5.2.1、文件操作
bash 复制代码
:w:保存文件
:w filename:另存为指定文件
:q:退出 Vim
:q!:强制退出(不保存更改)
:wq:保存并退出
:x 或 ZZ:保存并退出
5.2.2、编辑操作
bash 复制代码
:e filename:编辑指定文件
:bn 或 :bnext:切换到下一个缓冲区
:bp 或 :bprev:切换到上一个缓冲区
:bd 或 :bdelete:删除当前缓冲区
5.2.3、搜索和替换
bash 复制代码
/pattern:向前搜索匹配 pattern 的文本
?pattern:向后搜索匹配 pattern 的文本
n:跳到下一个匹配项
N:跳到上一个匹配项
:s/old/new:将当前行的第一个 old 替换为 new
:s/old/new/g:将当前行的所有 old 替换为 new
:%s/old/new/g:将整个文件中的所有 old 替换为 new
:%s/old/new/gc:将整个文件中的所有 old 替换为 new,并确认每一次替换
5.2.4、设置选项
bash 复制代码
:set option:启用指定选项
:set nooption:禁用指定选项
:set number 或 :set nu:显示行号
:set nonumber 或 :set nonu:隐藏行号
:set tabstop=4:设置 Tab 宽度为 4 个空格
:set shiftwidth=4:设置自动缩进宽度为 4 个空格
:set expandtab:使用空格代替 Tab
:set noexpandtab:使用 Tab 而不是空格
5.2.5、命令行模式下的快捷键
bash 复制代码
<Up> / <Down>:浏览命令历史
<Left> / <Right>:在命令行中左右移动光标
<Ctrl + b>:移动到命令行的开头
<Ctrl + e>:移动到命令行的结尾
<Ctrl + w>:删除光标前的一个单词
<Ctrl + u>:删除光标前的所有文本

三、高频操作示例:

1、示例文档为默认nginx 配置文件,进入普通模式

root@xxx:~# /etc/nginx/nginx.conf

2、显示行号

bash 复制代码
:set nu

2、文本替换

bash 复制代码
:%s/SSL/ssl/g             ##全部替换
:%s/SSL/ssl              ##将当前行的第一个 old 替换为 new

3、文本查找

bash 复制代码
/SSL         ##查找SSL字符串

##搜索操作
n键:跳到下一个匹配项
N键:跳到上一个匹配项

4、批量删除行

光标放在需要删除的行

bash 复制代码
4dd    ##删除光标所在行开始的4行

5、编辑撤销

bash 复制代码
u键

6、恢复撤销的操作

bash 复制代码
Ctrl + r  组合键

7、批量注释

7.1 使用块可视模式批量注释

  • 进入块可视模式:按 Ctrl + v。
  • 选择要注释的列:使用 h、j、k、l 键。
  • 插入注释符号:按 Shift + i,或者大写I,输入注释符号(例如 #),然后按 Esc 键。这将在所选列的每一行前插入注释符号。

7.2 其他可视模式操作下的替换命令

  • 进入字符可视模式:按 v或者V
  • 选择要注释的文本,
  • 批量注释:按 :,然后输入 s/^/#/ 回车

8.批量复制粘贴

普通模式下

bash 复制代码
光标放在复制行首行
依次按4yy键    ##复制光标所在行的4行

然后光标放在需要插入行:
按p键即可粘贴 

四、vim终端命令

1、-h 或 --help:显示帮助信息并退出。

bash 复制代码
vim -h
vim --help

2、-v:以 Vi 模式启动 Vim。

bash 复制代码
vim -v

3 、-o [number]:打开多个文件,并按水平分割窗口显示。如果指定了 number,则分割为指定数量的窗口。

bash 复制代码
vim -o file1 file2 file3
vim -o3 file1 file2 file3

4、-O [number]:打开多个文件,并按垂直分割窗口显示。如果指定了 number,则分割为指定数量的窗口。

bash 复制代码
vim -O file1 file2 file3
vim -O3 file1 file2 file3

5、-c {command}:启动 Vim 后执行指定的命令。

bash 复制代码
vim -c 'echo "Hello, Vim!"'

6、+ 或 +{command}:启动 Vim 后移至文件末尾或执行指定的命令。

bash 复制代码
vim + file.txt
vim +5 file.txt  # 移动到文件的第 5 行

7、-s {script}:启动 Vim 后执行指定的脚本文件。

bash 复制代码
vim -s script.vim

8、-d:启动 Vim 的差异模式(diff),用于比较文件的差异。

bash 复制代码
vim -d file1 file2

9、-p [number]:打开多个文件,并在标签页中显示。如果指定了 number,则打开指定数量的标签页。

bash 复制代码
vim -p file1 file2 file3
vim -p3 file1 file2 file3
相关推荐
长弓聊编程9 分钟前
Linux系统使用valgrind分析C++程序内存资源使用情况
linux·c++
cherub.16 分钟前
深入解析信号量:定义与环形队列生产消费模型剖析
linux·c++
梅见十柒39 分钟前
wsl2中kali linux下的docker使用教程(教程总结)
linux·经验分享·docker·云原生
Koi慢热43 分钟前
路由基础(全)
linux·网络·网络协议·安全
传而习乎1 小时前
Linux:CentOS 7 解压 7zip 压缩的文件
linux·运维·centos
soulteary1 小时前
突破内存限制:Mac Mini M2 服务器化实践指南
运维·服务器·redis·macos·arm·pika
我们的五年1 小时前
【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数
linux·c++·学习
IT果果日记1 小时前
ubuntu 安装 conda
linux·ubuntu·conda
Python私教1 小时前
ubuntu搭建k8s环境详细教程
linux·ubuntu·kubernetes
羑悻的小杀马特2 小时前
环境变量简介
linux