龙之介大人

linux下的vim使用方法
5.1 为什么要学习vi与vim所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一...
扫描右侧二维码阅读全文
13
2019/08

linux下的vim使用方法

5.1 为什么要学习vi与vim

  • 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在;
  • 很多个别软件的编辑接口都会主动呼叫 vi (例如未来会谈到的 crontab, visudo, edquota 等指令);
  • vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计;
  • 因为程序简单,编辑速度相当快速。
  • 第二点,因为有太多 Linux 上面的指令都默认使用 vi 作为数据编辑的接口,所以必须、一定要学会vi否则很多指令你根本就无法操作.

5.2 vim的使用

基本上 vi 共分为三种模式,分别是『一般指令模式』、『编辑模式』与『指令列命令模式』。 这 三种模式的作用分别是:
  • 一般指令模式 (command mode)
以 vi 打开一个文件就直接进入一般指令模式了(这是默认的模式,也简称为一般模式)。在这个模 式中, 你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整列』来处 理文件内容, 也可以使用『复制、贴上』来处理你的文件数据。
  • 编辑模式 (insert mode)
在一般指令模式中可以进行删除、复制、贴上等等的动作,但是却无法编辑文件内容的! 要等到
你按下『i, I, o, O, a, A, r, R』等任何一个字母之后才会进入编辑模式。注意了!通常在 Linux
中,按下这些按键时,在画面的左下方会出现『 INSERT 或 REPLACE 』的字样,此时才可以进 行编辑。而如果要回到一般指令模式时, 则必须要按下『Esc』这个按键即可退出编辑模式。
  • 指令列命令模式 (command-line mode)
在一般模式当中,输入『 : / ? 』三个中的任何一个按钮,就可以将光标移动到最底下那一列。在 这个模式当中, 可以提供你『搜寻资料』的动作,而读取、存盘、大量取代字符、离开 vi 、显 示行号等等的动作则是在此模式中达成的!
  • 三种模式用图表示

注意上面的图标,你会发现一般指令模式可与编辑模式及指令列模式切换, 但编辑模式与指令列 模式之间不可互相切换.

5.3 vim按键的说明

  • 除了简易范例的 i, [Esc], :wq 之外,其实 vi 还有非常多的按键可以使用.

5.3.1 一般模式下的的按键说明

一般指令模式可用的按钮说明,光标移动、复制贴上、搜寻取代等
  • 移动光标的方法1
h 或 向左箭头键(←)光标向左移动一个字符
j 或 向下箭头键(↓)光标向下移动一个字符
k 或 向上箭头键(↑)光标向上移动一个字符
l 或 向右箭头键(→)光标向右移动一个字符
如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话,例如向下移动 30 列,可以使用 "30j" 或 "30↓" 的组合按键, 亦即加上想要进行的次数(数 字)后,按下动作即可!
  • 翻页的方法
[Ctrl] + [f]屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b]屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d]屏幕『向下』移动半页
[Ctrl] + [u]屏幕『向上』移动半页
  • 移动光标的方法2
+光标移动到非空格符的下一列
-光标移动到非空格符的上一列
n那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一列的 n 个字符。例如 20 则光标会向后面移动 20 个字符距离。
0 或功能键[Home]这是数字『 0 』:移动到这一列的最前面字符处 (常用)
$ 或功能键[End]移动到这一列的最后面字符处(常用)
H光标移动到这个屏幕的最上方那一列的第一个字符
M光标移动到这个屏幕的中央那一列的第一个字符
L光标移动到这个屏幕的最下方那一列的第一个字符
G移动到这个文件的最后一列(常用)
nGn 为数字。移动到这个文件的第 n 列。例如 20G 则会移动到这个文件的第 20 列(可 配合 :set nu)(常用)
gg移动到这个文件的第一列,相当于 1G 啊! (常用)
nn 为数字。光标向下移动 n 列(常用)
  • 搜寻与取代
/word向光标之下寻找一个名称为 word 的字符串。例如要在文件内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用)
?word向光标之上寻找一个字符串名称为 word 的字符串。 (常用)
n这个 n 是英文按键。代表『重复前一个搜寻的动作』。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串! (常用)
N这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird.(常用)
使用 /word 配合 n 及 N 是非常有帮助的!可以让你重复的找到一些你搜寻的关键词!
  • 搜寻与取代(进阶)
:n1,n2s/word1/word2/gn1 与 n2 为数字。在第 n1 与 n2 列之间寻找 word1 这个字符串,并将该字符串取代 为 word2 !举例来说,在 100 到 200 列之间搜寻 vbird 并取代为 VBIRD 则: 『:100,200s/vbird/VBIRD/g』。(常用)
:1,$s/word1/word2/g从第一列到最后一列寻找 word1 字符串,并将该字符串取代为 word2 !(常用)
:1,$s/word1/word2/gc从第一列到最后一列寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)
  • 删除、复制与贴上
x, X在一列字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字 符(相当于 [backspace] 亦即是退格键) (常用)
nxn 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。(常用)
dd删除游标所在的那一整列(常用)
nddn 为数字。删除光标所在的向下 n 列,例如 20dd 则是删除 20 列 (常用)
d1G删除光标所在到第一列的所有数据(常用)
dG删除光标所在到最后一列的所有数据(常用)
d$删除游标所在处,到该列的最后一个字符(常用)
d0那个是数字的 0 ,删除游标所在处,到该列的最前面一个字符
yy复制游标所在的那一列(常用)
nyyn 为数字。复制光标所在的向下 n 列,例如 20yy 则是复制 20 列(常用)
y1G复制光标所在列到第一列的所有数据
yG复制光标所在列到最后一列的所有数据
y0复制光标所在的那个字符到该列行首的所有数据
y$复制光标所在的那个字符到该列行尾的所有数据
p, Pp 为将已复制的数据在光标下一列贴上,P则为贴在游标上一列! 举例来说,我目前 光标在第 20 列,且已经复制了10列数据。则按下p 后,那10列数据会贴在原本的20列之后,亦即由21列开始贴。但如果是按下 P 呢? 那么原本的第20列会被推到变成30列。(常用)
J将光标所在列与下一列的数据结合成同一列
c重复删除多个数据,例如向下删除 10 列,[ 10cj](常用)
u复原前一个动作。(常用)
[Ctrl]+r重做上一个动作。(常用)
.这就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重 复贴上等等动作,按下小数点『.』就好了! (常用)
这个 u 与 [Ctrl]+r 是很常用的指令!一个是复原,另一个则是重做一次~ 利用这两个功能按键,你的编辑会非常方便.

5.3.2 一般指令模式切换到编辑模式的按键说明

进入插入或取代的编辑模式
i, I进入插入模式(Insert mode):
i 为『从目前光标所在处插入』,I 为『在目前所在列的第一个非空格符处开始插入』。 (常用)
a, A进入插入模式(Insert mode):
a 为『从目前光标所在的下一个字符处开始插入』, A 为『从光标所在列的最后一个 字符处开始插入』。(常用)
o, O进入插入模式(Insert mode):
这是英文字母 o 的大小写。o 为『在目前光标所在的下一列处插入新的一列』; O 为 在目前光标所在处的上一列插入新的一列!(常用)
r, R进入取代模式(Replace mode):
r 只会取代光标所在的那一个字符一次;R 会一直取代光标所在的文字,直到按下 ESC 为止;(常用)
[Esc]退出编辑模式,回到一般指令模式中(常用)
上面这些按键中,在 vi 画面的左下角处会出现『--INSERT--』或『--REPLACE--』的字样。

5.3.3 一般指令模式切换到指令列模式的按键说明

  • 指令列模式的储存、离开等指令
:w将编辑的数据写入硬盘文件中(常用)
:w!若文件属性为『只读』时,强制写入该文件。不过,到底能不能写入, 还是跟你对该文件 的文件权限有关啊!
:q离开 vi (常用)
:q!若曾修改过文件,又不想储存,使用 ! 为强制离开不储存文件。
:wq储存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ这是大写的 Z 喔!若文件没有更动,则不储存离开,若文件已经被更动过,则储存后离开!
:w [filename]将编辑的数据储存成另一个文件(类似另存新档)
:r [filename]在编辑的数据中,读入另一个文件的数据。亦即将 『filename』 这个文件内容加到游标 所在列后面
:n1,n2 w [filename]将 n1 到 n2 的内容储存成 filename 这个文件。
:! command暂时离开 vi 到指令列模式下执行 command 的显示结果!例如
『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的文件信息!
注意:惊叹号 (!) 在 vi 当中,常常具有『强制』的意思.
  • vim 环境的变更
:set nu显示行号,设定之后,会在每一列的前缀显示该列的行号
:set nonu与 set nu 相反,为取消行号!
  • 特别注意,在 vi 中,『数字』是很有意义的!数字通常代表重复做几次的意思! 也有可能是代表 去到第几个什么什么的意思。
举例来说,要删除 50 列,则是用 『50dd』! 数字加在动作之
前~那我要向下移动 20 列?那就是『20j』或者是『20↓』.

5.4 vim的暂存档,救援恢复和开启时的警告

当我们在使用 vim 编辑时, vim 会在与被编辑的文件的目录下,再建立一个名为 .filename.swp 的 文件。
  • 模拟vim奔溃环境
[xiaoqi@study vitest]$ vim man_db.conf 

[1]+  已停止               vim man_db.conf    #ctrl+z vim会进入后台
[xiaoqi@study vitest]$ ls -la
总用量 24
drwxrwxr-x.  2 xiaoqi xiaoqi   69 8月  12 18:22 .
drwxrwxrwt. 20 root   root   4096 8月  12 12:48 ..
-rw-rw-r--.  1 xiaoqi xiaoqi 4851 8月  12 11:59 man_db.conf
-rw-r--r--.  1 xiaoqi xiaoqi 4096 8月  12 18:22 .man_db.conf.swp        #这个就是暂存文件

[xiaoqi@study vitest]$ kill -9 %1        #模拟vim奔溃

[1]+  已停止               vim man_db.conf

[xiaoqi@study vitest]$ ls -la
-rw-r--r--.  1 xiaoqi xiaoqi 4096 8月  12 18:22 .man_db.conf.swp        #暂存文件还是存在


这时继续使用vim编辑这个文件会提示非法退出vim的错误详情和暂存文件的位置
[xiaoqi@study vitest]$ vim man_db.conf 
E325: 注意
发现交换文件 ".man_db.conf.swp"
            所有者: xiaoqi    日期: Mon Aug 12 18:22:54 2019
            文件名: /tmp/vitest/man_db.conf
            修改过: 否
            用户名: xiaoqi      主机名: study.centos.xiaoqi
           进程 ID: 10184
正在打开文件 "man_db.conf"
              日期: Mon Aug 12 11:59:17 2019

(1) Another program may be editing the same file.  If this is the case,
    be careful not to end up with two different instances of the same
    file when making changes.  Quit, or continue with caution.
(2) An edit session for this file crashed.
    如果是这样,请用 ":recover" 或 "vim -r man_db.conf"
    恢复修改的内容 (请见 ":help recovery")。
    如果你已经进行了恢复,请删除交换文件 ".man_db.conf.swp"
    以避免再看到此消息。

交换文件 ".man_db.conf.swp" 已存在!
以只读方式打开([O]), 直接编辑((E)), 恢复((R)), 删除交换文件((D)), 退出((Q)), 中止((A)):

5.4.1 vim出现暂存文件原因和解决方案

  • 问题一:可能有其他人或程序同时在编辑这个文件
找到另外那个程序或人员,请他将该 vim 的工作结束,然后你再继续处理。
如果你只是要看该文件的内容并不会有任何修改编辑的行为,那么可以选择开启成为只读(O)文件, 亦即上述画面反白部分输入英文『 o 』即可,其实就是 [O]pen Read-Only 的选项
  • 问题二:在前一个 vim 的环境中,可能因为某些不知名原因导致 vim 中断 (crashed):
如果你之前的 vim 处理动作尚未储存,此时你应该要按下『R』,亦即使用 (R)ecover 的项目, 此 时 vim 会载入 .man_db.conf.swp 的内容,让你自己来决定要不要储存!这样就能够救回来你之前 未储存的工作。不过那个 .man_db.conf.swp 并不会在你结束 vim 后自动删除,所以你离开 vim 后 还得要自行删除 .man_db.conf.swp 才能避免每次打开这个文件都会出现这样的警告!

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

5.4.2 暂存盘警告讯息的画面中可用按钮说明

  • [O]pen Read-Only
打开此文件成为只读档, 可以用在你只是想要查阅该文件内容并不想要进行编辑行为 时。一般来说,在上课时,如果你是登入到同学的计算机去看他的配置文件, 结果发现其实同学他自己也 在编辑时,可以使用这个模式;
  • (E)dit anyway
还是用正常的方式打开你要编辑的那个文件, 并不会载入暂存盘的内容。不过很容易出现
两个使用者互相改变对方的文件等问题!
  • (R)ecover
就是加载暂存盘的内容,用在你要救回之前未储存的工作。 不过当你救回来并且储存离开 vim 后,还是要手动自行删除那个暂存档
  • (D)elete it
你确定那个暂存档是无用的!那么开启文件前会先将这个暂存盘删除! 这个动作其实是比较常 做的!因为你可能不确定这个暂存档是怎么来的.
  • (Q)uit
按下 q 就离开 vim ,不会进行任何动作回到命令提示字符。
  • (A)bort
忽略这个编辑行为,感觉上与 quit 非常类似! 也会送你回到命令提示字符!

5.5 vim的额外功能

  • 区块选择
192.168.1.1    host1.class.net
192.168.1.2    host2.class.net
192.168.1.3    host3.class.net
192.168.1.4    host4.class.net
192.168.1.5    host5.class.net
192.168.1.6    host6.class.net
192.168.1.7    host7.class.net
192.168.1.8    host8.class.net
192.168.1.9    host9.class.net
假设我想要将 host1, host2... 等等复制起来, 并且加到每一 列的后面,亦即每一列的结果要是『 192.168.1.2 host2.class.net host2 』这样的情况时, 在传统或现 代的窗口型编辑器似乎不容易达到这个需求,但是咱们的 vim 是办的到的.
  • 区块选择的按键意义
v字符选择,会将光标经过的地方反白选择!
V列选择,会将光标经过的列反白选择!
[Ctrl]+v区块选择,可以用长方形的方式选择资料
y将反白的地方复制起来
d将反白的地方删除掉
p将刚刚复制的区块,在游标所在处贴上!
  • 实际操作
  1. 使用 vim hosts 来开启该文件,记得该文件请由上述的连结下载先!
  2. 将光标移动到第一列的 host 那个 h 上头,然后按下 [ctrl]-v ,左下角出现区块示意字样.
  3. 将光标移动到最底部,此时光标移动过的区域会反白!
  4. 此时你可以按下『 y 』来进行复制,当你按下 y 之后,反白的区块就会消失不见
  5. 最后,将光标移动到第一列的最右边,并且再用编辑模式向右按两个空格键,回到一般指令模式后,再按下『 p 』后粘贴
192.168.1.1    host1.class.net  host1
192.168.1.2    host2.class.net  host2
192.168.1.3    host3.class.net  host3
192.168.1.4    host4.class.net  host4
192.168.1.5    host5.class.net  host5
192.168.1.6    host6.class.net  host6
192.168.1.7    host7.class.net  host7
192.168.1.8    host8.class.net  host8
192.168.1.9    host9.class.net  host9

5.6 多窗口功能

  • 在一般窗口接口下的编辑软件大多有『分区窗口』或者是『冻结窗口』的功能来将一个文件分区成多 个窗口的展现.
vim的多窗口在指令列模式输入『:sp {filename}』即可!那个 filename 可有可无, 如果想要在新窗口启 动另一个文件,就加入档名,否则仅输入 :sp 时, 出现的则是同一个文件在两个窗口间
  • 多窗口情况下的按键功能
:sp [filename]开启一个新窗口,如果有加 filename, 表示在新窗口开启一个新文件,否则表示两个窗口 为同一个文件内容(同步显示)。
[ctrl]+w+ j [ctrl]+w+↓按键的按法是:先按下 [ctrl] 不放, 再按下 w 后放开所有的按键,然后再按下 j (或向 下箭头键),则光标可移动到下方的窗口。
[ctrl]+w+ k [ctrl]+w+↑同上,不过光标移动到上面的窗口。
[ctrl]+w+ q其实就是 :q 结束离开啦! 举例来说,如果我想要结束下方的窗口,那么利用 [ctrl]+w+↓ 移动到下方窗口后,按下 :q 即可离开, 也可以按下 [ctrl]+w+q 啊!

5.7 vim 环境设定与记录

~/.vimrc, ~/.viminfo
  • vim的环境设定参数
:set nu :set nonu就是设定与取消行号啊!
:set hlsearch :set nohlsearchhlsearch 就是 high light search(高亮度搜寻)。 这个就是设定是否将搜寻的字符串反白的设定值。默认值是 hlsearch
:set autoindent :set noautoindent是否自动缩排?autoindent 就是自动缩排。
:set backup是否自动储存备份档?一般是 nobackup 的, 如果设定 backup 的话,那么当你更动任 何一个文件时,则源文件会被另存成一个档名为 filename~ 的文件。 举例来说,我们 编辑 hosts ,设定 :set backup ,那么当更动 hosts 时,在同目录下,就会产生 hosts~ 文件名的文件,记录原始的 hosts 文件内容
:set ruler还记得我们提到的右下角的一些状态栏说明吗? 这个 ruler 就是在显示或不显示该设 定值的啦!
:set showmode这个则是,是否要显示 --INSERT-- 之类的字眼在左下角的状态栏。
:set backspace=(012)一般来说, 如果我们按下 i 进入编辑模式后,可以利用退格键 (backspace) 来删除任 意字符的。 但是,某些 distribution 则不许如此。此时,我们就可以透过 backspace 来设定啰~ 当 backspace 为 2 时,就是可以删除任意值;0 或 1 时,仅可删除刚刚 输入的字符, 而无法删除原本就已经存在的文字了!
:set all显示目前所有的环境参数设定值。
:set显示与系统默认值不同的设定参数, 一般来说就是你有自行变动过的设定参数啦!
:syntax on :syntax off是否依据程序相关语法显示不同颜色? 举例来说,在编辑一个纯文本档时,如果开头是以 # 开始,那么该列就会变成蓝色。 如果你懂得写程序,那么这个 :syntax on 还会主动的帮你除错呢!但是, 如果你仅是编写纯文本文件,要避免颜色对你的屏幕产生的干扰,则可以取消这个设定 。
:set bg=dark :set bg=light可用以显示不同的颜色色调,预设是『 light 』。如果你常常发现批注的字体深蓝色实在很不容易看, 那么这里可以设定为 dark 喔!试看看,会有不同的样式呢!
整体 vim 的设定值一般是放置在 /etc/vimrc 这个文件,不过,不建议你修改他! 你可以修改 ~/.vimrc 这 个文件 (预设不存在,请你自行手动建立!)
set hlsearch            "高亮度反白
set backspace=2        "可随时用退格键删除
set autoindent        "自动缩排
set ruler                "可显示最后一列的状态
set showmode            "左下角那一列的状态
set nu                    "可以在每一列的最前面显示行号啦! "显示不同的底色色调
set bg=dark            "可以在每一列的最前面显示行号啦!
syntax on                "显示不同的底色色调 "进行语法检验,颜色显示。 

5.8 中文编码的问题

  1. 你的 Linux 系统默认支持的语系数据:这与 /etc/locale.conf 有关;
  2. 你的终端界面 (bash) 的语系: 这与 LANG, LC_ALL 这几个变数有关;
  3. 你的文件原本的编码;
  4. 开启终端机的软件,例如在 GNOME 底下的窗口接口。
事实上最重要的是上头的第三与第四点,只要这两点的编码一致,你就能够正确的看到与编辑你的中 文文件。 否则就会看到一堆乱码
  • 修正语系编码
[dmtsai@study ~]$ LANG=zh_CN.utf-8 
[dmtsai@study ~]$ export LC_ALL=zh_CN.utf-8 

5.9 DOS 与 Linux 的断行字符

曾经提到过 DOS 与 Linux 断行字符的不同。 而我们也可 以利用 cat -A 来观察以 DOS (Windows 系统) 建立的文件的特殊格式, 也可以发现在 DOS 使用 的断行字符为^M$我们称为 CR 与 LF 两个符号。 而在 Linux 底下,则是仅有 LF $ 这个断 行符号。
我们说过,在 Linux 底下的指令在开始执行时,他的判断依据是 『Enter』,而 Linux 的 Enter 为 LF 符号, 不过,由于 DOS 的断行符号是 CRLF ,也就是多了一个^M的符号出来, 在这样的 情况下,如果是一个 shell script 的程序文件,将可能造成『程序无法执行』的状态~ 因为他 会误判程序所下达的指令内容.

5.9.1 安装dos2unix包

  • 联网情况下安装
[xiaoqi@study ~]$ su
[root@study xiaoqi]# yum -y install dos2unix
  • 未联网情况下安装
[root@study ~]# mount /dev/sr0 /mnt
[root@study ~]# rpm -ivh /mnt/Packages/dos2unix-*
[root@study ~]# umount /mnt
  • dos2unix使用方法
[dmtsai@study ~]$ dos2unix [-kn] file [newfile]
[dmtsai@study ~]$ unix2dos [-kn] file [newfile]
选项与参数:
-k :保留该文件原本的 mtime 时间格式 (不更新文件上次内容经过修订的时间) 
-n :保留原本的旧档,将转换后的内容输出到新文件,如: dos2unix -n old new 

#将man_db.conf修改为dos断行字符
[root@study vitest]# unix2dos -k man_db.conf 
unix2dos: converting file man_db.conf to DOS format ...
# 容量变化
[root@study vitest]# ll -h /etc/man_db.conf man_db.conf 
-rw-r--r--. 1 root   root   5.1K 6月  10 2014 /etc/man_db.conf
-rw-rw-r--. 1 xiaoqi xiaoqi 5.2K 8月  14 20:15 man_db.conf
# cat -A 显示为dos断行
[root@study vitest]# cat -A man_db.conf 
# ^M$
# ^M$

# 将上述的 man_db.conf 转成 Linux 断行字符,并保留旧文件,新档放于 man_db.conf.linux
[root@study vitest]# dos2unix -k -n man_db.conf  man_db.conf.linux 
dos2unix: converting file man_db.conf to file man_db.conf.linux in Unix format ...

[root@study vitest]# ll
总用量 24
-rw-r--r--. 1 root   root   5171 8月  14 20:15 man_db.conf
-rw-r--r--. 1 root   root   5171 8月  14 20:15 man_db.conf.linux
  
[root@study vitest]# file man_db.conf*
man_db.conf:       ASCII text
man_db.conf.linux: ASCII text

5.10 语系编码转换

想要将 big5 编码转成 utf8 。
这个时候怎么办?难不成要每个文件打开会转存成 utf8 吗?不需要这样做!使用 iconv 这个指令 即可!
[root@study vitest]# iconv --list

[root@study vitest]# iconv -f 原本编码 -t 新编码 filename [-o newfile] 
选项与参数:
--list :列出 iconv 支持的语系数据
-f :from ,亦即来源之意,后接原本的编码格式;
-t :to ,亦即后来的新编码要是什么格式;
-o file:如果要保留原本的文件,那么使用 -o 新档名,可以建立新编码文件。

# 将 /tmp/vitest/vi.big5 转成 utf8 编码
[root@study vitest]# iconv -f big5 -t utf8 vi.big5 -o vi.utf8

[root@study vitest]# file vi*
vi.big5: ISO-8859 text, with CRLF line terminators
vi.utf8: UTF-8 Unicode text, with CRLF line terminators
  • 如果是要将繁体中文的utf8转成简体中文的utf8编码时
[root@study vitest]# iconv -f utf8 -t big5 vi.utf8 | \
> iconv -f big5 -t gb2312 | iconv -f gb2312 -t utf8 -o vi.gb.utf8

5.10 vim常用指令表


最后修改:2019 年 08 月 22 日 02 : 59 PM

发表评论