vi/vim是什么?

Linux世界几乎所有的配置文件都是以纯文本形式存在的,而在所有的Linux发行版系统上都有vi编辑器,因此利用简单的文字编辑软件就能够轻松地修改系统的各种配置了,非常方便。vi就是一种功能强大的文本编辑器,而vim则是高级版的vi,不但可以用不同颜色显示文字内容,还能进行诸如shell脚本、C语言程序编辑等功能,可以作为程序编辑器。

为什么要学习vi/vim?

首先所有的Linux发行版系统上都会默认内置vi编辑器,而不一定带有其他文本编辑器,非常通用;其次,很多软件的编辑接口都会默认调用vi;第三,vi具有程序编辑的能力;最后,vi程序简单,编辑速度相当快速。

vi的三种模式及各个模式之间的转换关系

一般模式常用操作

【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】 多次撤消

【.】 这是小数点键,重复上一个操作

一般模式切换到编辑模式的操作

进入插入模式(6个命令)

【i】 从目前光标所在处插入

【I】 从目前光标

【a】 从当前光标所在的下一个字符处开始插入

【A】 从光标所在行的最后一个字符处开始插入

【o】 英文小写字母o,在目前光标所在行的下一行处插入新的一行并开始插入

【O】 英文大写字母O,在目前光标所在行的上一行处插入新的一行并开始插入

进入替换模式(2个命令)

【r】 只会替换光标所在的那一个字符一次

【R】 会一直替换光标所在字符,直到按下[ESC]键为止

【[ESC]】 退出编辑模式回到一般模式

一般模式切换到命令行模式

【:w】 保存文件

【:w!】 若文件为只读,强制保存文件

【:q】 离开vi

【:q!】 不保存强制离开vi

【:wq】 保存后离开

【:wq!】 强制保存后离开

【:! command】 暂时离开vi到命令行下执行一个命令后的显示结果

【:set nu】 显示行号

【:set nonu】 取消显示行号

【:w newfile】 另存为

【:set fileencoding】 查看当前文件编码格式

【:set fileencoding=utf-8】 设置当前文件编码格式为utf-8,也可以设置成其他编码格式

【:set fileformat】 查看当前文件的断行格式(dos\windows,unix或macintosh)

【:set fileformat=unix】 将当前文件的断行格式设置为unix格式

文件恢复模式

【[O]pen Read-Only】 以只读方式打开文件

【[E]dit anyway】 用正常方式打开文件,不会载入暂存文件内容

【[R]ecover】 加载暂存文件内容

【[D]elete it】 用正常方式打开文件并删除暂存文件

【[Q]uit】 按下q就离开vi,不进行其他操作

【[A]bort】 与quit功能类似

块选择(一般模式下用)

【v,V】 v:将光标经过的地方反白选择;V:将光标经过的行反白选择

【[Ctrl] + v】 块选择,可用长方形的方式选择文本

【y】 将反白的地方复制到剪贴板

【d】 将反白的内容删除

多文件编辑

【vim file1 file2】 同时打开两个文件

【:n】 编辑下一个文件

【:N】 编辑上一个文件

【:files】 列出当前用vim打开的所有文件

多窗口功能

【:sp [filename]】 打开一个新窗口,显示新文件,若只输入:sp,则两窗口显示同一个文件

【[Ctrl] + w + j】 光标移动到下方窗口

【[Ctrl] + w + k】 光标移动到上方窗口

【[Ctrl] + w + q】 离开当前窗口

vim配置文件

vim的配置文件为/etc/vimrc,但一般不建议直接修改这个文件,而是在用户根目录下创建一个新的隐藏文件:

vim ~/.vimrc

然后编辑这个文件,常用的配置如下:

"双引号后面的内容为注释
set nu "显示行号
set hlsearch "查找的字符串反白显示
set backspace=2 "可随时用退格键进行删除
set autoindent "自动缩排
set ruler "在最下方一行显示状态
set showmode "在左下角显示模式
set bg=dark "显示不同的底色,还可以为light
syntax on "语法检验,颜色显示

Dos与Linux的断行字符(文件转化)

dos2unix [-kn] file [newfile]

unix2dos [-kn] file [newfile]

-k:保留该文件原本的mtime时间格式

-n:保留原本旧文件,将转换后的内容输出到新文件

语系编码转化

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

随机推荐

  1. iOS开发之--svn工具Cornerstone上传忽略.a文件的处理方法

    工程文件上传到svn中,.a文件会自动屏蔽(应该叫屏蔽,反正就是上传不上去) 用Cornerstone工具,解决这个问题 1.打开Cornerstone左上角,点Cornerstone->Pre ...

  2. jqGrid设置符合条件的行选中

    1.描述:在loadComplete的时候,符合zoneCode列不为null的被选中,第一列为zoeCode2.问题:已经获取到zoneCode不为null的列,但是该行一直没有选中.3.截图:4. ...

  3. URL中?和#的区别(关于SSRF)以及mysql的secure-file-priv

    零,绪论 20180125日,忙! 瞎比比总结一下,来满足这是个日记的样子. 1.今天谈的并不是什么技术[当然也不是没有技术(都很基础)]而是瞎几把扯. 一.关于一种SSRF的检测绕过: 1.背景: ...

  4. Linux安装好系统后优化

    author:headsen chen date: 2018-05-14 15:35:49 1.快速更改国内yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc ...

  5. Fragment、FragmentTabHost以及RadioGroup框架

    package com.dotfive.chuanbang.activity; import test.Fragment1; import test.Fragment1.OnBackListener; ...

  6. Go语言中的一些函数

    1.并行 通过使用goroutine和channel,go语言可以很好地支持并发,但是在我的电脑上是默认只使用一个核执行,要使用多核,在代码前面加入 import("runtime" ...

  7. vue根据数组对象中某个唯一标识去重

    由于在vue中,会自动在数组和对象中加入_obser__观察者模式的一些属性,所以直接用数组的filter去重(下面这种),indexOf不能准确识别 var arr = [1, 2, 2, 3, 4 ...

  8. angular 4 路由变化的时候实时监测刷新组件

    当路由变化的时候刷新组件 比如说要刷新header组件 在header.ts里 import {Router, NavigationEnd} from "@angular/router&qu ...

  9. 新浪博客:html+css+原生JS+Ajax初级+mySql数据库——源码

    **************************************************************************************************** ...

  10. Hibernate中的一对一映射关系

    Hibernate中的一对一映射关系有两种实现方法(单向一对一,和双向一对一)(一对一关系:例如一个department只能有一个manager) 单向和双向有什么区别呢??例如若是单向一对一,比如在 ...