Linux中Vi和Vim编辑器用法详解

目录
  • 一、简介
  • 二、安装VIM
    • 美化vim
  • 三、进入 vi\VIM 编辑器
  • 四、工作模式
    • 三种工作模式:
  • 五、退出 vi 编辑器
  • 六、移动光标
  • 七、控制命令
  • 八、编辑文件
    • 撤销命令:
    • 重复命令:
  • 九、删除字符
  • 十、修改文本
  • 十一、粘贴复制
  • 十二、高级命令
  • 十三、文本查找
    • 全文件搜索
    • 部分特殊字符列表:
    • 搜索某行中的单个字符
  • 十四、set 命令
  • 十五、运行命令
  • 十六、文本替换
  • 十七、几点提示
  • 十八、最全VI\Vim快捷键键位图

一、简介

Linux下的文本编辑器有很多种,vi 是最常用的,也是各版本Linux的标配。注意,vi 仅仅是一个文本编辑器,可以给字符着色,可以自动补全,但是不像 Windows 下的 word 有排版功能。 
vi 是十年磨一剑的产品,虽然命令繁多,并且大多数功能都是依靠键盘输入来完成,但是一旦你熟悉后,会发现 vi 的功能和效率是其他图形界面编辑器无法比拟的。 
在Linux中,vi 被认为是事实上的标准编辑器,因为:

  • 所有版本的 Linux 都带有 vi 编辑器;
  • 占用资源少;
  • 与 ed、ex 等其他编辑器相比,vi 对用户更加友好。

你可以使用 vi 编辑器编辑现有的文件,也可以创建一个新文件,还能以只读模式打开文本文件

二、安装VIM

Vim 是 Vimproved 的缩写,是 vi 的改进版。vim是Linux下最常用的文本编译器,在终端输入vim时可能会出现

Connand 'vim' not found, but can be installed with:

这是因为默认的文本编译器是vi, 而没有安装或者升级vim的缘故

1、 Ctrl + Alt +T 进入终端,安装vim:

sudo apt-get install vim

2、安装完成后即可使用vim,输入vim查看:

美化vim

刚安装的VIM,可能界面并不是十分友好,我们可以更改vim的配置文件,按照我们的需求去修改它。在命令行下,输入命令:注意: 必须加上sudo,否则你是没有权限编辑vimrc的。

sudo vim /etc/vim/vimrc

在这个文件中可以看到有下面这个if判断,意思是语法高亮,如果是被注释掉状态,可以将其放开:

if has("syntax")
     syntax on
endif
"设置左侧行号
set nu
"设置tab键长度为4
set tabstop=4
"突出显示当前行
set cursorline
"在右下角显示光标位置的状态行
set ruler
"自动缩进
set autoindent
"覆盖文件时不备份
set nobackup

编辑完成后使用 :wq 进行保存退出 
说明: 冒号结束编辑 ,w为保存 q为退出 如果你想放弃也可以 q!为强制退出

三、进入 vi\VIM 编辑器

可以通过以下方式进入 vi 编辑器:

  • vi filename:如果filename存在,则打开;否则会创建一个新文件再打开。
  • vi -R filename:以只读模式(只能查看不能编辑)打开现有文件。
  • view filename:以只读模式打开现有文件。
  • VIM同上的命令。

例如,使用 vi 编辑器创建一个新文件并打开:

$ vi testfile
|
~
~
~
~
~
~
~
~
~
~
~
~
"testfile" [New File]

竖线(|)代表光标的位置;波浪号(~)代表该行没有任何内容。如果没有 ~,也看不到任何内容,那说明这一行肯定是有空白字符(空格、tab 缩进、换行符等)或不可见字符

四、工作模式

三种工作模式:

  • 普通模式 
    由Shell进入vi编辑器时,首先进入普通模式。在普通模式下,从键盘输入任何字符都被当作命令来解释。普通模式下没有任何提示符,输入命令后立即执行,不需要回车,而且输入的字符不会在屏幕上显示出来。 
    普通模式下可以执行命令、保存文件、移动光标、粘贴复制等。

工作模式切换:

  • 在普通模式下输入 i(插入)、c(修改)、o(另起一行) 命令时进入编辑模式;按 esc 键退回到普通模式。
  • 在普通模式下输入冒号(:)可以进入命令模式。输入完命令按回车,命令执行完后会自动退回普通模式。 
    提示:如果不确定当前处于哪种模式,按两次 Esc 键将回到普通模式。
  • 编辑模式 
    编辑模式主要用于文本的编辑。该模式下用户输入的任何字符都被作为文件的内容保存起来,并在屏幕上显示出来。
  • 命令模式 
    命令模式下,用户可以对文件进行一些高级处理。尽管普通模式下的命令可以完成很多功能,但要执行一些如字符串查找、替换、显示行号等操作还是必须要进入命令模式。 
    注意:有些教程中称有两种工作模式,是把命令模式合并到普通模式。

五、退出 vi 编辑器

一般在命令模式下退出 vi 编辑器。

  • q :如果文件未被修改,会直接退回到Shell;否则提示保存文件。
  • q! :强行退出,不保存修改内容。
  • wq :w 命令保存文件,q 命令退出 vi,合起来就是保存并退出。
  • ZZ :保存并退出,相当于 wq,但是更加方便。

退出之前,你也可以在 w 命令后面指定一个文件名,将文件另存为新文件,例如:将当前文件另存为 filename2。

w filename2

注意:vi 编辑文件时,用户的操作都是基于缓冲区中的副本进行的。 如果退出时没有保存到磁盘,则缓冲区中的内容就会被丢失。

六、移动光标

为了不影响文件内容,必须在普通模式(按两次 Esc 键)下移动光标。使用下表中的命令每次可以移动一个字符:

  • k :向上移动光标(移动一行)
  • j :向下移动光标(移动一行)
  • h :向左移动光标(移动一个字符)
  • l :向右移动光标(移动一个字符)

两点提醒:

  • vi 是区分大小写的,输入命令时注意不要锁定大写。
  • 可以在命令前边添加一个数字作为前缀,例如,2j 将光标向下移动两行。

当然,还有很多其他命令来移动光标,不过记住,一定要在普通模式(按两次 Esc 键)下。

用来移动光标的命令:

  • 0 或 |:将光标定位在一行的开头。
  • $:将光标定位在一行的末尾。
  • w:定位到下一个单词。
  • b:定位到上一个单词。
  • (:定位到一句话的开头,句子是以 ! . ? 三种符号来界定的。
  • ):定位到一句话的结尾。
  • {:移动到段落开头。&&&&&&
  • }:移动到段落结束。&&&&&&&&&
  • [[:回到段落的开头处。&&&&&&&&&&
  • ]]:向前移到下一个段落的开头处。&&&&&&&&&&
  • n|:移动到第 n 列(当前行)。
  • 1G:移动到文件第一行。
  • G:移动到文件最后一行。
  • nG:移动到文件第 n 行。
  • :n:移动到文件第 n 行。
  • H:移动到屏幕顶部。
  • nH:移动到距离屏幕顶部第 n 行的位置。
  • M:移动到屏幕中间。
  • L:移动到屏幕底部。
  • nL:移动到距离屏幕底部第 n 行的位置。
  • :x:x 是一个数字,表示移动到行号为 x 的行。

七、控制命令

有一些控制命令可以与 Ctrl 键组合使用,一定要在普通模式(按两次 Esc 键)下。如下:

  • CTRL+d:向前滚动半屏
  • CTRL+f:向前滚动全屏
  • CTRL+u:向后滚动半屏
  • CTRL+b:向后滚动整屏
  • CTRL+e:向上滚动一行
  • CTRL+y:向下滚动一行
  • CTRL+I:刷新屏幕

八、编辑文件

切换到编辑模式下才能编辑文件。有很多命令可以从普通模式切换到编辑模式,如下所示:

  • i:在当前光标位置之前插入文本
  • I:在当前行的开头插入文本
  • a:在当前光标位置之后插入文本
  • A:在当前行的末尾插入文本
  • o:在当前位置下面创建一行
  • O:在当前位置上面创建一行

撤销命令:

  • u: 一步一步撤销
  • Ctr-r: 反撤销

重复命令:

  • .: 重复上一次操作的命令

九、删除字符

下面的命令,可以删除文件中的字符或行:

  • x:删除当前光标下的字符
  • X:删除光标前面的字符
  • dw:删除从当前光标到单词结尾的字符
  • d^:删除从当前光标到行首的字符
  • d$:删除从当前光标到行尾的字符
  • D:删除从当前光标到行尾的字符
  • dd:删除当前光标所在的行

可以在命令前面添加一个数字前缀,表示重复操作的次数,例如,2x 表示连续两次删除光标下的字符,2dd 表示连续两次删除光标所在的行。

十、修改文本

如果你希望对字符、单词或行进行修改,可以使用下面的命令:

  • cc:删除当前行,并进入编辑模式。
  • cw:删除当前字(单词),并进入编辑模式。
  • r:替换当前光标下的字符。
  • R:从当前光标开始替换字符,按 Esc 键退出。
  • s:用输入的字符替换当前字符,并进入编辑模式。
  • S:用输入的文本替换当前行,并进入编辑模式。

十一、粘贴复制

vi 中的复制粘贴命令:

  • yy:复制当前行
  • nyy:复制n行
  • yw:复制一个字(单词)
  • nyw:复制n行
  • p:将复制的文本粘贴到光标后面
  • P:将复制的文本粘贴到光标前面

十二、高级命令

下面的一些命令虽然看起来有些古怪,但是会让你的工作更有效率,如果你是 vi 重度用户,就了解一下吧。

  • J:将当前行和下一行连接为一行
  • <<:将当前行左移一个单位(一个缩进宽度)
  • >>:将当前行右移一个单位(一个缩进宽度)
  • ~:改变当前字符的大小写
  • ^G:Ctrl+G组合键可以显示当前文件名和状态
  • U:撤销对当前行所做的修改
  • u:撤销上次操作,再次按 'u' 恢复该次操作
  • :f:以百分号(%)的形式显示当前光标在文件中的位置、文件名和文件的总行数
  • :f filename:将文件重命名为 filename
  • :w filename:保存修改到 filename
  • :e filename:打开另一个文件名为 filename 的文件
  • :cd dirname:改变当前工作目录到 dirname
  • :e #:在两个打开的文件之间进行切换
  • :n:如果用 vi 打开了多个文件,可以使用 :n 切换到下一个文件
  • :p:如果用 vi 打开了多个文件,可以使用 :n 切换到上一个文件
  • :N:如果用 vi 打开了多个文件,可以使用 :n 切换到上一个文件
  • :r file:读取文件并在当前行的后边插入
  • :nr file:读取文件并在第 n 行后边插入

十三、文本查找

全文件搜索

可以在普通模式(按两次 Esc 键)下输入

  • / 命令(向下查找),这时状态栏(最后一行)出现"/"并提示输入要查找的字符串,回车即可。 ? 命令为向上查找。
  • n 命令可以按相同的方向继续查找,输入 N 命令可以按相反的方向继续查找。

部分特殊字符列表:

搜索的字符串中可以包含一些有特殊含义的字符,如果希望搜索这些字符本身,需要在前面加反斜杠(\)。

  • ^ :匹配一行的开头
  • . :匹配一个字符
  • * :匹配0个或多个字符
  • $ :匹配一行的结尾
  • [ ] :匹配一组字符

搜索某行中的单个字符

f 向上搜索,F 向下搜索,并且会把光标定位到匹配的字符。 
t 命令向上搜索,并把光标定位到匹配字符的前面;T 命令向下搜索,并把光标定位到匹配字符的后面。

十四、set 命令

set 命令可以对 vi 编辑器进行一些设置。使用 set 命令需要进入命令模式。

  • :set ic:搜索时忽略大小写。
  • :set ai:设置自动缩进(自动对齐)。
  • :set noai:取消自动缩进(自动对齐)。
  • :set nu:显示行号。
  • :set sw:设置缩进的空格数,例如,将缩进空格数设置为4::set sw=4。
  • :set ws:循环搜索:如果直到文件末尾也没有查找到指定字符,那么会回到开头继续查找。
  • :set wm:设置自动换行,例如,设置距离边际2个字符时换行::set wm=2 。
  • :set ro:将文件类型改为只读。
  • :set term:输出终端类型。
  • :set bf:忽略输入的控制字符,如 BEL(响铃)、BS(退格)、CR(回车)等。

十五、运行命令

切换到命令模式,再输入 ! 命令即可运行 Linux 命令。 
例如,保存文件前,如果希望查看该文件是否存在,那么输入

:! ls

即可列出当前目录下的文件。按任意键回到 vi 编辑器。

十六、文本替换

切换到命令模式,再输入 s/ 命令即可对文本进行替换。语法为:

:s/search/replace/g

search 为检索的文本,replace 为要替换的文本,g 表示全局替换。

:%s/原有字符/替换后字符 ##只替换每一行中出现的第一个原有字符
:%s/原有字符/替换后字符/g ##替换所有
:1,5s/原有字符/替换后字符/g ##替换1-5行

十七、几点提示

vi 编辑器的使用讲解完毕,但是请记住下面几点:

  • 输入冒号(:)进入命令模式,按两次 Esc 键进入普通模式。
  • 命令大小写的含义是不一样的。
  • 必须在编辑模式下才能输入内容。

十八、最全VI\Vim快捷键键位图

到此这篇关于Linux中Vi和Vim编辑器用法的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • linux中的vi和vim编辑器操作方法

    vi:linux内部的文本编辑器:vim:vi的增强版,具有程序编辑的能力. vi和vim的三种常见模式: (1)正常模式(一般模式):vim一打开就是这种模式,此模式下可以使用各种快捷键,比如复制粘贴.移动光标.删除整行等操作 (2)编辑模式(插入模式):此模式下可以输入内容,通过i,I,o,O,a,A,r,R等进入到此模式,不过最常用是使用i(insert). (3)命令行模式:在此模式下可以完成读取.存盘.替换.显示行号等一些操作. 三种模式的相互转换如下图:(图源来自韩顺平老师上课笔记)

  • Linux 常用文本处理命令和vim文本编辑器

    今天,来介绍几个常用文本处理命令和vim文本编辑器 day3--常用文本处理命令和vim文本编辑器 col,用于过滤控制字符,-b过滤掉所有控制字符,这个命令并不常用,但可以使用man 命令名| col -b >help.txt 导出一份帮助文档.|是管道符,用于把前面的执行结果经由一个"管道"送给后方 man ls | col -b > ls_help #把ls命令的帮助文档导出 cut命令从每一行剪切掉字节,并写至标准输出 cut -b #以字节为单位进行分割 cut

  • 详解Linux常用命令的用法(二)————文本编辑器命令vi/vim

    vi/vim介绍 它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面. 1.vi和vim的区别: 就是在进入一般命令模式后,当按下(i.I.o.O.a.A.r.R)等任何一个字母,之后就会今入编辑模式.此时就可以进行文本编辑了. 在一般命令模式中,输入(:/ ?)三个中任何一按键就进入了指令命令模式.在这个模式中,可以进行读取.存盘.大量取代字符.离开vi.显示行号等功能. vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当

  • Linux中Vim编辑器的使用教程

    Vim是一个类似Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了许多的功能,Vim是自由软件,今天我们就来讲讲Vim编辑器的使用. NAME vim - Vi IMproved, a programmers text editor #vi的改进,一个程序文本编辑器 1.移动光标的方法 Ctrl+f 屏幕向下移动一页 0(数字0) 移动到行首 $ 移动到行尾 G 移动到最后一样 gg 移动到第一行 n<Enter> 光标向下移动n行 2.查找和替换 /word 向光标下面

  • Linux使用VIM编辑器的方法

    Vim 作为一款功能强大.选项丰富的编辑器,为许多用户所热爱.本文介绍了一些在 Vim 中默认未启用但实际非常有用的选项.虽然可以在每个 Vim 会话中单独启用,但为了创建一个开箱即用的高效编辑环境,还是建议在 Vim 的配置文件中配置这些命令. 技巧:快速提高 vim 使用效率的原则与途径 vim 是所有 Unix/Linux 操作系统默认配备的编辑器.因其强大的功能和高效的操作,vim 也成为众多 Unix/Linux 用户.管理员必须掌握并熟练使用的编辑工具之一.尤其是在没有图形界面的情况

  • 详解Linux文本编辑器Vim

    Vim是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器,他的作用是建立.编辑.显示文本文件.Vim没有菜单,只有命令.(在编辑一些配置文件.写一些简单的小脚本的时候用) Vim的三种工作模式:命令模式.插入模式.编辑模式 vi [文件名]–>进入命令模式,输入i a o进入插入模式 命令模式:输入wq退出:输入i a o进入插入模式:输入: 进入编辑模式 插入模式:ESC退到命令模式 编辑模式:命令以回车结束运行 插入命令: 定位命令: 删除命令: 复制和剪切命令:

  • Linux中Vi和Vim编辑器用法详解

    目录 一.简介 二.安装VIM 美化vim 三.进入 vi\VIM 编辑器 四.工作模式 三种工作模式: 五.退出 vi 编辑器 六.移动光标 七.控制命令 八.编辑文件 撤销命令: 重复命令: 九.删除字符 十.修改文本 十一.粘贴复制 十二.高级命令 十三.文本查找 全文件搜索 部分特殊字符列表: 搜索某行中的单个字符 十四.set 命令 十五.运行命令 十六.文本替换 十七.几点提示 十八.最全VI\Vim快捷键键位图 一.简介 Linux下的文本编辑器有很多种,vi 是最常用的,也是各版

  • Linux中 sed 和 awk的用法详解

    sed用法: sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法 sed命令行格式为: sed [-nefri] 'command' 输入文本 常用选项: -n∶使用安静(silent)模式.在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上.但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来. -e∶直接在指令列模式上进行 sed 的

  • Linux 中常用的Rpm命令实例详解

    rpm命令是RPM软件包的管理工具.rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎.逐渐受到其他发行版的采用.RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度. 语法 rpm(选项)(参数) 选项 -a:查询所有套件: -b<完成阶段><套件档>+或-t <完成阶段><套件档>+:设置包装套件的完成阶段,并指定套件档的文件名称: -c:只列出

  • Linux 中LVS NAT 配置步骤的详解

    Linux 中LVS NAT 配置步骤的详解 概要: 规划机器与IP地址,LVS集群中有三种类型机器4种IP地址.机器类型:Client.Director.Real Server,与机器类型对应的IP地址分别为:CIP.DIP.RIP,Director对应两种IP 除了DIP外还有一个VIP.通常DIP.RIP在一个网络,CIP.VIP在一个网络. CIP:192.168.56.1 VIP:192.168.56.101 DIP : 192.168.0.10 RIP : 192.168.0.100

  • JSP 中request与response的用法详解

    JSP 中request与response的用法详解 概要: 在学习这两个对象之前,我们应该已经有了http协议的基本了解了,如果不清楚http协议的可以看我的关于http协议的介绍.因为其实request和response的使用大部分都是对http协议的操作. request对象的介绍 我们先从request对象进行介绍: 我们知道http协议定义了请求服务器的格式: 请求行 请求头 空格 请求体(get请求没有请求体) 好了,这里我们就不详细介绍了,我们只看几个应用就可以了,没什么难度: 应

  • Linux 中fork的执行的实例详解

    Linux 中fork的执行的实例详解 先看看一段fork的程序 int main() { pid_t pid; 语句 a; pid = fork(); 语句 b; } 1.当程序运行到 pid = fork()时,这个进程马上分裂(fork的中文意思)成两个进程,我们称为父进程和子进程,子进程是父进程的副本,副本的意思是子进程把父进程的数据空间,堆和栈都复制一遍给自己用,这要求在内存给子进程分配和父进程同样大的存储空间,这样,父,子进程拥有相同的数据,但不会共享存储空间,他们只是共享正文段.

  • IOS开发中NSURL的基本操作及用法详解

    NSURL其实就是我们在浏览器上看到的网站地址,这不就是一个字符串么,为什么还要在写一个NSURL呢,主要是因为网站地址的字符串都比较复杂,包括很多请求参数,这样在请求过程中需要解析出来每个部门,所以封装一个NSURL,操作很方便. 1.URL URL是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址.互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它. URL可能包含远程服务器上的资源的位置,本地磁盘上的文件的路径,甚

  • JavaScript中SetInterval与setTimeout的用法详解

    setTimeout 描述 setTimeout(code,millisec) setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. 注:调用过程中,可以使用clearTimeout(id_of_settimeout)终止 参数 描述 code 必需,要调用的函数后要执行的 JavaScript 代码串. millisec 必需,在执行代码前需等待的毫秒数. setTimeinterval setInterval(code,millisec[,"lang"]) 参数

  • C++中auto_ptr智能指针的用法详解

    智能指针(auto_ptr) 这个名字听起来很酷是不是?其实auto_ptr 只是C++标准库提供的一个类模板,它与传统的new/delete控制内存相比有一定优势,但也有其局限.本文总结的8个问题足以涵盖auto_ptr的大部分内容. auto_ptr是什么? auto_ptr 是C++标准库提供的类模板,auto_ptr对象通过初始化指向由new创建的动态内存,它是这块内存的拥有者,一块内存不能同时被分给两个拥有者.当auto_ptr对象生命周期结束时,其析构函数会将auto_ptr对象拥有

  • Python中index()和seek()的用法(详解)

    1.index() 一般用处是在序列中检索参数并返回第一次出现的索引,没找到就会报错,比如: >>> t=tuple('Allen') >>> t ('A', 'l', 'l', 'e', 'n') >>> t.index('a') Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> t.index('a') V

随机推荐