Linux(4):VIM文本编辑器

目录

1 VIM编辑器概述

2 VIM编辑器的操作模式

2.1 vim的模式

2.2 简单执行范例

2.3 按键说明

2.3.1 移动游标

2.3.2 搜索与取代

2.3.3 删除、复制以及粘贴

2.3.4 一般模式切换到编辑模式

2.3.5 一般模式切换到命令列模式

2.3.6 块选择

2.3.7 多文件编辑

2.3.8 多窗口功能

2.3.9 补齐

2.3.10 环境设定参数

3 VIM编辑器的命令模式

4 底行模式和命令模式常用指令

5 vim指令图

6 vim的保存文件、恢复和打开时的警告

7 中文编码的问题

7.1 从系统的字符集处理

7.2 从文件的编码处理

8 dos与Linux的断行字符

8.1 回车符号和换行符号产生背景

8.2 格式转换(dos2unix、unix2dos)


慕课网:https://www.imooc.com/learn/111

1 VIM编辑器概述

VIM是VI的升级版本,vim是一个“程序编辑器”。用VI打开一个文件后按a才可以进行编辑,VI编辑器一次可以编辑多个文件。

2 VIM编辑器的操作模式

2.1 vim的模式

  • 一般模式:以 vim 打开一个文件就直接进入一般模式了(这是默认的模式)。在这个模式中,你可以使用上下左右按键来移动光标,你可以删除字符或删除整行,也可以复制、粘贴你的文件数据。
  • 编辑模式:在一般模式中可以进行删除、复制、粘贴等的操作,但是却无法编辑文件内容的。要等到你按下“i,I,o,O,a,A,r,R”等任何一个字母之后才会进入编辑模式。通常在Linux中,按下这些按键时,在界面的左下方会出现 INSERT 或 REPLACE 的字样,此时才可以进行编辑。而如果要回到一般模式时,则必须要按下【Esc】这个按键即可退出编辑模式。
  • 命今行搜式:在一版模式当中,输入“: 、/、?”3个中的任何一个按钮,就可以将光标移动到最下面那一行。在这个模式当中,可以提供你查找数据的操作,而读取、保存、大量替换字符、离开vi、显示行号等操作则是在此模式中完成的。

        简单地说,我们可以将这3个模式想成下面的图来表示,如下图所示。

         

vim abc

使用vim编辑器打开名为abc的文件,没有这个文件时,自动创建。刚启动时,默认命令模式;敲击字母I,或者Insert键,进入输入模式;修改好后,点击esc键,进入底行模式,再选择退出方式退出。

vim打开文件后,底行模式下双击D可以删除光标所在的一行。

2.2 简单执行范例

[root@localhost tmp]# vim /etc/man.config

当vim 打开的是旧文件时,如上图所示,最后一行会有额外信息。第一个红框是文件名;第二个红框代表文件内有152行以及4940个字符的意思;第三个红框代表光标所处的行、字符;最后一个红框显示的是所处的位置,有可能是百分数。

2.3 按键说明

2.3.1 移动游标

2.3.2 搜索与取代

2.3.3 删除、复制以及粘贴

2.3.4 一般模式切换到编辑模式

2.3.5 一般模式切换到命令列模式

2.3.6 块选择

2.3.7 多文件编辑

2.3.8 多窗口功能

2.3.9 补齐

2.3.10 环境设定参数

       是否每次使用 vim 都要重新设置一次各个参数值?其实我们可以通过配置文件来直接规定我们习惯的vim操作环境,整体vim的设置值一般是放置在/elc/vimrc这个文件中,不过,不建设你修改它,你可以修改~/.vimrc这个文件(默认不存在,请你自行手动创建)、将你所希望的设重值写入。

vim的环境设定参数如下:

3 VIM编辑器的命令模式

vim 文件名”打开时,有些Linux操作系统,光标默认在第一行;也有些Linux操作系统,光标定位在上次退出该文件时光标的位置。

 vim + abc   打开文件后,光标定位在文件的最后一行。

vim +3 abc   打开文件后,光标定位在文件的第三行。当+号后面的数字大于最大的行数时,光标默认定位在最后一行。

vim +/imooc abc   打开文件后,光标定位在imooc出现第一次的那一行,按N可以向下查找下一个imooc。

vim aa bb cc   同时打开或创建这三个文件。打开时首先出现的aa文件,在底行模式中输入  :n,可以切换到bb文件;当切换到最后一个文件时,可以在底行模式输入 :N  或者 :prev 切换到前一个文件。

4 底行模式和命令模式常用指令

:w:将文件的修改将内存写入硬盘。

:q :退出vim打开的文件。

:! :强制

:ls :列出当前编辑器打开的所有文件

:n:切换到后一个文件

:15:光标快速定位到第15行

/xxx:从光标位置开始,向后搜索xxx字符串,搜索到xxx第一次出现的位置,并把光标定位到那个位置。

?xxx:从光标位置开始,向前搜索xxx字符串,搜索到xxx第一次出现的位置,并把光标定位到那个位置。

5 vim指令图

6 vim的保存文件、恢复和打开时的警告

        在目前主要的文本编辑软件都会有恢复的功能,即当你的系统因为某些原因而导致类似死机的情况,还可以通过某些特别的机制来让你将之前未储存的数据“救”回来!

        当我们在使用vim编辑时,vim会在与被编辑的文件的目录下,再创建一个名为 .filename.swp 的文件。比如说我们编辑 /tmp/vitest/man_db.conf 这个文件时,vim会主动的创建 /tmp/vitest/.man_db.conf.swp 的暂存盘,你对 man_db.conf 做的动作就会被记录到这个 .man_db.conf.swp 当中。如果你的系统因为某些原因断线了,导致你编辑的文件还没有储存,这个时候 .man_db.conf.swp 就能够发挥救援的功能了。

当 vim 工作被不正常中断,此时暂存文件会被保留下来,但是如果此时继续编辑那个文件,会弹出警告信息。

这里可以看到找到了文件 man.config 的暂存文件 man.config.swp

此时vim会主动判断这个文件可能有问题,上面的提示中主要有两点主要的问题与解决方法。

(1)其他人或程序同时在线编辑这个文件

        由于Linux是多人多工的环境,因此很可能有很多人同时在编辑同一个档案。如果在多人共同编辑的情况下,万一大家同时储存,那么这个档案的内容将会变的乱七八糟。为了避免这个问题,因此vim会出现这个警告视窗。解决的方法则是: 
        a) 找到另外那个程式或人员,请他将该 vim 的工作结束,然后你再继续处理。 
        b)    如果你只是要看该档案的内容并不会有任何修改编辑的行为,那么可以选择开启成为只读(O)档案,亦即上述画面反白部分输入英文“o”即可,其实就是 [O]pen Read-Only 的选项。

(2)在前一个vim的环境中,可能因为某些不知名原因导致vim中断(crashed)

        这就是常见的不正常结束vim产生的后果。解决方案依据不同的情况而不同。常见的处理方法为:

        a) 如果你之前的vim处理动作尚未储存,此时你应该要按下“R”,亦即使用(R)ecover的选项,此时vim会载入 .man_db.conf.swp 的内容,让你自己来决定要不要储存!这样就能够救回来你之前未储存的工作。不过那个.man_db.conf.swp并不会在你结束vim后自动删除,所以你离开vim后还得要自行删除.man_db.conf.swp,才能避免每次打开这个档案都会出现这样的警告!

        b) 如果你确定这个暂存文件是没有用的,那么你可以直接按下“D”删除掉这个暂存档,亦即 (D)elete it  这个项目即可。此时vim 会载入man_db.conf ,并且将旧的 .man_db.conf.swp 删除后,建立这次会使用的新的 .man_db.conf.swp 。

按键说明:

这个发现暂存档警告讯息的画面中,有出现六个可用按钮,各按钮的说明如下:

[O]pen Read-Only:打开此档案成为只读档,可以用在你只是想要查阅该档案内容并不想要进行编辑行为时。一般来说,在上课时,如果你是登入到同学的电脑去看他的设定档,结果发现其实同学他自己也在编辑时,可以使用这个模式;

(E)dit anyway:还是用正常的方式打开你要编辑的那个档案,并不会载入暂存档的内容。不过很容易出现两个使用者互相改变对方的档案等问题!不好不好!

(R)ecover:就是载入暂存档的内容,用在你要救回之前未储存的工作。不过当你救回来并且储存离开vim后,还是要手动自行删除那个暂存档喔!

(D)elete it:你确定那个暂存档是无用的!那么开启档案前会先将这个暂存档删除!这个动作其实是比较常做的!因为你可能不确定这个暂存档是怎么来的,所以就删除掉他吧!哈哈!

(Q)uit:按下q就离开vim ,不会进行任何动作回到命令提示字元。

(A)bort:忽略这个编辑行为,感觉上与quit非常类似!也会送你回到命令提示字元就是啰!

7 中文编码的问题

https://blog.csdn.net/GX_1_11_real/article/details/84257586

Linux系统与windows系统在编码上有显著的差别。Windows中的文件的格式默认是GBK(gb2312),而Linux系统中文件的格式默认是UTF-8。这两个系统就好比是中国和日本。文件就好比是一个人,如果要在另外的国家居住就要办理居住许可证,使用他国的证件(编码和字符集),否则是不被允许的黑户。因此,解决中文乱码问题要从编码和字符集着手。

7.1 从系统的字符集处理

(1)查看当前系统默认采用的字符集

(2)查看系统当前字符集:

(3)查看系统是否安装中文字符集

出现zh开头的,即为安装了中文字符集
如未安装,需执行: yum -y groupinstall chinese-support

locale -a |grep zh

(4)修改系统字符集为中文

如果前面查看到的系统当前的字符集是英文,通常修改系统字符集为中文即可成功。

临时修改(当前终端生效):
export LANG="zh_CN.UTF-8"

永久修改:
echo "export LANG="zh_CN.UTF-8"  >> /etc/proflile
source /etc/profile

7.2 从文件的编码处理

当系统的字符集为中文,文件的中文部分仍然显示乱码,就从文件的编码格式处理。

(1)查看文件编码

用vim打开文件,输入:set fileencoding

fileencoding后即为该文件编码格式

(2)查看文件编码(file方式)

file  文件名

file --mime-encoding 文件名

(3)修改文件的字符集

① 文件的编码转换(vim方式)

这个方法,仅在vim查看时进行编码转换,文件实际上本身编码并未转换,仅仅只是可看到。

临时转换:
用vim打开文件,输入:set fileencoding=utf-8

永久转换(先确认vimrc位置):
echo "set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936" >> /etc/vimrc

echo "set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936" >> ~/.vimrc

vim会依照fileencodings提供的编码列表,查找合适的编码,如果没有找到就用latin-1(ASCII)编码打开。

②文件的编码转换(iconv方式)

该命令可进行文件内容的编码转换,并输出到其他位置(文件)

命令参数
-f encoding   把字符由原来的编码开始转换 
-t encoding   把字符转换为新编码
-l            列出支持的编码字符(可选)
-o file       指定输出文件(可选) 
-c            忽略输出的非法字符(可选)
-s            禁止输出警告信息(可选)
--verbose     显示进度(可选)

{1}.列出当前支持的字符编码

iconv -l

{2}.编码转换

基本格式:
iconv  -f 原编码  -t 新编码   原文件 -o 新文件

iconv  -f 原编码  -t 新编码   原文件  > 新文件

示例:将UTF-8编码的wx.txt文件转换为GB2312编码的test01.txt
iconv -f UTF-8 -t GB2312 wx.txt -o test01.txt

③文件名编码转换(convmv方式)

该命令可转换文件名的编码(只是文件名编码的转换,文件内容不会发生变化)
安装命令:yum -y install convmv

 命令参数:
-f           后面是原来的编码方式
-t           后面是要转换为的编码方式
-r           递归处理子文件夹
-i           询问每一个转换
--notest     真实的执行,在默认情况下只会测试(只能以root权限执行)

编码转换基本格式:

convmv -f 原编码 -t 新编码 --notest(可选)  文件名

convmv -f 原编码 -t 新编码 --notest(可选)   -r 目录名
示例:将read目录下的UTF-8编码的文件名转换为GBK编码
convmv -f UTF-8 -t GBK --notest   -r  read/

④文件的编码转换(enca方式)

该工具能自动识别文件编码,且支持批量转换
安装命令:yum -y install enca

基本格式:  
enca -L 原编码 -x 新编码  文件名    

enca -L 原编码 -x 新编码  目录名

示例1:把当前目录下的所有文件都转成utf-8    
      enca -L zh_CN -x utf-8 *     

示例2:检查文件的编码 
      enca -L zh_CN test.txt
        
示例3:将test.txt文件编码转换为"UTF-8"编码  
      enca -L zh_CN -x UTF-8 test.txt
          
示例4:将test.txt文件编码转换为"UTF-8"编码,并输入test2.txt中
      enca -L zh_CN -x UTF-8  < test.txt  > test2.txt

8 dos与Linux的断行字符

8.1 回车符号和换行符号产生背景

         关于“回车”(carriage return)“换行”(line feed)这两个概念的来历和区别。在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。

         于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。

         后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。Unix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“ <回车><换行>”,即“\r\n”;Mac系统里,每行结尾是“<回车>”。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号

        windows创建的文件是 \n\r 结束的, 而linux,mac这种unix类系统是 \n 结束的。

       所以unix的文本到windows会出现换行丢失(ultraedit这种软件可以正确识别); 而反过来就会出现^M的符号了

       Windows等操作系统用的文本换行符和UNIX/Linux操作系统用的不同,Windows系统下输入的换行符在 UNIX/Linux 下不会显示为“换行”,而是显示为 ^M 这个符号(这是Linux等系统下规定的特殊标记,占一个字符大小,不是 ^ 和 M 的组合,打印不出来的)。Linux下很多文本编辑器(命令行)会在显示这个标记之后,补上一个自己的换行符,以避免内容混乱(只是用于显示,补充的换行符不会写入文件,有专门的命令将Windows换行符替换为Linux换行符)。 UNIX/Linux系统下的换行符在Windows系统的文本编辑器中会被忽略,整个文本会乱成一团。

8.2 格式转换(dos2unix、unix2dos)

        dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter)。DOS下的文本文件是以 \r\n 作为断行标志的,表示成十六进制就是0D 0A。而Unix下的文本文件是以 \n 作为断行标志的,表示成十六进制就是0ADOS格式的文本文件在Linux底下,用较低版本的 vi 打开时行尾会显示^M,而且很多命令都无法很好的处理这种格式的文件,如果是个shell脚本。而Unix格式的文本文件在Windows下用Notepad打开时会拼在一起显示。因此产生了两种格式文件相互转换的需求,对应的将UNIX格式文本文件转成成DOS格式的是unix2dos命令。

         而unix2dos则是和dos2unix互为孪生的一个命令,它是将Linux&Unix格式文件转换为Windows格式文件的命令。

语法:

dos2unix [-hkqV] [-c convmode] [-o file ...] [-n infile outfile ...]
unix2dos [options] [-c convmode] [-o file ...] [-n infile outfile ...]

选项:

参数 描述
-h 显示命令dos2unix联机帮助信息。
-k 保持文件时间戳不变
-q 静默模式,不输出转换结果信息等
-v 显示命令版本信息
-c 转换模式
-o 在源文件转换,默认参数
-n 保留原本的旧档,将转换后的内容输出到新档案.默认都会直接在原来的文件上修改

参数:

参数:需要转换到文件。

实例:

最简单的用法就是dos2unix直接跟上文件名:

dos2unix file

如果一次转换多个文件,把这些文件名直接跟在dos2unix之后。(注:也可以加上-o参数,也可以不加,效果一样)

dos2unix file1 file2 file3
dos2unix -o file1 file2 file3

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值