在工作中,要对服务器上的文件进行的修改,可以使用ssh远程登录到服务器上,并且使用vi进行快速的编辑即可,在没有图形界面的环境下,要编辑文件,vi是最佳选择!

vi命令是Linux中最经典的文本编辑器,其核心设计思想是"让程序员的手指始终保持在键盘的核心区域,就能完成所有的编辑操作"。

那么vi与vim又有什么区别呢,可以简单理解为vim(vi improved vi增强版)是vi(Visual Interface 可视化接口)的升级版。在编辑一个文本时,vi不会显示颜色,而vim会显示颜色。显示颜色更易于用户进行编辑,其他功能没有什么区别。所以在linux系统下,使用vi还是vim完全取决你的个人爱好而已。

在很多 Linux 发行版中,直接把vi做成vim的软连接(也就是将vi做成vim的快捷键)

如果刚刚安装的CentOS系统上没有这个命令,请这样安装它

yum install -y vim-enhanced

2、vim/vi命令的使用

2.1三种模式

vim有三种基本工作模式:命令模式(打开文件首先进入命令模式,是使用vi的入口,通过命令对文件进行常规的编辑操作,例如:定位、翻页、复制、粘贴、删除……),编辑模式(正常的编辑文字)和末行模式(执行保存、退出等操作)。这三种模式的叫法不是很统一。

2.2、打开文件

在终端中输入vi在后面跟上文件名即可

$ vi 文件名

如果文件已经存在,会直接打开该文件,如果文件不存在,会新建一个文件。

在日常工作中,有可能会遇到打开一个文件,并定位到指定行的情况,例如在开发时,知道某一行代码有错误(异常栈)

可以快速定位到出错代码的位置,这个时候可以使用以下命令打开文件

$ vi 文件名 +行数

如果只带上+而不指定行号,会直接定位到文件末尾.

如果vi异常退出在磁盘上可能会保存有交换文件(.hello.py.swp,这是一个交换文件),

下次再使用vi编辑该文件时,会看到以屏下幕信息,按下字母d可以删除交换文件即可,但是要注意关闭中文输入法!

2.3、关闭文件

:w  (write)
将编辑过的文本保存
:w!
若文本属性为只读时,强制保存
:q  (quit)
退出,如果没有保存,不允许退出
:q!
不保存退出
:wq  (write&quit)
保存并退出
:x
保存并退出

:wq 强制性写入文件并退出。即使文件没有被修改也强制写入,并更新文件的修改时间。

:x 写入文件并退出。仅当文件被修改时才写入,并更新文件修改时间,否则不会更新文件修改时间。
所以推荐使用:x

2.4、光标跳转

要熟练使用vi,首先应该学会怎么在命令模式下样快速移动光标

1)上下左右的移动(不使用方向键)

每次移动一个字符·

命令 功能 手指
h 食指
j 食指
k 中指
l 无名指

这是由于vi的设计者认为手指从键盘区域到方向键的来回切换影响效率。

2)行内移动

命令 功能
w 向后移动一个单词
b 向前移动一个单词
0 移动到本行绝对行首
^ 移动到本行行首第一个非空白字符
$ 移动到本行绝对行尾

3)行间移动

g:go

命令 功能
gg 移动到该文本的第1行
G 光标移动到文本的最后1行
ngg 移动到该文本的第n行
:n 移动到该文本的第n行

ngg和:n的功能是等价的~

:set nu显示行号,然后:num就跳到那一行,可以配合使用

2.5、插入命令

vi中除了常用的i进入编辑模式外,还提供了以下命令同样可以进入编辑模式:

命令 英文 功能
i insert 在当前字符前插入文本
I insert 在行首插入文本
a append 在当前字符后添加文本
A append 在行末添加文本
o   在当前行后面插入一空行
O   在当前行前面插入一空行

光标在"是"的位置

case1:编辑命令和数字连用

在开发中,可能会遇到连续输入 N 个同样的文本,例如:********** 连续 10 个星号

要实现这个效果可以在 命令模式 下

  1. 输入 10,表示要重复 10 次
  2. 输入 i 进入 编辑模式
  3. 输入 * 也就是重复的文字
  4. 按下 ESC 返回到 命令模式,返回之后 vi 就会把第 2、3 两步的操作重复 10 次

case2:利用 可视块 给多行代码增加注释

在开发中,可能会遇到一次性给多行代码 增加注释 的情况

要实现这个效果可以在 命令模式 下

  1. 移动到要添加注释的 第 1 行代码,按 ^ 来到行首
  2. 按 CTRL + v 进入 可视块 模式(--VISUAL BLOCK-- )
  3. 使用 j 向下连续选中要添加的代码行
  4. 输入 I 进入 编辑模式,并在 行首插入,注意:一定要使用 行首插入大写的I。
  5. 输入 # 也就是注释符号
  6. 按下 ESC 返回到 命令模式,返回之后 vi 会在之前选中的每一行代码  插入 #

2.6、删除操作

x  (cut)
删除光标所在处的单个字符或者选中文字
nx(n为数字)
删除光标所在处及向后的共n个字符
D
删除光标所在处至行尾的字符
dd
删除光标所在的那一行
ndd(n为数字)
删除包括当前光标所在行在内的n行
d1G
删除光标所在行到第一行的所有数据
d^
删除至行首(光标所在的字符不会删除)
d$
从当前字符删除至行尾(光标所在的字符会删除)
dG
删除光标所在行到末行的所有数据

删除命令(d)可以和移动命令(^,$,G)连用,以下是常见的组合命令:

* dw        # 从光标位置删除到单词末尾
* d0        # 从光标位置删除到一行的起始位置
* d}        # 从光标位置删除到段落结尾
* ndd       # 从光标位置向下连续删除 n 行
* d代码行G   # 从光标所在行 删除到 指定代码行 之间的所有代码
* d'a       # 从光标所在行 删除到 标记a 之间的所有代码

2.7、复制操作

学习复制命令前,应该先学会怎么样选中要复制的代码,vi中要选择文本,需要先使用v命令将命令模式切换到可视模式,vi中提供了三种可视模式,可以方便程序员选择选中文本的方式,ESC可以放弃选中,返回到命令模式。

命令 模式 功能
v 可视模式 从光标位置开始按照正常模式选择文本
V 可视行模式 选中光标经过的完整行
Ctrl + v 可视块模式 垂直方向选中文本

可视模式下,结合方向键可以看到被选中的文本~(按照字符逐个选中)

行模式,结合方向键(此时不要按住shift键)会选中光标所经过的完整行~

快模式,结合方向键(mac ctrl command)

可视模式下,可以和 移动命令 连用,例如:ggVG 能够选中所有内容

yy
复制光标所在的那行
nyy
复制从光标所在行起向下n行(包含光标所在行)
y1G
复制光标所在行到第一行的所有数据
yG
复制光标所在行到末行的所有数据

2.8、粘贴操作

p
如果删除或复制为整行内容,则粘贴至光标所在行的下方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的后面
P
如果删除或复制为整行内容,则粘贴至光标所在行的上方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的前面

2.9、查找操作

/pattern
光标之寻找pattern字符串,查找到指定内容之后,按"n(next)"查找下一个,"N"查找上一个
?pattern
光标之寻找pattern字符串,按"n"继续搜前一个

输入/pattern和?pattern,按下回车之后,vim会把光标移动到该字符处并高亮了匹配的字符串使用/pattern按下n查找下一个,

我们一直按n到最后,红色的字提示BOTTOM(已经到底了,尽头了),说明匹配的字符串已经到此处是最后一个。再按n会回到TOP(第一个匹配成功的字符串)
那么如何跳转到上一个匹配呢?按下N(大写N)。

2.10、查找并替换

vi中查找和替换命令需要在末行模式下执行

1) 全局替换

一次性替换文件中的所有出现的旧文本

:%s/旧文本/新文本/g

2) 选中区域替换

先选中要替换文字的范围

:s/旧文本/新文本/g

红框中的部分是vi自动加上的,不用理会~

3) 确认替换(替换之前需要确认)

如果把末尾的g改成gc在替换的时候,会有提示!推荐使用!

:%s/旧文本/新文本/gc

y - yes 替换

n - no 不替换

a - all 替换所有

q - quit 退出替换

l - last 最后一个,并把光标移动到行首

^E 向下滚屏

^Y 向上滚屏

按下y就会替换一个,n就是忽略一个。a就是替换所有

2.11、撤销操作

需要在命令模式下执行。

u  (undo)
撤消前一次的编辑操作
nu 直接撤消最近n次编辑操作
Ctrl+r  (redo)
恢复撤销的命令

2.12、其他操作

需要在命令模式下执行。

:set nu
在每行的行首显示行号
:set nonu
取消行号
VIM技巧:
在命令模式下,先输入一个数字,再跟上一个命令,可以让该命令 重复执行指定次数

vim/vi 命令详解的更多相关文章

  1. Linux——vi命令详解

    转载 Linux--vi命令详解   原文链接:https://blog.csdn.net/cyl101816/article/details/82026678 vi编辑器是所有Unix及Linux系 ...

  2. 转载:linux vi命令详解

    转自:http://www.cnblogs.com/mahang/archive/2011/09/01/2161672.html 刚开始学着用linux,对vi命令不是很熟,在网上转接了一篇. vi编 ...

  3. liunx下vi命令详解

    vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...

  4. (转)Vi命令详解

    vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...

  5. vi命令详解(转)

    vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...

  6. linux vi命令详解

    刚开始学着用linux,对vi命令不是很熟,在网上转接了一篇. vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指 ...

  7. linux vi命令详解2

    刚开始学着用linux,对vi命令不是很熟,在网上转接了一篇. vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指 ...

  8. Linux/Mac vi命令详解

    刚开始学着用Linux,对vi命令不是很熟,在网上转接了一篇. vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指 ...

  9. linux文件编辑VI命令详解

    vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...

随机推荐

  1. python os 用法(转)

    注:转自这里,仅作为方便个人查询使用 获取文件所在路径 import os os.path.dirname(__file__)  获取当前文件的所在路径 print (os.path.dirname( ...

  2. java 里的内部类

    java里的内部类通常能帮我们隐藏一些具体实现,体现良好的封装效果. 内部类又分几种: 1.普通内部类 2.局部内部类 3.匿名内部类 4.静态内部类 普通内部类 先来看第一种普通的内部类,这种内部类 ...

  3. java UTF8 HEX

    private final static char[] hexArray = "0123456789ABCDEF".toCharArray(); public static Str ...

  4. 1011 World Cup Betting (20)(20 point(s))

    problem With the 2010 FIFA World Cup running, football fans the world over were becoming increasingl ...

  5. hdu 2476 区间dp

    题意: 给出两个串s1和s2,一次只能将一个区间刷一次,问最少几次能让s1=s2 例如zzzzzfzzzzz,长度为11,我们就将下标看做0~10 先将0~10刷一次,变成aaaaaaaaaaa 1~ ...

  6. Jenkins 使用 maven 出现C:\Windows\system32\config\systemprofile的解决

    jenkins 使用 maven 出现 C:\Windows\system32\config\systemprofile 的原因是 Jenkins 服务启动的账号使用了系统的账号,在服务里改成具体的桌 ...

  7. hdoj 1002 A + B Problem II 高精度 java

    A + B Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  8. cocos2dx 字符串拼接

    ;i<;i++){ ]; sprintf(str,"%d",i); ]; strcpy(totalFilename, "game_loading") ; ...

  9. 图解vim常用命令

    VI 即 Visual Interface,可视化接口,VIM是VI的增强版 (improved),两张图总结vim常用命令. 图片来自 https://www.cnblogs.com/yangjig ...

  10. PHP通过AJAX及Access-Control-Allow-Origin实现跨域访问

    这里的跨域实质上是由浏览器同源策略限制的一类请求场景,浏览器同源策略SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全 ...