vim详解(代码片段)

author author     2022-12-10     473

关键词:

一、vim使用介绍

介绍

在linux系统中,大部分配置文件都是ASCII的纯文本形式存放的,所以我们在修改系统设置的时候使用简单的文本编辑软件就可以实现了,如果你使用过windows当中的word的话,那么你可能会感觉linux字符界面的文本编辑工具并不是太好用,毕竟没有图形窗口,看着不会太舒服。但是既然要学习linux,掌握并熟练使用文本编辑工具是必不可少的技能,在linux当中的文本编辑工具有很多,如emacs pico nano joe vi/vim 等等

既然有这么多文本编辑工具,为什么要学习vi/vim呢?

为什么要使用vim?

虽然在linux下的文本编辑器众多,这些工具都有各自的优点,但是有几点是其它编辑工具所不能比拟的

1 所有的类Unix系统都内建vi,其它的编辑工具则不一定,而vim相当于是vi的升级版

2 很多软件的编辑界面都会调用vi,如后面提到的crontab、edquota等

3 vim具有程序编辑能力,可以主动以字体颜色标识语法的正确性,方便代码编写

4 程序简单,编辑速度非常快

综上所述这是一个老式的文字处理工具,但是功能很齐全,不仅是文本处理工具,还是一个程序编辑工具,就连官方网站也说vim是一个程序开发工具而不是文字处理软件,因为它包含了很多额外的功能,如:多文件编辑,区块复制等,这些功能让我们在进行配置文件修改的时候会更方便。

介绍就到这里,我们来看一下基本使用

二、基本使用

由于vi/vim是一个全屏幕的文本编辑器,它工作在三种模式下:分别是命令模式、输入模式和末行模式。可以分别从命令模式切换到输入模式和末行模式,也可以从末行模式或输入模式切换到命令模式,但是输入模式与末行模式之间不能互相切换。

技术图片
第一种:命令模式,当我使用“vim myfile”命令打开myfile这个文件时就处于命令模式,屏幕左下角为文件名(myfile),1L 表示本文件有1 行,26C 表示此文件有26 个字符。1,25表示光标当前位置,在此模式下用户可以输入命令来进行文件存盘、移动光标、删除字符、撤消命令和重复命令等操作,还可以设置编辑环境。

this is the command mode.
~                                                                                  
~   表示没有内容                                                                                          
"myfile" 1L, 26C                                                 1,25         全部

第二种:插q入模式,又叫输入模式。在输入模式下,屏幕的左下方会出现INSERT (插入)字样。在输入状态下,用户可以输入文本的内容。

this is the command mode.
~                                                                                  
~                                                                                  
~                                                                                  
~                                                                                  
-- 插入 --                                                       1,25         全部

第三种:末行模式。只要在命令模式下输入命令“:”即可进入末行模式。在末行模式下,可以进行保存文件、退出vi、进行查找和替换等操作。

this is the command mode.
~                                                                                  
~                                                                                  
~                                                                                  
~                                                                                  
:q!                                                    

三种模式介绍完了,我们看下vim的使用,这里面我们还是按照三种模式来对vim的使用进行说明

命令模式可以使用的按键说明

? 光标控制按键

h 或 向左箭头键(←) 光标向左移动一个字符
j 或 向下箭头键(↓) 光标向下移动一个字符
k 或 向上箭头键(↑) 光标向上移动一个字符
l 或 向右箭头键(→) 光标向右移动一个字符
15j/15↓ 向下移动15行
[Ctrl] + [f] 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b] 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d] 屏幕『向下』移动半页
[Ctrl] + [u] 屏幕『向上』移动半页
n<space> 那个 n 表示『数字』,例如 3 。按下数字后再按空格键,光标会向右移动3 个字符。
0 或功能键[Home] 这是数字『 0 』:移动到这一行的最前面字符处 (常用)
$ 或功能键[End] 移动到这一行的最后面字符处(常用)
H 光标移动到这个屏幕的最上方那一行的第一个字符
M 光标移动到这个屏幕的中央那一行的第一个字符
L 光标移动到这个屏幕的最下方那一行的第一个字符
G 移动到这个文件的最后一行(常用)
nG n 为数字。移动到这个文件的第 n 行。可配合 :set nu
gg 移动到这个档案的第一行,相当于 1G (常用)
n<Enter> n 为数字。光标向下移动 n 行(常用)

? 搜索与替换

/abc 向光标之下查找一个名称为 abc 的字符串。 (常用)
?abc 向光标之上查找一个字符串名称为 abc 的字符串。
n 这个 n 是英文按键。代表『重复前一个查找的动作』。
N 这个 N 是英文按键。与 n 刚好相反
:n1,n2s/abc1/abc2/g n1 与 n2 为数字。在第 n1 与 n2 行之间查找 abc1 替换为 abc2
:1,$s/abc1/abc2/g 从第一行到最后一行查找 abc1 字符串,并将该字符串替换为 abc2 (常用)
:1,$s/abc1/abc2/gc 从第一行到最后一行查找 abc1 字符串,并将该字符串替换为 abc2 ,且在替换前显示提示字符给用户确认

? 删除与复制粘贴

x, X x 相当于 [del] , X 相当于 [backspace] (常用)
nx n 为数字,连续向后删除 n 个字符。
dd 删除光标所在的那一整行(常用)
ndd n 为数字。删除光标所在的向下 n 行(常用)
d1G 删除光标所在行到第一行的所有数据
dG 删除光标所在行到最后一行的所有数据
d$ 删除光标所在处,到该行的最后一个字符
d0 那个是数字的 0 ,删除光标所在处,到该行的最前面一个字符
yy 复制光标所在的那一行(常用)
nyy n 为数字。(常用)
y1G 复制光标所在行到第一行的所有数据
yG 复制光标所在行到最后一行的所有数据
y0 复制光标所在的那个字符到该行行首的所有数据
y$ 复制光标所在的那个字符到该行行尾的所有数据
p, P p 为将已复制的数据在光标下一行贴上,P 则为贴在光标上一行 (常用)
J 将光标所在行与下一行的数据结合成同一行
c 重复删除多个数据,例如向下删除 4 行,[ 4cj ],配合上下左右的按键使用
u 撤销操作。(常用)
[Ctrl]+r 重做上一个动作。(常用)

从命令模式进入输入模式

i, I i=从当前光标所在处插入, I =在当前所在行的第一个非空处开始插入。 (常用)
a, A a =从当前光标所在的下一个字符处开始插入, A =从光标所在行的最后一个字符处开始插入。(常用)
o, O o =在当前光标所在的下一行处插入新的一行; O =在当前光标所在处的上一行插入新的一行。(常用)
r, R r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用)
[Esc] 退出输入模式,回到命令模式中(常用)

从命令模式进入到末行模式

:w 保存(常用)
:w! 若文件属性为『只读』时,强制保存,是否能保存与权限有关
:q 不保存退出(常用)
:q! 强制退出不保存。
:wq 保存退出, :wq! 则为强制保存退出 (常用)
ZZ 这是大写的 Z !若档案没有更动,则不储存离开,若档案已经被更动过,则储存后离开!
:w [filename] 将编辑的数据储存成另一个档案(类似另存新档)
:r [filename] 在编辑的数据中,从指定的文件读取数据并加到光标所在行后面
:n1,n2 w [filename] 将 n1 到 n2 的内容保存为 filename 这个档案。
:! command 在系统中执行指定的命令 如 :! ls /home
vim 环境的变更
:set nu 显示行号
:set nonu 取消行号

三、额外功能

区块选择

v 字符选择,选中光标经过的地方
V 选中光标经过的行
[Ctrl]+v 区块选择
y 复制选中的部分
d 删除选中的部分

多文件编辑

:n 编辑下一个文件
:N 编辑上一个文件
:files 列出目前这个 vim 的开启的所有文件

多窗口编辑

:sp/:vsp [filename] 开启一个新窗口,如果加 filename, 表示在新窗口编辑指定的文件,否则表示两个窗口为同一个文件(同步显示)。
[ctrl]+w+ j [ctrl]+w+↓ 按键的按法是:先按下 [ctrl] 不放, 再按下 w 后放开所有的按键,然后再按下 j (或向下箭头键),则光标可移动到下方的窗口。
[ctrl]+w+ k [ctrl]+w+↑ 同上,不过光标移动到上面的窗口。
[ctrl]+w+ q 退出光标所在窗口,也可以 [ctrl]+w+j/k 切换窗口后,按下 :q 即可离开, 也可以按下 [ctrl]+w+q 。

环境变量与记录

.viminfo:记录用户的行为,之前编辑过的文件光标在什么位置,在这个文件中进行过什么操作等,自动建立

.vimrc:定义vim的默认设置,如是否显示行号等,需要手动生成

:set nu /:set nonu 就是设定与取消行号!
:set hlsearch /:set nohlsearch 搜索时是否高亮显示。默认值是 hlsearch
:set autoindent :set noautoindent 是否自动缩排?autoindent 就是自动缩排。
:set backup/:set nobackup 是否自动备份,一般是 nobackup 的, 如果设定 backup 的话,那么当你更动任何一个档案时,则源文件会被另存成一个档名为 filename~ 的档案。
:set ruler/:set noruler 是否显示右下角的一些状态栏说明
:set showmode/:set noshowmode 是否显示左下角的状态栏。
:set backspace=(012) 一般来说, 如果我们按下 i 进入编辑模式后,可以利用backspace来删除任意字符的。 但是,某些版本则不许如此。这时就可以使用这个设置2 可以删除任意;0 或 1 仅可删除刚刚输入内容
:set all 显示目前所有的环境变量设定值。
:set 显示与系统默认值不同的设置, 用户修改过的
:syntax on :syntax off 是否显示颜色
:set bg=dark :set bg=light 可用以显示不同的色调,预设是『 light 』。如果你常常发现批注的字体深蓝色实在很不容易看, 那么这里可以设定为 dark 喔!试看看,会有不同的样式呢!

密码设置与取消

加密

vim filename--->:X--->输入密码--->保存(否则不加密)

取消密码

1
vim filename--->输入正确密码--->:X--->空密码--->保存
2
vim filename--->:set key= --->保存
注意:不要对系统文件进行加密的操作

vim插件

1
虚拟机网卡设置为NAT
2
dhclient -r ensxx
dhclient ensxx
3 dnf install epel-release -y
4 dnf install vim-airline -y

vimdiff&vimtutor

vimdiff:编辑两个或者更多个文件并显示不同

vimtutor:一条神奇的命令

四、使用中的注意事项

由于个别版本的linux默认只安装vi,所以你需要额外安装vim的软件包,如何安装软件包我们会在后续的课程中讲解,另外vim在字符界面下不能输入中文,而在图形界面下能否输入中文则取决于系统中是否安装了中文输入法

字符差异

由于linux和windows的系统差异,它们针对于文件的中的一些特殊符号表示方式也是不同的,比如说用来表示换行的符号等,如

[root@manage01 ~]# cat -A hello-linux.txt 
hello$
$
[root@manage01 ~]# cat -A hello-windows.txt 
hello^M$
^M$

如果这种文件是从windows拷贝到linux的一本小说的话,基本没什么问题,但是如果是一个我们需要执行指定工作的shell脚本就会出现问题,因为linux不认识这种符号的含义,就会导致shell脚本无法执行。所以此时我们就要对这种文件进行处理

[root@manage01 ~]# unix2dos [-kn] file [newfile]
选项与参数:
-k  :保留文件原本的 mtime 时间格式
-n  :保留旧文件,将转换后的内容输出到新文件,如: dos2unix -n old new

欢迎加入交流鹅群 685868549

[转帖]基于vim漏洞cve-2019-12735的vim宏后门病毒详解(代码片段)

基于VIM漏洞CVE-2019-12735的VIM宏后门病毒详解不明觉厉只要是人做的东西就会有bug就会有安全问题就看发现bug或者是发现安全问题有没有收益了会用linux的都是比较熟悉操作系统等概念的不容易被钓鱼反过来很多用windows的能力会很... 查看详情

sshpass详解(代码片段)

应用范围:可以在命令行直接使用密码来进行远程连接和远程拉取文件。使用前提:对于未连接过的主机。而又不输入yes进行确认,需要进行sshd服务的优化:#vim/etc/ssh/ssh_configStrictHostKeyCheckingno#vim/etc/ssh/sshd_configGSSAPIAuthenticationno... 查看详情

linux学习笔记2022-11-29---------vim文本编辑器及其应用详解(代码片段)

目录1.Vim编辑器概述2.Vi和Vim之间到底有什么关系?3.Vim编辑器的三种模式(重点)3.1三种模式3.2三种模式之间的关系3.3LinuxVim基本操作之文件的打开4.命令模式(重点)4.1光标移动4.2复制4.3剪切/删除4.4撤销/恢复... 查看详情

[os-linux]详解linux基础开发工具(代码片段)

本文基于CentOS,详细介绍了Linux下的几种开发工具的使用,包括vim,gcc/g++,gdb、Makefile。目录一、Linux编辑器-vim1.vim的基本概念 正常/普通/命令模式(Normalmode)插入模式(Insertmode)末行模式(lastlinemode)2.vim的基本... 查看详情

[os-linux]详解linux基础开发工具(代码片段)

本文基于CentOS,详细介绍了Linux下的几种开发工具的使用,包括vim,gcc/g++,gdb、Makefile。目录一、Linux编辑器-vim1.vim的基本概念 正常/普通/命令模式(Normalmode)插入模式(Insertmode)末行模式(lastlinemode)2.vim的基本... 查看详情

vim详解(代码片段)

一、vim使用介绍介绍在linux系统中,大部分配置文件都是ASCII的纯文本形式存放的,所以我们在修改系统设置的时候使用简单的文本编辑软件就可以实现了,如果你使用过windows当中的word的话,那么你可能会感觉linux字符界面的文... 查看详情

linux万字详解linux开发工具(yum,vim,gcc/g++,gdb,make/makefile)(代码片段)

文章目录一、软件包管理器yum1.什么是软件包2.ping3.查看所有软件包4.安装软件包5.卸载软件包二、编辑器vim0.vim的配置(1)配置文件(2)配置vim1.vim的模式2.模式间的转变3.命令模式(Normalmode)(1)命令模式... 查看详情

vim使用详解(代码片段)

vim简介vi:VisualInterface,文本编辑器文本:ASCII,Unicode打开文件vim[OPTION]...FILE...+#打开文件后,让光标处于第#行的行首,+默认行尾+/PATTERN让光标处于第一个被PATTERN匹配到的行的行首–bfile二进制方式打开文件–dfile1file2…比较多个... 查看详情

linux开发工具vim以及git的使用详解(代码片段)

Linux开发工具文章目录Linux开发工具vim的基本概念与操作命令模式常见命令复制与粘贴文本修改替换删除光标定位底行模式常见命令批量化替换vim配置vim配置文件位置vim的环境设置参数Linux编译器-gcc/g++使用动态链接和静态... 查看详情

linux操作系统vim编辑器和管道与重定向命令以及u盘备份文件学习详解(代码片段)

一.TTP是什么终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。tty是Teletype的缩写。Teletype是最早出现的一种终端设备,是由Teletype公司生产的。设备名放在特殊文件目录/dev/下。二.vim编辑器基本上vi/vim... 查看详情

keepalived配置文件详解(代码片段)

keepalived配置文件详解[[email protected]~]#vim/etc/keepalived/keepalived.conf!ConfigurationFileforkeepalivedglobal_defsnotification_email[email protected]  //管理员邮箱,可以配置多个notification_email_from 查看详情

vi/vim命令使用详解(代码片段)

1、Linux下创建文件vitest.txt或者vimtest.txt或者touchtest.txt2、vi/vim使用基本上vi/vim共分为三种模式,分别是命令模式(Commandmode),输入模式(Insertmode)和底线命令模式(Lastlinemode)。(1)命令模式x,Xx为向后删除一个字符,X为先前... 查看详情

fastdfs公网访问配置详解(代码片段)

由于近期外包团队反应我们部署的FastDFS不能公网访问,折腾了三天,上网查资料仍无果,最终自己的灵机一动问题解决了,具体过程不说了(说多了都是眼泪),直接上所有配置文件。vim/etc/fdfs/tracker.confhttp.server_port=8080use_storag... 查看详情

系统篇:fstab文件详解(代码片段)

一、自动挂载磁盘(这里以/dev/sda为例)的实现打开/etc/fstab文件vim/etc/fstab添加以下内容/dev/sda/mnt/ssdext4defaults00(通过设备节点挂载)或者UUID=.../mnt/ssdext4defaults00(通过UUID挂载)插上磁盘(HDD、SSD),就可以自动挂载到/mnt/ssd目录下&#x... 查看详情

系统篇:fstab文件详解(代码片段)

一、自动挂载磁盘(这里以/dev/sda为例)的实现打开/etc/fstab文件vim/etc/fstab添加以下内容/dev/sda/mnt/ssdext4defaults00(通过设备节点挂载)或者UUID=.../mnt/ssdext4defaults00(通过UUID挂载)插上磁盘(HDD、SSD),就可以自动挂载到/mnt/ssd目录下&#x... 查看详情

linux文件权限的总结详解(代码片段)

权限总结:对普通文件的:r:read可读,表示具有读取、阅读文件内容的权限w:write可写,表示具有新增、修改文件内容的权限(是否可以删除看上级目录的权限)1)如果没有r,那么vim会提示无法编辑(可强制编辑,echo可以重... 查看详情

linux操作命令分类详解-目录文件(代码片段)

目录系列文章1、目录命令1.1 ls 列出目录及文件名1.2cd 切换目录1.3pwd显示当前目录1.4mkdir创建一个新的目录1.5rmdir删除一个空的目录1.6cp复制文件或目录1.7rm删除文件或目录1.8mv移动文件与目录,或修改文件与目录的名称2、文... 查看详情

windows系统中搭建go语言开发环境详解(代码片段)

目录1、Go语言简介2、安装Git3、Go工具链(编译器)安装3.1、环境变量GOROOT3.2、环境变量GOPATH3.3、Go常用命令4、包管理4.1、gomodule4.2、gopm5、编写Go语言代码的IDE或编辑工具5.1、基于VSCode的Go开发环境5.2、GoLand5.3、Vim5.4、其... 查看详情