第五章 Vim 文本编辑器

第五章 Vim 文本编辑器

导语:
Vim 文本编辑器,它是 Linux 中不可或缺的软件,老版本的 Linux 使用的 vi 编辑器,Vim 是 Vi 编辑器的升级增强版,他会显示颜色哦,我们在 Linux 中做各种文件的编辑时,Vim 是我们必不可少的工具,所以一定要学会它的常用操作!
注:如果遇到特殊情况系统里没有安装 Vim,可以执行以下命令来安装:

xml 复制代码
yum -y install vim-enhanced

1、Vim 使用模式介绍

■ 普通模式(命令模式):这个模式是我们使用 vim 打开文件后的默认模式,在该模式下可以移动光标、删除整行、删除字符、复制、粘贴等等...

■ 编辑模式:这个模式下可以自由的编辑文本内容

■ 命令行模式(扩展命令模式):这个模式下可以保存更改、查找、替换字符、退出 vim、显示行号等操作

2、普通模式

命令:vim 文件路径

输入上面的命令即可进入普通模式,若直接输入 vim 省略文件路径则可以看到 vim 软件的版本信息

我们来找个文件试试,最好复制某个文件到/tmp 目录下去操作,防止初学者误更改重要文件!

■ 移动光标:

■ 删除、复制、粘贴

■ 小提示:在做操作前如果按了数字 n 则后面做操作相当于做 n 次(不仅仅是普通模式下,其实模式下都可以去试试)

比如:10x,做 x 这个动作 10 次

3、编辑模式

在一般模式下按 i、I、a、A、o、O、r、R 中任意一键即可进入编辑模式,注意屏幕左下角的变化!

■ 从一般模式进入编辑模式说明:

■ 从编辑模式回到普通模式请按 Esc 键,如果不喜欢可以试试 ctrl+c,或者 ctrl+[

4、命令行模式

在一般模式下输入":"或者"/"或者"?"进入命令行模式,不过各自作用不一样,在命令行模式下能做的事情就多了,比如常见的搜索、替换。特别是在搜索、替换时配合正则表达式(vim 这边是支持正则的)可以得到极强的效果

注:vim 的命令行模式下类似于 shell 命令行也可以通过上下键来获得以往输入的 vim 命令

也可通过 tab 来自动补全 vim 命令行模式下支持的命令

5、可视操作

可视操作能让你的光标选择可以被看到

6、剪贴板操作

7、多文件操作

1)vim 文件 1 文件 2 文件 3...

xml 复制代码
:n 或:N 编辑 下一个 或 上一个 文件
:files 列出 vim 当前打开的所有文件

2)vim -o 文件 1 文件 2 文件 3... 上下分屏显示

xml 复制代码
ctrl+w+↓
ctrl+w+↑
ctrl+w+k
ctrl+w+j
:qall 退出所有
:wall 保存全部
:q 退出当前所在的文件

3)vim -O 文件 1 文件 2 文件 3... 左右分屏显示

xml 复制代码
ctrl+w+->
ctrl+w+<- ctrl+w+h
ctrl+w+l
:qall 退出所有
:wall 保存全部
:q 退出当前所在的文件

4)vim -p 文件 1 文件 2 文件 3...

标签式,通过:set tabpagemax=n 可以设置最大允许的打开标签数量默认 10

xml 复制代码
ctrl+pageup同 :bn
ctrl+pagedown 同 :bp
:qall 退出所有
:wall 保存全部
:q 退出当前所在的文件

5)先打开一个文件如果想再打开一个(多窗口打开)

xml 复制代码
vim 文件 1
上下分屏   :sp 或:split 文件 2
垂直分屏    :vs 或:vsplit 文件 2
xml 复制代码
在新窗口打开文件 2,若省略则新窗口打开的还是文件 1(内容同步)
:qall 退出所有
:wall 保存全部
:q 退出当前所在的文件
提示:vim 查看帮助:help 具体项目比如:help -p

8、Vim 环境设置

每次都在命令模式下把编辑器设置成自己喜好的方式是反人道的的,比如每次都是设置显示行号实在太麻烦了,有没有办法做好配置,下次依然有效呢?

当然可以!

/etc/vimrc 这个文件是 vim 的默认全局配置文件,不建议更改这个。

~/.vimrc 这个文件是用户自己的 vim 配置,可以把设置信息放在这里面,这样各个用户对于 vim 的设置互不干扰!

注:vimrc 文件的注释是用双引号,加不加冒号开头都无所谓!

比如,我们可以在配置文件里写上这条配置 set fileencodings=ucs-bom,utf-8,utf-16,gbk,big5,gb18030,latin1

注意:vim 在打开文件时会根据 fileencodings 选项来识别文件编码,通过以上设置可以避免绝大部分的中文、繁体中文呢的显示乱码问题(当然前提是系统当前使用的语系是支持中文的编码,参照后面要讲的 locale 设置,现在先简单看下locale 设置),不过我们这边除了图像界面,其他的本地终端是不支持中文的,也就是我们通过 ctrl+alt+f2...等等切换。这边都是无法支持中文的,不过以后使用远程连接时是可以显示的,所以这边的只要把这个配置写上就行了!

注:...rc,这种文件代表是在执行对应的命令之前要执行的配置脚本,比如后面要讲的 bashrc 等等

~/.viminfo 历史行为记录文件

当我们再次打开同一个文件时,光标依然在上次离开的位置,这些记录就放在~/.viminfo 文件中,所以没事不要乱删配置文件!

9、Windows 与 Linux 下换行区别

使用 cat -A 查看可以看到:Windows 下的换行符比 Linux 下的多了个 ^M;

原因:

xml 复制代码
■ Windows 下你看到的换行现象:是\r\n
■ Linux 下你看到的换行现象是:\n
■ \r:回车符
■ \n:换行符

■ 这个换行的区别放在 Linux 中有实际影响吗?

当然有影响,如果是 shell 脚本就知道区别了,这边先记住这个转换办法!

■ 在 Linux 中怎么转换呢?

xml 复制代码
dos2unix [-kn] file [newfile]
unix2dos [-kn] file [newfile]
PS:如果没有这个命令可以安装下:yum -y install dos2unix
xml 复制代码
选项:
-k:不改变文本的 mtime
-n:不修改源文件,修改后的数据输出到指定的新文件

■ 扩展知识:vim 打开 windows 下文件时,左下角出现[noeo] 是 'no end-of-line',

即"没有行末结束符",默认 windows 下最后一行行末没有换行符,Linux 下是会给最后一行也加上行末换行符的!

10、文件编码转换

■ file 命令可以查看文件的编码,不过不一定准确!

■ 推荐更牛 X 的常看文件编码的命令:

xml 复制代码
enca
■ 安装:
■ 下载:http://rpmfind.net/linux/epel/7/x86_64/Packages/e/enca-1.19-1.el7.x86_64.rpm
■ 安装:rpm -ivh enca-1.19-1.el7.x86_64.rpm
■ 查看文件编码
enca 文件路径

注:enca 支持编码转换甚至是批量转换,如果需要就请自行 man 查询吧!

xml 复制代码
■ iconv [-l|--list]:列出 iconv 支持的语系数据
■ iconv -f 原编码 -t 新编码 文件名 [-o new file]

选项:-o 后接上转换后将数据保存到的文件,如果不加该选项则会将输出转换后的数据输出,而不是修改

11、利用暂存文件救援

使用 vim 编辑时,vim 会在被编辑的目录下新建一个名为.filename.swp 的隐藏文件。如遇到意外情况中断 vim 编辑,可以利用这个隐藏文件救援。

你可能有时候利用 vim 打开某文件时会出现以下提示

这代表这个文件可能有些问题,比如上次编辑时不正常退出,这时你可以按照提示按键进行相关操作:

xml 复制代码
[O]pen Read-Only:打开此文件成为只读文件,只查阅不编辑状态

(E)dit anyway:正常方式打开此文件,不会载入暂存隐形文件的内容

(R)ecover:加载暂存隐形文件的内容,挽救之前未保存的工作。切记救回文件保存离开 vim 后,要手动删除那个暂存隐形文件,否则下次打开还会有出上图的提示,并且如果再次发生意外退出,则会再多出一个类似的救援文件,当你再次打开时还可以指定根据哪个救援文件进行救援。

(D)elete it:确定暂存文件没有用,执行 D,会在打开文件前把这个暂存文件删除

(Q)uit:按下 q 离开 vim,回到命令提示符,如果打开多个文件则只退出这个存在救援文件的文件

(A)bort:忽略这个编辑行为,回到命令提示符,如果打开多个文件则忽略全部,通过 vim -o 可以看到与 q 的区
相关推荐
cyl-love17 分钟前
泷羽sec-linux进阶
linux·数据库·mysql·安全·web安全
是阿建吖!22 分钟前
【Linux】命令行参数与环境变量
linux·运维·服务器
cykaw25903 小时前
使用C语言实现Linux的date>date.txt功能
linux·服务器·c语言
我是谁??4 小时前
curl上传文件到minio服务器
linux·curl
skynetkang6 小时前
摄像头原始数据读取——gstreamer(gst_parse_launch)
linux·c++·音视频·gstreamer
lqj_本人6 小时前
关于node全栈项目打包发布linux项目问题总集
linux·运维·服务器
wavemap7 小时前
AWS 新加坡EC2 VPS 性能、线路评测及免费注意事项
linux·网络·云计算·aws·aws-ec2·vps评测
BAGAE8 小时前
tomcat,appche,nginix,jboss区别
java·linux·数据库·ubuntu·tomcat
zqzgng9 小时前
裸金属服务器和专属主机的区别是什么?
linux·运维·服务器
Mr.kanglong9 小时前
【Linux】TCP网络编程
linux·运维·服务器