Loading... VI 编辑器是 Linux 和 Unix 上最基本的文本编辑器,工作在字符模式下。由于不需要图形界面,VI 是效率很高的文本编辑器。尽管在 Linux 上也有很多图形界面的编辑器可用,但vi在系统和服务器管理中的功能是那些图形编辑器所无法比拟的。 还有一个 VI 改进版叫 VIM,主要加入了一些代码高亮功能,操作方法和 VI 差不多,因为 VI 是每种 Linux 都有的编辑器,所以这里就只说 VI。 ## 基本操作 通过 VI 打开文件: VI 打开文件的方法是 `vi + 空格 + 文件名`,例如我要打开 `home` 目录下的 `1.php`:  这个 `1.php` 文件里有一些内容,可以用 键盘的 **上 下 左 右** 来控制编辑器的光标,不过现在还不能编辑,如果要编辑的话可以按 **i** ,一般的输入和 windows 的差不多,如果要退出编辑模式的话可以按 **ESC** ,按 **ESC** 后会退出编辑模式,但不会退出 VI。 保存: 保存文件需要在退出编辑模式的情况下输入命令, 下面是操作命令: | 命令 | 说明 | | ------ | ------------------ | | :w | 保存 | | :wq | 保存并退出vi | | :q! | 不保存直接退出vi | 注意!命令前面的**冒号** 不能少,还有 `q` 后面的**叹号** 也不能少,下面掩饰保存退出: ``` :wq ``` 输入完成后按下 **回车** 就可以保存退出了。 ## 快捷键 下面是 VI 的一些快捷键,需要退出编辑模式才可用: | 快捷键 | 说明 | | -------- | ---------------- | | u | 撤销 | | x | 删除 | | v | 选择文本 | | y | 复制 | | yy | 复制光标所在行 | | dd | 删除光标所在行 | | p | 粘贴 | 这里的 **u** 就类似 windows 的编辑器的 **ctrl + z** 撤销。**x** 删除光标选中的文字,如果在编辑模式下也可以按 **退格键** 删除。按住 **v** 移动光标可选择文字,类似于 windows 编辑器的 **shift** 。**y** 可以复制选中的文字。连续按两次 **y** 可以复制光标所在行,连续按两次 **d** * 可以删除光标所在行,**p** 粘贴,类似于 windows 的 **ctrl + v** 。注意!上面说的快捷键需要退出编辑模式才能用。 ## 一般模式常用操作 <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-e9315a8e51afe0bd6630265fcdbf567449" aria-expanded="true"><div class="accordion-toggle"><span>一般模式常用操作</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-e9315a8e51afe0bd6630265fcdbf567449" class="collapse collapse-content"><p></p> ``` 【h(或向左方向键)】 光标左移一个字符 【j(或向下方向键)】 光标下移一个字符 【k(或向上方向键)】 光标上移一个字符 【l(或向右方向键)】 光标右移一个字符 【[Ctrl] + f】 屏幕向下移动一页(相当于Page Down键) 【[Ctrl] + b】 屏幕向上移动一页(相当于Page Up键) 【[0]或[Home]】 光标移动到当前行的最前面 【[$]或[End]】 光标移动到当前行的末尾 【G】 光标移动到文件的最后一行(第一个字符处) 【nG】 n为数字(下同),移动到当前文件中第n行 【gg】 移动到文件的第一行,相当于"1G" 【n[Enter]】 光标向下移动n行 【/word】 在文件中查找内容为word的字符串(向下查找) 【?word】 在文件中查找内容为word的字符串(向上查找) 【[n]】 表示重复查找动作,即查找下一个 【[N]】 反向查找下一个 【:n1,n2s/word1/word2/g】 n1、n2为数字,在第n1行到第n2行之间查找word1字符串,并将其替换成word2 【:1,$s/word1/word2/g】 从第一行(第n行同理)到最后一行查找word1注册,并将其替换成word2 【:1,$s/word1/word2/gc】 功能同上,只不过每次替换时都会让用户确认 【x,X】 x为向后删除一个字符,相当于[Delete],X为向前删除一个字符,相当于[Backspace] 【dd】 删除光标所在的一整行 【ndd】 删除光标所在的向下n行 【yy】 复制光标所在的那一行 【nyy】 复制光标所在的向下n行 【p,P】 p为将已经复制的数据在光标下一行粘贴;P为将已经复制的数据在光标上一行粘贴 【u】 撤消上一个操作 【[Ctrl] + r】 多次撤消 【.】 这是小数点键,重复上一个操作 ``` <p></p></div></div></div> ## 一般模式切换到编辑模式的操作 <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-0cea032e9ea6c74db8b8fb38cd4df7ed63" aria-expanded="true"><div class="accordion-toggle"><span>1、进入插入模式(6个命令)</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-0cea032e9ea6c74db8b8fb38cd4df7ed63" class="collapse collapse-content"><p></p> ``` 【i】 从目前光标所在处插入 【I】 从目前光标 【a】 从当前光标所在的下一个字符处开始插入 【A】 从光标所在行的最后一个字符处开始插入 【o】 英文小写字母o,在目前光标所在行的下一行处插入新的一行并开始插入 【O】 英文大写字母O,在目前光标所在行的上一行处插入新的一行并开始插入 ``` <p></p></div></div></div> <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-3fa074e5926fb2f5f304479f2a46284e30" aria-expanded="true"><div class="accordion-toggle"><span>2、进入替换模式(2个命令)</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-3fa074e5926fb2f5f304479f2a46284e30" class="collapse collapse-content"><p></p> ``` 【r】 只会替换光标所在的那一个字符一次 【R】 会一直替换光标所在字符,直到按下[ESC]键为止 【[ESC]】 退出编辑模式回到一般模式 ``` <p></p></div></div></div> ## 一般模式切换到命令行模式 <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-cd3b5ed27cbf2d046565a74cfb56dab664" aria-expanded="true"><div class="accordion-toggle"><span>一般模式切换到命令行模式</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-cd3b5ed27cbf2d046565a74cfb56dab664" class="collapse collapse-content"><p></p> ``` 【:w】 保存文件 【:w!】 若文件为只读,强制保存文件 【:q】 离开vi 【:q!】 不保存强制离开vi 【:wq】 保存后离开 【:wq!】 强制保存后离开 【:! command】 暂时离开vi到命令行下执行一个命令后的显示结果 【:set nu】 显示行号 【:set nonu】 取消显示行号 【:w newfile】 另存为 ``` <p></p></div></div></div> ## 文件恢复模式 <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-e5cc027fb07f520d9c2fd67503d8761f2" aria-expanded="true"><div class="accordion-toggle"><span>文件恢复模式</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-e5cc027fb07f520d9c2fd67503d8761f2" class="collapse collapse-content"><p></p> ``` 【[O]pen Read-Only】 以只读方式打开文件 【[E]dit anyway】 用正常方式打开文件,不会载入暂存文件内容 【[R]ecover】 加载暂存文件内容 【[D]elete it】 用正常方式打开文件并删除暂存文件 【[Q]uit】 按下q就离开vi,不进行其他操作 【[A]bort】 与quit功能类似 ``` <p></p></div></div></div> ## 块选择(一般模式下用) <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-9edfcc36dcedeb2016df2df8de5c425079" aria-expanded="true"><div class="accordion-toggle"><span>块选择(一般模式下用)</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-9edfcc36dcedeb2016df2df8de5c425079" class="collapse collapse-content"><p></p> ``` 【v,V】 v:将光标经过的地方反白选择;V:将光标经过的行反白选择 【[Ctrl] + v】 块选择,可用长方形的方式选择文本 【y】 将反白的地方复制到剪贴板 【d】 将反白的内容删除 ``` <p></p></div></div></div> ## 多文件编辑 <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-3483e53dfd5e40191a707bc3bc9fc2a814" aria-expanded="true"><div class="accordion-toggle"><span>多文件编辑</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-3483e53dfd5e40191a707bc3bc9fc2a814" class="collapse collapse-content"><p></p> ``` 【vim file1 file2】 同时打开两个文件 【:n】 编辑下一个文件 【:N】 编辑上一个文件 【:files】 列出当前用vim打开的所有文件 ``` <p></p></div></div></div> ## 多窗口功能 <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-75e9356931b61e044e3965e7f611d9c849" aria-expanded="true"><div class="accordion-toggle"><span>多窗口功能</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-75e9356931b61e044e3965e7f611d9c849" class="collapse collapse-content"><p></p> ``` 【:sp [filename]】 打开一个新窗口,显示新文件,若只输入:sp,则两窗口显示同一个文件 【[Ctrl] + w + j】 光标移动到下方窗口 【[Ctrl] + w + k】 光标移动到上方窗口 【[Ctrl] + w + q】 离开当前窗口 ``` <p></p></div></div></div> ## vim配置文件 <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-6d1ab8fb46de57c525ba8bde74c8b89162" aria-expanded="true"><div class="accordion-toggle"><span>vim配置文件</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-6d1ab8fb46de57c525ba8bde74c8b89162" class="collapse collapse-content"><p></p> ``` vim的配置文件为/etc/vimrc,但一般不建议直接修改这个文件,而是在用户根目录下创建一个新的隐藏文件: vim ~/.vimrc 然后编辑这个文件,常用的配置如下: "双引号后面的内容为注释 set nu "显示行号 set hlsearch "查找的字符串反白显示 set backspace=2 "可随时用退格键进行删除 set autoindent "自动缩排 set ruler "在最下方一行显示状态 set showmode "在左下角显示模式 set bg=dark "显示不同的底色,还可以为light syntax on "语法检验,颜色显示 ``` <p></p></div></div></div> ## Dos与Linux的断行字符(文件转化) <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-df06c9bd7412a8caaefb7379b9cfc31359" aria-expanded="true"><div class="accordion-toggle"><span>Dos与Linux的断行字符(文件转化)</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-df06c9bd7412a8caaefb7379b9cfc31359" class="collapse collapse-content"><p></p> ``` dos2unix [-kn] file [newfile] unix2dos [-kn] file [newfile] -k:保留该文件原本的mtime时间格式 -n:保留原本旧文件,将转换后的内容输出到新文件 ``` <p></p></div></div></div> ## 语系编码转化 <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-4b8bd3e526765001afeb22b7075485a139" aria-expanded="true"><div class="accordion-toggle"><span>语系编码转化</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-4b8bd3e526765001afeb22b7075485a139" class="collapse collapse-content"><p></p> ``` iconv --list 列出iconv支持的语系编码 iconv -f 原本编码 -t 新编码 filename [-o new file] -f:from,后接原本的编码格式 -t:to,后接新编码格式 -o file:可选参数,建立新文件 例:将/tmp/a.txt从big5编码格式转换成utf8编码格式: iconv -f big5 -t utf8 /tmp/a.txt -o new.txt ``` <p></p></div></div></div> 相关文章 ESXi安装爱快iKuai Openwrt双软路由-科学上网 typecho文章页添加相关文章列表 在Linux下添加|修改Swap分区教程 Linux下一键安装BBR加速VPS Linux发行版安装wget的命令整理 Typecho插件及主题 持续更新 最后修改:2022 年 04 月 02 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏
2 条评论
真是真金不怕火炼。瞬间仿佛回到了二十年前上Linux课的时代,哈哈
作为一名单位网管我竟然经常忘记命令,只好记录备查,主要用的少基本上都是外包公司解决,生疏了啊!