Linux 指令详解 vi 交互式文本编辑器

vi是‘Visual interface‘的简称,是Linux下标配的一个纯字符界面的交互式文本编辑器。可以执行输出、删除、查找、替换、块操作等众多文本操作,用户还可以根据自己的需要对其进行定制。其所有操作都需要通过键盘指令来完成,如果可以熟练应用,将会是十分的方便

--------------------------------------------------------------------

工作模式:

vi有三种工作模式,Command mode,Insert mode,Last line mode

Command mode : 命令模式。(默认模式)

进入到vi编辑器时,默认在此模式下

在此模式下可以控制屏幕光标的移动,字符或行的复制粘贴删除

在此模式下输入的命令是不可见的

Insert mode  : 插入模式。

只有在此模式下才能够输入文字

一般在此模式下添加删除修改文本内容

Last line mode : 末行模式。(特殊的命令模式)

在此模式下的操作需要回车才能执行

在此模式下可以保存文件退出vi

在此模式下可以设置环境变量

在此模式下可以进行查找替换

此模式执行完毕后自动回到命令模式

vi可以简化成两个模式,Command 和Insert mode。Last line可以算是特殊的Command mode

--------------------------------------------------------------------

进入vi:

1:# vi filename          : 打开(或新建)文件,将光标置于第一行

2:# vi +n filename     : 打开文件,将光标置于第n行

3:# vi + filename       : 打开文件,并将光标置于最后一行

4:# vi +/word1 filename      : 打开文件,并将光标置于第一个word1

5:# vi -r filename       : 恢复filename(若上次使用vi编辑时发生系统崩溃)

6:# vi filename1 filename2 filename3    : 打开多个文件,依次编辑

Ps:

1:如果filename存在,则打开filename。如果不存在,则新建filename(保存时创建)

2:每行前显示波浪符号的表示该行为空行

3:若不对文件的修改进行保存,则不改变原文件的内容

4:多个用户可以同时使用vi编辑一个文件,最后保存的版本将被保存

--------------------------------------------------------------------

三种模式切换:

命令模式 到 插入模式 : ‘i‘  ‘a‘  ‘c‘  ‘o‘  ‘r‘  ‘s‘等

插入模式 到 命令模式 : ‘Esc‘

命令模式 到 末行模式 : ‘:‘  ‘/‘  ‘?‘

末行模式 到 命令模式 : ‘Esc‘

插入模式到末行模式得先切换到命令模式

--------------------------------------------------------------------

帮助:

F1

:help

查看版本:

# vi --version

--------------------------------------------------------------------

屏幕翻页:

Ctrl + f: 屏幕向'前'移动一页(常用)
Ctrl + b: 屏幕向'后'移动一页(常用)
Ctrl + d: 屏幕向'前'移动半页
Ctrl + u: 屏幕向'后'移动半页
Ctrl + e: 屏幕向前滚一行
Ctrl + y: 屏幕项后滚一行

--------------------------------------------------------------------

光标移动:

Ctrl+G : 显示光标所在位置的行数和列数

0:  光标移动到当前行首(数字零)
^:  移到该行第一个非空白的字符
$:  光标移动到当前行尾(常用)
n$: 光标移至第n行尾
(:   到句子的开头
):   到句子的末尾
{:   到段落的开头
}:   到段落的末尾

G:   光标移至文章的最后一行(常用)
nG:  光标移至第n行首
gg:  移动文章的开头

h 或 向左方向键: 光标向左移动一个字符
l 或 向右方向键: 光标向右移动一个字符
k 或 向上方向键: 光标向上移动一个字符
j 或 向下方向键: 光标向下移动一个字符
Ctrl+p: 光标上移一行(同k)
Ctrl+n: 光标下移一行(同j)

Enter:    光标下移一行
n<Enter>: 光标向下移动n行
space:  光标右移一个字符
n<space>:   光标向右移动n个字符
Backspace:  光标左移一个字符
n<Backspace>:  光标向左移动n个字符

b:  光标左移到上个词的开头
B:  光标左移到上个空格分隔的词开头
w:  光标右移到下个词的开头
W:  光标右移到下个空格分隔的词开头
e:  光标右移到下个词的结尾
E:  光标右移到下个空格分隔的词结尾
H:  光标移至当前屏幕顶行
nH: 光标移动到屏幕的第n行
L:  光标移至当前屏屏幕最后行
        内容超过一个屏幕时,光标移至屏幕上的最底行
        内容不足一个屏幕时,光标移至文件的最后一行
nL: 光标移动到屏幕的倒数第n行
M:  光标移至当前屏幕中间行
        内容超过一个屏幕时,光标移至屏幕的中间行
        内容不足一个屏幕时,光标移至文本的中间行

dH: 删除从光标所在行至屏幕首行的全部内容
dM: 删除从光标所在行至屏幕(文件)中间行的全部内容
dL: 删除从光标所在行至屏幕最后一行的全部内容

+:  光标移动到下一行的第一个非空白字符
n+: 光标下移n行
-:  光标移动到上一行的第一个非空白字符
n-: 光标上移n行
z.: 把当前行作为屏幕的中间行

v:  选取文本内容

--------------------------------------------------------------------

插入文本

a: 在当前光标后插入字符
A: 在当前行末后插入字符
i: 在当前光标前插入字符
I: 在当前行首前插入字符(第一个非空白字符前)
o: 在当前行后面插入一空行,从光标所在处的下一行行首开始输入字符
O: 在当前行前面插入一空行,从光标所在处的上一行行首开始输入字符
r: 替换当前光标所在字符(替换后即结束)
R: 替换当前字符及后面的字符,直至按ESC键结束替换
J: 把光标所在行的下一行追加到本行行尾

:r filename   将filename中的内容添加到当前光标的下一行
:r!command    将指令shell命令command的输出结果添加到当前行

xp: 交换光标位置的字符和它右边的字符
~:  改变光标所在出字符的大小写

--------------------------------------------------------------------

删除:

dd:  删除光标所在行
ndd: 删除从光标所在行开始的n行
D:   删除光标所在行光标后面的内容
x:   删除光标所在的字符
X:   删除光标前面的字符
nx:  删除从光标位置开始的n个字符
nX:  删除光标之前的n个字符
dw:  删除光标所在的单词(实际为从光标位置开始到单词结束)(包含空格)
de:  删除光标到单词尾所有字符(不包含空格)
d0:  删除光标所在行光标之前的所有内容
d^:  删除当前字符到行首的所有字符(同d0)
d$:  删除光标所在行光标到行尾的所有内容
d1G: 删除光标所在行到第一行的所有数据
dG:  删除光标所在行到最后一行的所有数据
dfa: 删除从光标到第一个a字符之间的内容(包括a)
:nd: 删除第n行
:n1,n2d: 将第n1行到第n2行之间的内容删除

s: 删除光标所处位置的字符,然后在后面追加任意字符
S: 删除当前行,然后在追加任意字符
nS:删除n行,然后在追加任意字符

cw: 删除光标到所在单词尾部的字符
ce: 删除光标到所在单词尾部的字符(和cw一样)
c$: 删除光标到当前行行尾的字符
C:  删除光标到当前行行尾的字符(和c$一样)
c^: 删除光标之前到行首的字符(不包括光标上的字符)
cc: 删除光标所在行(与dd不同的是cc进入insert状态)
cb: 删除光标所在单词的光标前的字符

--------------------------------------------------------------------

撤销与重复

u: 撤销上一个操作(可以执行多次)
U: 撤销对当前行的所有操作
.: 重复上一个操作
Ctrl + R : 还原被撤销的操作

--------------------------------------------------------------------

查找:

/word : 从光标开始向后查找word(若遇到文件尾,则从头再开始)
?word : 从光标开始向前查找word(若遇到文件头,则从尾再开始)
n: 在同一方向执行上次定义的查找
N: 在相反方向执行上次定义的查找
/: 向后重复查找上次定义的查找

:set ic : 查找时不区分大小写
:set noic : 查找时区分大小写

--------------------------------------------------------------------

替换:

:s/word1/word2/c     将word1换成word2,并在替换前让用户进行确认
:s/word1/word2/g     将当前行中所有word1换成word2
:n1,n2s/word1/word2/g   将第n1行到第n2行中所有word1换成word2
:1,$s/word1/word2/g     将第一行到最后一行行中所有word1换成word2
:g/word1/s//word2/g     将文件中所有word1换成word2
:%s/word1/word2/g    将文件中所有word1换成word2
:n1,n2s/^/word1/g    将第n1行到第n2行所有开头加入word1
:%s/ *$//            将所有行结尾的空格删除(超级常用)
:%s#/dodo/1#/dodo/2     更换隔离符

不加g,只对搜索字符串的第一次出现进行替换

g在命令最后,对搜索字符串所在行的每次出现进行替换

g在命令开头,对文中所有的行进行替换

--------------------------------------------------------------------

保存退出:

:w :  保存当前文件
:q :  直接退出(对文件没有修改的前提)
:wq : 保存并退出
:x  : 保存并退出
:q! : 不保存直接退出(不想保存文件的修改)
:w! : 强制保存该文件(对于只读文件)
SHIFT+zz : 保存并退出(其实就是ZZ)

:w filename        将修改后的文件保存到filename中(若filename存在则会报错)
:n1,n2w filename   将第n1行到第n2行的内容保存filename文件中

--------------------------------------------------------------------

隐藏显示行号:

:set nu    显示行号
:set nonu  取消显示行号
Ctrl+G :  列出光标所在行的行号

--------------------------------------------------------------------

复制粘贴:

yy: 复制光标所在行(常用)
nyy:复制从光标所在行开始向下n行
y1G:复制从光标所在行到第一行的所有行
yG: 复制从光标所在行到最后一行的所有行
yw: 复制单词从光标所在位置开始到单词尾字符
y$: 复制从光标开始到行尾的内容
y^: 复制从光标开始到行首的内容
y0: 复制从光标开始到行首的内容(同y^)

p: 粘贴在当前行的下一行(小写)
P: 粘贴在当前行的上一行(大写)

注:所有‘y‘的复制都必须与‘p‘结合才能完成复制与粘贴

:n1,n2 co n3   将n1~n2的内容复制到第n3行。
:n1,n2 co $   将n1~n2行的内容复制到最后一行。
:n1,n2 mo $   将n1~n2行的内容移动到最后一行。

buffer使用(要注意buffer名字不要和指令名冲突)

vi中有buffer功能,可将数据存在buffer中

cyy: 复制当前行放入buffer c中
cp:  粘贴放在buffer a中的内容

--------------------------------------------------------------------

修改文件格式

:set fileformat=unix

:set ff=unix

将文件修改为unix格式(如win下面的文本文件在linux下会出现^M,从而导致乱码)

--------------------------------------------------------------------

其他指令:

:! Command : 执行命令shell指令command
!! : 重新执行上次的(:! Command子命令)

<<: 把当前行向左移动一个 tab
>>: 把当前行向右移动一个 tab
n>>: 从当前行开始的n行向右移动一个 tab
:n1,n2>: 把第n1行到n2行都向右移动一个 tab
:n1,n2>>>: 把第n1行到n2行都向右移动三个 tab

--------------------------------------------------------------------

环境变量设置

1、通过末行模式来设置

比如  :set autoindent

通过末行模式的设置是临时的,退出vi之后就没有了

2、要使这些设置永久保存,可以将选项设置保存到如下几个文件,这样在每次vi时都有效:

/etc/virc或者~/.virc

~/.exrc或者当前工作目录下的.exrc

常见的选项如下,只要添加到文件中即可

set tabstop=4        #设置tab跳过的空格数为4(默认为8)
set number           #设置显示正文行号
set ignorecase       #在搜索命令中忽略大小写(缩写:ic)
set noignorecase     #在搜索命令中区别大小写
set scroll=20        #设定指令模式下使用'Ctrl+d'命令翻滚的行数
set showmode         #设定在屏幕右角显示vi编辑器模式(缩写:smd)
set ruler            #设定在屏幕底部显示光标所在行、列的位置
set terse            #设定只显示简短的警告信息
set nomagic          #设定在搜索模式中,允许使用前面不带'\'的特殊字符(符号不再有特殊含义)
syntax on            #设定语法加亮显示
set autoindent       #设定每一行都和前一行有相同的缩进量(缩写:ai)
set smartindent      #设定每一行都和前一行有相同的缩进量,但是遇到'{'和'}'以及'#'则不采用缩进(缩写:si)
set cindent          #采用标准的C语言的缩进形式(C,C++,Java)(缩写:ci)
set shiftwidth=2     #设定缩进空格数为2(缩写:sw)
set report           #告知用户最后一个命令作用行的行号
set wrapmargin=80    #设置行长度为80(缩写:wm)

时间: 2024-08-28 15:57:12

Linux 指令详解 vi 交互式文本编辑器的相关文章

Linux指令详解useradd groupadd passwd chpasswd chage 密码修改

创建用户.设置密码.修改用户.删除用户: useradd testuser 创建用户testuser passwd testuser 给创建的用户testuser设置密码 说明:新创建的用户会在/home下创建一个用户目录testuser usermod --help 修改用户这个命令的相关参数 userdel testuser 删除用户testuser rm -rf testuser 删除用户testuser所在目录 上面的几个命令只有root账号才可以使用,如果你不知道自己的系统上面的命令在

Linux 指令详解 df 检查文件系统的磁盘空间使用情况

指令:df 检查文件系统的磁盘空间使用情况 可以查看所有已挂载磁盘的总容量.使用空间.剩余空间.挂载位置等 语法:# df [OPTION] [FILE] FILE是一个或多个路径名的可选列表,如选择这项则显示文件所在的文件系统的磁盘使用情况 Ps: 1:所有用户均有使用df命令的权限 2:默认情况下以1KB为单位显示磁盘空间 3:默认显示当前所有被挂载的文件系统的可用空间 4:超级权限用户使用df命令时会发现某个分区的容量会超过100%,原因如下: Linux系统为超级用户保留了10%的空间.

Linux 指令详解 top 系统资源检测

指令:top   持续的监测整个系统的程序工作状态 <1>.top是一个优秀的交互式工具,能够实时显示当前系统的进程的相关信息,包括PID.内存占用率.CPU占用率等,还可以根据需要按CPU占用情况排序.内存使用情况排序. <2>.如果在前台执行该命令,它将一直显示前台,直到用户终止该程序 命令格式: # top [-] [d] [p] [q] [c] [C] [S] [s] [n] 参数说明: -b: 批处理模式.通常用在脚本中,不断输出信息 -c: 显示包含路径的命令行,而不只

Linux 指令详解 curl 文件传输

指令:curl 在linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具. 工作原理:curl命令使用了libcurl库来实现,libcurl库常用在C程序中用来处理HTTP请求,curlpp是libcurl的一个C++封装,这几个东西可以用在抓取网页.网络监控等方面的开发,而curl命令可以帮助来解决开发过程中遇到的问题. 语法:# curl [option] [ur

Linux 指令详解 at 定时执行任务

指令:at 指定一个时间执行一个任务,只能执行一次 语法:# at [参数] [时间] at> 执行的指令 退出at命令 ctrl+d 命令前提: 需要开启atd进程(在redhat中atd是默认随系统启动而启动) 测试中发现在centos6.5 mini版中没有自带at服务,因此需要自己通过下载 # yum -y install at ##查看是否开启atd # ps -ef | grep atd ##开启atd # /etc/init.d/atd start ##设置atd开机启动 # ch

Linux 指令详解 scp 在linux主机间传输文件

指令:scp 在不同的linux主机间复制文件 带有Security的文件copy,基于ssh登录. 有些linux发行版没有自带scp,因此需要安装scp #  yum -y install openssh-clients 基本语法: # scp [参数] source target 常见参数 -v : 显示进度,可以用来查看连接.认证或是配置错误 -r :  赋值目录 -C :使能压缩选项 -P :选择端口 -4 : 强行使用 IPV4 地址 -6 : 强行使用 IPV6 地址 常见的使用方

Linux 指令详解 chpasswd 批量修改用户密码

命令:chpasswd 批量修改用户密码 工作原理: 从系统的标准输入读入用户的名称和口令,并利用这些信息来更新系统上已存在的用户的口令 语法: 1:# echo 用户名:密码 | chpasswd 2:# chpasswd < doiido.txt 参数: -e :如果使用了-e选项,口令将只能以加密的方式传递 如果未使用-e选项,口令将按明文的形式传递 注意事项 1:用户名必须是系统上已存在的用户 2:普通用户没有使用这个指令的权限 3:如果输入文件是按非加密方式传递的话,请对该文件进行适当

Linux 指令详解 find 查找搜索

指令:find 查找 ,搜索 具有即时性的特点,不需要数据库,相对会比较慢一些 1.从指定路径下递归向下搜索文件 2.支持按照各种条件方式搜索 3.支持对搜索得到的文件进一步用指令 语法: #  find [路径] [参数] [表达式] 常用参数 -user 可以根据文件拥有者来查找文件 # find /root -user root 在root目录下查找拥有者是root的文件 -group 根据文件的所属组查找文件 # find /root -group root 在/root文件夹下查找所属

Linux 指令详解 pushd 快速切换目录

指令:pushd 在不同目录间切换 在命令行模式中,当需要在不同目录中不停的切换时会发现不停的输入目录很麻烦,这个时候就需要用上pushd函数了 pushd工作原理: pushd将指定目录压入当前shell维护的目录栈,从而可以实现多个不同路径之间的切换. Ps:默认情况下,pushd函数可能不包括在你的Linux中,但存在于red Hat和用Red Hat驱动的系统中. 语法: # pushd [-n] [+N | -N | dir] 参数: -n: 只将目录加入到目录栈中,不切换目录 +N: