Vim文本编辑器及其应用详解


Vim 是一个基于文本界面的编辑工具,使用简单且功能强大。更重要的是,Vim 是所有 Linux 发行版本默认的文本编辑器。

很多人习惯将 Vim 称为 Vi,其实 Vim 是 Vi 的增强版(在 Vi 的基础上增加了正则表达式的查找、多窗口的编辑等功能),使用 Vim 进行程序开发会更加方便。

想深入了解 Vi 和 Vim 的区别,可以在 Vim 命令模式下输入 :help vi_diff,即可看到关于两者区别的摘要

Vim及其安装

众多 Linux 发行版系统,通常都已经默认安装好了 vi 或 Vim 文本编辑器,Centos 也不例外,该系统就默认安装有 vi 文本编辑器,但建议大家使用 Vim。
如果在命令行模式下输入“vim”,输出结果为“Command not found”,则表示此系统中未安装 Vim。

CentOS 系统中,使用如下命令即可安装 Vim:

yum install vim

需要注意的是,此命令运行时,有时需要手动确认 [y/n],如图 1 所示:
在这里插入图片描述
当命令行中输入“Vim”显示如图 1 所示的画面时,视为 Vim 安装成功。
在这里插入图片描述

Vim三种工作模式

使用 Vim 编辑文件时,存在 3 种工作模式,分别是命令模式、输入模式和编辑模式,这 3 种工作模式可随意切换,如图 1 所示。
在这里插入图片描述

命令模式

命令模式下无法编辑文件,只允许删除,复制,粘贴,撤销,使用快捷键等操作,文件打开时默认进入此模式

输入模式

在输入模式下,Vim 可以对文件执行写操作,类似于在 Windows 系统的文档中输入内容。

使 Vim 进行输入模式的方式是在命令模式状态下输入 i、I、a、A、o、O 等插入命令(各指令的具体功能如表 3 所示),当编辑文件完成后按 Esc 键即可返回命令模式。
在这里插入图片描述

编辑模式

编辑模式用于对文件中的指定内容执行保存、查找或替换操作。

使 Vim 切换到编辑模式的方法是在命令模式状态下按“:”键,此时 Vim 窗口的左下方出现一个“:”符号,这是就可以输入相关指令进行操作了。
指令执行后 Vim 会自动返回命令模式。如想直接返回命令模式,按 Esc 即可

Vim基本操作

Vim 打开文件

使用 Vim 打开文件很简单,例如在命令行模式下打开一个自己编写的文件 /test/vi.test,
打开方法如下:

[root@itxdl ~]# vim /test/vi.test
用法1:
	vim /tmp/myshell.sh
	#表示打开tmp目录下的myshell.sh文件,不存在则创建一个,默认光标会定位到上次
	所在位置和高亮上次高亮的内容。

用法2:
	vim +10 /tmp/myshell.sh
	#表示打开tmp目录下的myshell.sh文件并且将光标移动到第10行。

用法3:
	vim +/hello /tmp/myshell.sh
	#表示打开tmp目录下的myshell.sh文件并且高亮显示文件里所有的hello内容。

用法4:
	vim /tmp/myshell.sh /home/my.sh /root/a.txt
	#表示同时打开tmp目录下的myshell.sh、home目录下的my.sh和root目录下的a.txt文件。

刚打开文件时 Vim 处于命令模式,此时文件的下方会显示文件的一些信息,包括文件的总行数和字符数,以及当前光标所在的位置等。

命令模式操作

光标移动

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
程序员在编辑程序时,经常会为将光标移动到与一个 “(” 匹配的 “)” (对于 [] 和 {} 也是一样的)处而感到头疼。Vim 里面提供了一个非常方便地査找匹配括号的命令,这就是 “%”。

比如,在 /etc/init.d/sshd 脚本文件中(最好还是复制后练习,小心驶得万年船),想迅速地将光标定位到与第 49 行的 “{” 相对应的 “}” 处,则可以将光标先定位在 “{” 处,然后再使用 “%” 命令,使之定位在 “}” 处,如图 6 所示。
在这里插入图片描述

复制、删除、粘贴、撤销操作:

  • 按下 “J” 键 将两行间的换行符去掉
  • 按“x” 删除光标所在字符
  • 按“u” 撤销恢复
  • 按“ctrl+r” 取消撤销恢复
  • 按“y” 复制
	“yw”             复制一个单词
	"yl"             复制一个字母
	 "yy"            复制一整行
	 "y5y"           复制5
  • 按“c” 剪切
	“cw”           剪切一个单词
	"cl"           剪切一个字母
	"cc"           剪切一整行           
	"c5c"          剪切5

注意:“用c做剪切时,会进入插入模式,如果要粘贴需要退出插入模式按(ESC)在按p”

  • 按“d” 删除
	“dw”         删除一个单词
	“dl”         删除一个字母
	"dd"         删除一整行
	"d5d"        删除5
  • 按"p" 粘贴

可视化模式的基本操作

在vim中是不能用鼠标选择区域操作的,如果要操作某个区域,需要进入到可视化模式
在命令模式下 “ctrl + v” 就可以进入到可视模式了,按"上|下|左|右"移动光标选择区域,按相应操
作键就可以对选择区域进行操作。
可视化模式下批量添加字符

 	 *1.把光标停留在想要加入字符所在的列的第一行
    *2.移动光标选择添加字符所在列
    *3."I"进入插入模式
    *4.写入要插入的字符
    *5."ESC"退出插入模式,字符批量添加成功

编辑模式操作

Vim 查找文本

在这里插入图片描述
在查找过程中需要注意的是,要查找的字符串是严格区分大小写的,如查找 “shenchao” 和 “ShenChao” 会得到不同的结果。

如果想忽略大小写,则输入命令 ":set ic";调整回来输入":set noic"

如果在字符串中出现特殊符号,则需要加上转义字符 “”。常见的特殊符号有 \、*、?、$ 等。如果出现这些字符,例如,要查找字符串 “10$”,则需要在命令模式中输入 “/10$”。

Vim 替换文本

在这里插入图片描述

Vim 保存退出文本

Vim 的保存和退出是在编辑模式中进行的,其常用命令如下表所示。
在这里插入图片描述
需要注意的是,“w!” 和 “wq!” 等类似的指令,通常用于对文件没有写权限的时候(显示 readonly,),但如果你是文件的所有者或者 root 用户,就可以强制执行。

Vim多窗口编辑模式

在一个窗口同时打开多个文件

vim file1, file2, file3

命令模式输入:

:files 可查看打开的文件列表
:n 编辑下一个文件
:N 编辑上个文件
:files 列出目前这个vim打开的所有文件

多窗口编辑

命令模式:

  • sp filename
    打开一个新窗口,如果有filename,表示在新窗口打开一个新文件,否则表示新建一个窗口显示同一个文件(同步显示),上下排列
  • vsp filename
    打开的vim窗口是垂直排列的;窗口之间的光标切换
ctr + w + j(下方向箭) : 光标切换到下一个窗口
ctr + w + k(上方向箭):光标切换到上一个窗口

:set mouse=a 使得鼠标在vim中生效,可以使用鼠标移动光标 拖拽vim窗口。

Vim批量注释和自定义注释快捷键

使用 Vim 编辑 Shell 脚本,在进行调试时,需要进行多行的注释,每次都要先切换到输入模式,在行首输入注释符"#"再退回命令模式,非常麻烦。

连续行的注释其实可以用替换命令来完成。换句话说,在指定范围行加"#"注释,可以使用 “:起始行,终止行 s/^/#/g”,例如:

:1,10s/^/#/g

表示在第 1~10 行行首加"#“注释。”^"意为行首;"g"表示执行替换时不询问确认。如果希望每行交互询问是否执行,则可将 “g” 改为 “c”。

取消连续行注释,则可以使用 “:起始行,终止行s/^#//g”,例如:

:1,10s/^#//g

意为将行首的"#"替换为空,即删除。

当然,使用语言不同,注释符号或想替换的内容不同,都可以采用此方法,灵活运用即可。

添加"//"注释要稍微麻烦一些,命令格式为 “:起始行,终止行 s/^////g”。例如:

:1,5s/^/\/\//g

表示在第 1~5 行行首加"//"注释,因为 “/” 前面需要加转义字符 “”,所以写出来比较奇特。

以上方法可以解决连续行的注释问题,如果是非连续的多行就不灵了,这时我们可以定义快捷键简化操作。格式如下:

:map 快捷键 执行命令

如定义快捷键 “Ctrl+P” 为在行首添加 “#” 注释,可以执行 “:map^P l#< Esc>”。其中 “^P” 为定义快捷键 “Ctrl+P”。注意:必须同时按 “Ctrl+V+P” 快捷键生成 “^ P” 方可有效,或先按 “Ctrl+V” 再按 “Ctrl+P” 也可以,直接输入 “^P” 是无效的。

“l#< Esc>” 就是此快捷键要触发的动作,“l” 为在光标所在行行首插入,"#" 为要输入的字符,"< Esc>" 表示退回命令模式。"< Esc>" 要逐个字符输入,不可直接按键盘上的 Esc 键。

设置成功后,直接在任意需要注释的行上按 “Ctrl+P” 快捷键,就会自动在行首加上 “#” 注释。取消此快捷键定义,输入 “:unmap^P” 即可。

我们可以延伸一下,如果想取消文件行首的快捷键,则可以设置 “:map^B 0x”,快捷键为 “Ctrl+B”, “0” 表示跳到行首,“x” 表示删除光标所在处字符。

再如,有时我们写完脚本等文件,需要在末尾注释中加入自己的邮箱,则可以直接定义每次按快捷键 “Ctrl+E” 实现插入邮箱,定义方法为 “:map^E [email protected]< Esc>”。其中 “a” 表示在当前字符后插入,“[email protected]” 为插入的邮箱,"< Esc>" 表示插入后返回命令模式。

所以,通过定义快捷键,我们可以把前面讲到的命令组合起来使用。

将快捷键对应的命令保存在 .vimrc 文件中,即可在每次使用 Vim 时自动调用,非常方便。

Vim显示行号

显示行号:

:set number 或者 :set nu 

隐藏行号

:set nonumber 或者 :set nonu 

这样的设置方法只能维持在,当前vim打开的文件中显示效果,那么我们怎么让我们每次打开vim的时候自动设置行号呢,这个时候就需要我们设置配置文件,两种配置方式

/etc/vimrc   是系统范围的初始化配置

~/.vimrc     个人的vim初始化配置

操作步骤:

1.这里设置的是个人配置,直接在终端输入 vim ~/.vimrc    ,然后我们就可以进入配置文件
2.我们在配置文件输入set number 或者 set nu 就可以了
3. :wq   ,保存并退出

配置文件(.vimrc)详解

Vim编辑器相关的所有功能开关都可以通过.vimrc文件进行设置。
.vimrc配置文件分系统配置和用户配置两种。

系统vimrc配置文件存放在Vim的安装目录,默认路径为/usr/share/vim/.vimrc。可以使用命令echo $VIM来确定Vim的安装目录。

用户vimrc文件,存放在用户主目录下~/.vimrc。可以使用命令echo $HOME确定用户主目录。

注意:用户配置文件优先于系统配置文件,Vim启动时会优先读取当前用户根目录下的.vimrc文件。所以与个人用户相关的个性化配置一般都放在~/.vimrc中。

基本配置

2.1 支持中文不乱码

'设置编码'
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8

与Vim编码有关的变量包括:encoding、fileencoding、termencoding。
encoding选项用于缓存的文本、寄存器、Vim 脚本文件等;fileencoding选项是Vim写入文件时采用的编码类型;termencoding选项表示输出到终端时采用的编码类型。

2.2 显示行号

'显示行号'
set nu
set number
nu是number的缩写,所以上面两个配置命令是完全等效的。

2.3 突出显示当前行

set cursorline

2.4 启用鼠标

set mouse=a
set selection=exclusive
set selectmode=mouse,key

Vim编辑器里默认是不启用鼠标的,也就是说不管你鼠标点击哪个位置,光标都不会移动。通过以上设置就可以启动鼠标,不过对于高级玩家来说,用Vim就是为了解放双方不用鼠标,所以这个设置可以根据个人爱好选择。

2.5 显示括号匹配

set showmatch

2.6 设置缩进

'设置Tab长度为4空格'
set tabstop=4
'设置自动缩进长度为4空格'
set shiftwidth=4
'继承前一行的缩进方式,适用于多行注释'
set autoindent

2.7 设置粘贴模式

set paste

2.8 显示空格和tab键
在Vim中通过鼠标右键粘贴时会在行首多出许多缩进和空格,通过set paste可以在插入模式下粘贴内容时不会有任何格式变形、胡乱缩进等问题。

set listchars=tab:>-,trail:-

Vim编辑器中默认不显示文件中的tab和空格符,通过上面的配置可以获得以下的显示效果,方便定位输入错误。
2.9 显示状态栏和光标当前位置

'总是显示状态栏'
set laststatus=2
'显示光标当前位置'
set ruler

Vim配置变更立即生效
要让.vimrc变更内容生效,一般的做法是先保存 .vimrc 再重启vim,增加如下设置,可以实现保存 .vimrc 时自动重启加载

'让vimrc配置变更立即生效'
autocmd BufWritePost $MYVIMRC source $MYVIMRC
发布了96 篇原创文章 · 获赞 396 · 访问量 6192

猜你喜欢

转载自blog.csdn.net/Bonport/article/details/105199973