一、vi的工作模式
vi有两种工作模式:
  编辑模式:用来输入和编辑文件的模式,屏幕上会显示用户的键入,按键不是被解释为命令执行,而是作为文本写到用户的文件中。
  指令模式:用来编辑、存盘和退出文件的模式。
    运行vi后,首先进入指令模式。此时输入的任何字符都被视为指令,键入的命令不会在屏幕上显示。
    从指令模式切换到编辑模式,则可以按“Insert”键或“i”键,从编辑模式切换到指令模式,可按“Esc”键。
    状态行是屏幕底部一行,被vi编辑器用来反馈编辑操作结果。错误消息或提供信息的消息会在状态行中显示出来。

二、vi的启动和退出
1.启动vi
    在系统图示字符下键入“vi”+“空格”+“文件名”,如:vi test.txt
    vi可以自动载入所要编辑的文件或是开启一个新文件。
2.退出vi
在指令模式下键入如下命令可以退出vi:
  :q 如果用户只是读文件的内容而未对文件进行修改,可以在命令模式下输入“:q”退出vi。
  :q! 如果用户对文件的内容作了修改,又决定放弃对文件的修改,则用“:q!”命令。
  :w! 强行保存一个vi文件,如果该文件已存在,则进行覆盖。
  :wq 保存文件并退出vi。
  ZZ 快速保存文件的内容,然后退出vi。功能和“:wq”相同。
  :w filename   相当于“另存为”。
  :n,mw filename   将第n-m行的文本保存到指定的文件filename中。

三、vi长指令和短指令
  长指令:以冒号开头,键入冒号后,在屏幕的最末尾一行会出现冒号提示符,等待用户键入指令,输入完指令后回车,vi会执行该指令。
  段指令:与快捷键相似,键入短指令后,vi不会给任何提示就直接执行。
1.输入输出命令
  a 在光标后输入文本
  A 在当前行末尾输入文本
  i 在光标前输入文本
  I 在当前行开始输入文本
  o 在当前行后输入新一行
  O 在当前行前输入新一行
2.光标移动命令
  b 移动到当前单词的开始
  e 移动到当前单词的结尾
  w 向后移动一个单词
  h 向前移动一个字符
  l 向后移动一个字符
  j 向下移动一行
  k 向上移动一行
3.删除操作命令
  x 删除光标所在的字符
  dw 删除光标所在的单词
  dd 删除当前行
  d$ 删除光标至行尾的所有字符
  D 与“d$”命令相同
4.替换操作命令
  r 替换光标所在的字符
  R 替换字符序列
  cw 替换一个单词
  ce 与“cw”命令相同
  cb 替换光标所在的前一字符
  c$ 替换自光标位置至行尾的所有字符
  C 与“c$”命令相同
  cc 替换当前行
5.查询操作命令
  /abc 向后查询字符串“abc”
  ?abc 想前查询字符串“abc”
  n 重复前一次查询
  N 重复前一次查询,但方向相反
6.拷贝粘贴命令
  yw 将光标所在单词拷入剪贴板 
  y$ 将光标至行尾的字符拷入剪贴板
  Y 与“y$”命令相同
  yy 将当前行拷入剪贴板
  y 将选取的内容拷入剪贴板
  p 将剪贴板中的内容粘贴在光标后
  P 将剪贴板中的内容粘贴在光标前

  例如:

     1、复制

        1) 单行复制

            在命令模式下,将光标移动到将要复制的行处,按“yy”进行复制;

           2)多行复制

            在命令模式下,将光标移动到将要复制的首行处,按“nyy”复制n行;其中n为1、2、3……

        2、粘贴

          在命令模式下,将光标移动到将要粘贴的行处,按“p”进行粘贴

7.其他操作命令
  v 选取文本内容
  u 取消上一次的操作
  U 可以恢复对光标所在行的所有改变
  J 把两行文本链接到一起
  :set 用来设置或浏览vi系统当前的选项(加参数“all”后查看所有选项的列表)
  :X 对所编辑的文件进行简单加密

四、vi的高级应用
1.设置vi环境
    vi编辑器的行为可以通过设置编辑参数来定义。
    使用vi的set命令进行设置。vi在进行设置前必须处于指令模式,但选项的改变是临时的,只在用户当前编辑回话下有效,当用户退出vi编

辑器时,设置会被丢弃。
  autoindent选项
    将新行与前一行的开始对准,缩写:ai
    该选项将用户键入的每个新行与前一行的开始对齐。该选项对于使用程序语言编程时十分有用。本选项的默认值是noai。
  ignorecase选项
    在搜索命令下忽略大小写,缩写:ic
    vi编辑器提供大小写敏感的搜索,要使vi忽略大小写,键入“:set ignorecase”,要返回大小写敏感状态,键入“:set noignorecase”.
  magic选项
    在搜索时,允许使用特殊字符。
    某些符号在用于搜索时有特殊的含义。当用户将这些符号开头置为nomagic时,这些符号不再有特殊含义。
  number选项
    显示行号,缩写:nu
    vi编辑器一般情况下不显示每行的行号。可以改变number选项来显示行号。
  report选项
    告知用户最后一个命令作用行的行号。
    vi编辑器对用户的编辑工作并不给予任何反馈,如果希望在屏幕上看到自己编辑的反馈信息,用户可以通过编辑report选项来实现。
  scroll选项
    设定在指令模式下使用“Ctrl+d”命令翻滚的行数。
  shiftwidth选项
    设定缩进空格数,一般与autoindent一同使用,缩写:sw
  showmode选项
    在屏幕右角显示vi编辑器模式,缩写:smd
  terse选项
    缩短错误信息。
  wrapmargin选项
    将右边界设定为一定的字符个数,缩写:wm
    用户的终端屏幕通常为80列,当键入到行的末尾时,屏幕即开始一个新行,这就是行回绕。在用户按回车键时,屏幕同样开始一个新行。

因此,屏幕上一行的长度可以为1-80个字符之间的任何长度。但是,vi编辑器只在用户按回车时,才在用户文件中生成一个新行。如果用户在

按回车前键入了120个字符,这时键入的文本看起来是在2行,但实际在文件中,这120个字符只在1行中。如果要限制行长度,一是在到达屏幕

行末尾前按回车换行,另一种是设定wrapmargin选项使vi编辑器自动插入回车。

2.缩写操作符
    缩写操作符“:ab”命令使得用户给任何字符串指定缩写,该功能可以帮主用户提高输入速度。用户可以为自己经常输入的文本选择一个易

输入的缩写。
    例如:键入“:ab uox Unix Operating System”命令,当vi处于文本输入模式时,用户键入“uox”接着键入一个空格时,vi自动将键入的

“uox”变为“Unix Operating System”。
    取消缩写“:unab”命令可以取消一个缩写,例如:键入“:unab uox”命令即可。
    想列出已经设置了的所有缩写,键入“:ab”命令即可。
3.宏操作符
    宏操作符“:map”命令使用户能将一系列按键指定给某一按键。给用户一个在指令模式下的快捷按键。
    例如:键入“:map q dd”命令,此后处于指令模式时,每当用户键入q时,vi编辑器自动执行“dd”命令。
    取消宏操作“:unmap”命令。
    用户也可以使用map指令指定功能键,例如:键入“:map #n dd”命令,其中“#n”代表以n为功能键号的功能键。
4.“.exrc”文件
    用户在vi编辑器中所设置的所有选项都是临时的,当用户退出时,它们都会失效。要使这些设置永久保存,可以将选项的设置保存到文件

“.exrc”中。
    当用户打开vi编辑器时,它自动查看用户当前的工作目录中的“.exrc”文件,并根据在文件中的内容设置编辑环境。如果vi没有在当前目

录中发现“.exrc”文件,则将查找用户的主目录,并根据在哪里发现的“.exrc”文件设置编辑环境。如果vi一个“.exrc”文件也没找到,则

对选项使用默认值。
    “.exrc”文件属于启动文件。
例如:建立一个“.exrc”文件。
在终端中键入“vi .exrc”,回车。
在vi编辑器中键入:
  set autoindent
  set shiftwidth=2
  set nomagic
  set number
  set scroll=20
  set showmode
保存退出即可
5.运行Shell命令
    用户可以在vi的命令行运行Linux Shell命令,使得用户可以临时抛开vi来运行Shell命令。
    vi编辑器用“!”来通知vi其后面是一个Shell命令。例如:键入“:!date”命令,vi编辑器将清除屏幕,输出当前系统时间,后按任意键返回vi编辑器,并可以继续编辑。
    如果用户系统将Shell命令执行的结果加到文件文本中,可以使用“:r!”和相应的Shell命令来将命令结果写到用户文件文本中。

 

光标控制命令
  命令 光标移动
  h或^h 向左移一个字符
  j或^j或^n 向下移一行
  k或^p 向上移一行
  l或空格 向右移一个字符
  G 移到文件的最后一行
  nG 移到文件的第n行
  w 移到下一个字的开头
  W 移到下一个字的开头,忽略标点符号
  b 移到前一个字的开头
  B 移到前一个字的开头,忽略标点符号
  L 移到屏幕的最后一行
  M 移到屏幕的中间一行
  H 移到屏幕的第一行
  e 移到下一个字的结尾
  E 移到下一个字的结尾,忽略标点符号
  ( 移到句子的开头
  ) 移到句子的结尾
  { 移到段落的开头
  } 移到下一个段落的开头
  0或| 移到当前行的第一列
  n| 移到当前行的第n列
  ^ 移到当前行的第一个非空字符
  $ 移到当前行的最后一个字符
  +或return 移到下一行的第一个字符
  - 移到前一行的第一个非空字符
  在vi中添加文本
  命令 插入动作
  a 在光标后插入文本
  A 在当前行插入文本
  i 在光标前插入文本
  I 在当前行前插入文本
  o 在当前行的下边插入新行
  O 在当前行的上边插入新行
  :r file 读入文件file内容,并插在当前行后
  :nr file 读入文件file内容,并插在第n行后
  escape 回到命令模式
  ^v char 插入时忽略char的指定意义,这是为了插入特殊字符
  在vi中删除文本
  命令 删除操作
  x 删除光标处的字符,可以在x前加上需要删除的字符数目
  nx 从当前光标处往后删除n个字符
  X 删除光标前的字符,可以在X前加上需要删除的字符数目
  nX 从当前光标处往前删除n个字符
  dw 删至下一个字的开头
  ndw 从当前光标处往后删除n个字
  dG 删除行,直到文件结束
  dd 删除整行
  ndd 从当前行开始往后删除
  db 删除光标前面的字
  ndb 从当前行开始往前删除n字
  :n,md 从第m行开始往前删除n行
  d或d$ 从光标处删除到行尾
  dcursor_command 删除至光标命令处,如dG将从当产胆行删除至文件的末尾
  ^h或backspace 插入时,删除前面的字符
  ^w 插入时,删除前面的字
  修改vi文本
  每个命令前面的数字表示该命令重复的次数
  命令 替换操作
  rchar 用char替换当前字符
  R text escape 用text替换当前字符直到换下Esc键
  stext escape 用text代替当前字符
  S或cctext escape 用text代替整行
  cwtext escape 将当前字改为text
  Ctext escape 将当前行余下的改为text
  cG escape 修改至文件的末尾
  ccursor_cmd text escape 从当前位置处到光标命令位置处都改为text
  在vi中查找与替换
  命令 查找与替换操作
  /text 在文件中向前查找text
  ?text 在文件中向后查找text
  n 在同一方向重复查找
  N 在相反方向重复查找
  ftext 在当前行向前查找text
  Ftext 在当前行向后查找text
  ttext 在当前行向前查找text,并将光标定位在text的第一个字符
  Ttext 在当前行向后查找text,并将光标定位在text的第一个字符
  :set ic 查找时忽略大小写
  :set noic 查找时对大小写敏感
  :s/oldtext/newtext 用newtext替换oldtext
  :m,ns/oldtext/newtext 在m行通过n,用newtext替换oldtext
  & 重复最后的:s命令
  :g/text1/s/text2/text3 查找包含text1的行,用text3替换text2
  :g/text/command 在所有包含text的行运行command所表示的命令
  :v/text/command 在所有不包含text的行运行command所表示的命令
  在vi中复制文本
  命令 复制操作
  yy 将当前行的内容放入临时缓冲区
  nyy 将n行的内容放入临时缓冲区
  p 将临时缓冲区中的文本放入光标后
  P 将临时缓冲区中的文本放入光标前
  "(a-z)nyy 复制n行放入名字为圆括号内的可命名缓冲区,省略n表示当前行
  "(a-z)ndd 删除n行放入名字为圆括号内的可命名缓冲区,省略n表示当前行
  "(a-z)p 将名字为圆括号的可命名缓冲区的内容放入当前行后
  "(a-z)P 将名字为圆括号的可命名缓冲区的内容放入当前行前
  在vi中撤消与重复
  命令 撤消操作
  u 撤消最后一次修改
  U 撤消当前行的所有修改
  . 重复最后一次修改
  , 以相反的方向重复前面的f、F、t或T查找命令
  ; 重复前面的f、F、t或T查找命令
  "np 取回最后第n次的删除(缓冲区中存有一定次数的删除内容,一般为9)
  n 重复前面的/或?查找命令
  N 以相反方向重复前面的/或?命令
  保存文本和退出vi
  命令 保存和/或退出操作
  :w 保存文件但不退出vi
  :w file 将修改保存在file中但不退出vi
  :wq或ZZ或:x 保存文件并退出vi
  :q! 不保存文件,退出vi
  :e! 放弃所有修改,从上次保存文件开始再编辑
  vi中的选项
  选项 作用
  :set all 打印所有选项
  :set nooption 关闭option选项
  :set nu 每行前打印行号
  :set showmode 显示是输入模式还是替换模式
  :set noic 查找时忽略大小写
  :set list 显示制表符(^I)和行尾符号
  :set ts=8 为文本输入设置tab stops
  :set window=n 设置文本窗口显示n行
  vi的状态
  选项 作用
  :.= 打印当前行的行号
  := 打印文件中的行数
  ^g 显示文件名、当前的行号、文件的总行数和文件位置的百分比
  :l 使用字母"l"来显示许多的特殊字符,如制表符和换行符
  在文本中定位段落和放置标记
  选项 作用
  { 在第一列插入{来定义一个段落
  [[ 回到段落的开头处
  ]] 向前移到下一个段落的开头处
  m(a-z) 用一个字母来标记当前位置,如用mz表示标记z
  '(a-z) 将光标移动到指定的标记,如用'z表示移动到z
  在vi中连接行
  选项 作用
  J 将下一行连接到当前行的末尾
  nJ 连接后面n行
  光标放置与屏幕调整
  选项 作用
  H 将光标移动到屏幕的顶行
  nH 将光标移动到屏幕顶行下的第n行
  M 将光标移动到屏幕的中间
  L 将光标移动到屏幕的底行
  nL 将光标移动到屏幕底行上的第n行
  ^e(ctrl+e) 将屏幕上滚一行
  ^y 将屏幕下滚一行
  ^u 将屏幕上滚半页
  ^d 将屏幕下滚半页
  ^b 将屏幕上滚一页
  ^f 将屏幕下滚一页
  ^l 重绘屏幕
  z-return 将当前行置为屏幕的顶行
  nz-return 将当前行下的第n行置为屏幕的顶行
  z. 将当前行置为屏幕的中央
  nz. 将当前行上的第n行置为屏幕的中央
  z- 将当前行置为屏幕的底行
  nz- 将当前行上的第n行置为屏幕的底行
  vi中的shell转义命令
  选项 作用
  :!command 执行shell的command命令,如:!ls
  :!! 执行前一个shell命令
  :r!command 读取command命令的输入并插入,如:r!ls会先执行ls,然后读入内容
  :w!command 将当前已编辑文件作为command命令的标准输入并执行command命令,如:w!grep all
  :cd directory 将当前工作目录更改为directory所表示的目录
  :sh 将启动一个子shell,使用^d(ctrl+d)返回vi
  :so file 在shell程序file中读入和执行命令
  vi中的宏与缩写
  (避免使用控制键和符号,不要使用字符K、V、g、q、v、*、=和功能键)
  选项 作用
  :map key command_seq 定义一个键来运行command_seq,如:map e ea,无论什么时候都可以e移到一个字的末尾来追加文本
  :map 在状态行显示所有已定义的宏
  :umap key 删除该键的宏
  :ab string1 string2 定义一个缩写,使得当插入string1时,用string2替换string1。当要插入文本时,键入string1然后按Esc键,系统就插入了string2
  :ab 显示所有缩写
  :una string 取消string的缩写
  在vi中缩进文本
  选项 作用
  ^i(ctrl+i)或tab 插入文本时,插入移动的宽度,移动宽度是事先定义好的
  :set ai 打开自动缩进
  :set sw=n 将移动宽度设置为n个字符
  n> 使n行都向右移动一个宽度,例如3>>就将接下来的三行每行都向右移动一个移动宽度
  1.编辑模式: 插入/替换 (按INSERT键切换)
  2.[ESC] 指令模式
  3.输入模式 将在指令模式下输入 a
  新增(a,A)
  a:从光标所在位置后面开始新增资料,光标后的资料随新增资料向后移动。
  A:从光标所在列最后面的地方开始新增资料。
  插入(i,I)
  i:从光标所在位置前面开始插入资料,光标后的资料随新增资料向后移动。
  I:从光标所在列的第一个非空白字元前面开始插入资料。
  开始(o,O)
  o:在光标所在列下新增一列并进入输入模式。
  O:在光标所在列上方新增一列并进入输入模式。
  4.存盘/退出
  [ESC] :wq //存盘退出
  :w! //存盘继续
  :q //退出 (源文件未被编辑过可用)
  :q! //强制退出
  5.删除与改修
  [ESC] x //删除光标所在字符
  dd //删除光标所在列。
  r //修改光标所在字元,r后接着要修正的字符。
  R //进入取替换状态。
  s //删除光标所在字元,并进入输入模式。
  S //删除光标所在的列,并进入输入模式。
  6.恢复
  [ESC] u //可以恢复被删除的文字。
  U //可以恢复光标所在列的所有改变。

VI编辑器的使用方法的更多相关文章

  1. 【Linux基础】VI 编辑器基本使用方法

    vi编辑器是所有Unix及Linux系统下标准的编辑器.对Unix及Linux系统的任何版本,vi编辑器是完全相同的,它是Linux中最基本的文本编辑器. 第一章vi的三种模式 第二章vi文本编辑器 ...

  2. linux系统之-vi编辑器

    在linux系统使用中,掌握熟练的vi编辑器,可以提高linux工作效率.那么vi编辑器的使用方法有哪些呢? vi编辑器可在绝大部分linux发行版中使用. Vi编辑器的作用:创建或修改文件:维护li ...

  3. 解决vi编辑器不能使用方向键和退格键问题的两种方法

    方法1.使用vi命令时,不能正常编辑文件,使用方向键时老是出现很多字母? 在Ubuntu中,进入vi命令的编辑模式,发现按方向键不能移动光标,而是会输出ABCD,以及退格键也不能正常删除字符.这是由于 ...

  4. Kali Linux的vi编辑器/vim编辑器使用方法

    转载声明:本文为转载文章 原文地址:https://www.52host.cn/blog/kali-linux-vi-editor/ Kali Linux系统的vi编辑器/vim编辑器的使用和Cent ...

  5. vi编辑器使用方法(最详细)

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

  6. Vi 和 Vim 编辑器详细使用方法

    学习linux的一项必会技能,熟练使用vi/vim编辑器那便最重要的了.不过一堆操作看的也是太头疼了,以下整理了些常用到的命令. 工作模式 vi编辑界面有三种不同的工作模式,分别为命令模式.输入模式. ...

  7. 10年前文章_ vi编辑器查找与替换方法

    vi编辑器查找与替换方法1.查找:/ 当前行往下找:? 当前行往上找找到后继续查找同方向 n反方向 N2.替换格式: range s/source/target/g解释:range表示要搜索的范围 & ...

  8. Ubuntu系统vi编辑器上下左右键变ABCD的解决方法(转)

    首先卸载旧版本的vi编辑器: $sudo apt-get remove vim-common 然后安装新版vi即可: $sudo apt-get install vim Ubuntu自带有几种版本的v ...

  9. linux中vi编辑器的使用

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

随机推荐

  1. resid入门笔记(二)

    本节介绍redis 消息订阅   密码  持久化  主从配置   首先我对消息订阅理解的不深,应该说仅知道概念吧 发送消息  cctv1 发送 hello   cctv2 发送 ‘你好’ client ...

  2. 不同的extend 在调用构造函数时不同的写法

     /**  * jQuery.hhNewSilder 滚动图片插件  * User: huanhuan  * QQ: 651471385  * Email: th.wanghuan@gmail.com ...

  3. python 调用第三方库压缩png或者转换成webp

    因为工作需要去研究了下png的压缩,发现转换成webp可以小很多,但是webp在手机上的解码速度比png的解码速度慢很多.出于进几年手机设备的处理器的性能也不错了,所以准备两套方案. 在网上搜索了一些 ...

  4. Python 爬虫入门(requests)

    相信最开始接触Python爬虫学习的同学最初大多使用的是urllib,urllib2.在那之后接触到了第三方库requests,requests完全能满足各种http功能,真的是好用爆了 :D 他们是 ...

  5. cin、cin.get()、cin.getline()、getline()、gets()等函数的用法

    学C++的时候,这几个输入函数弄的有点迷糊:这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行)转载请保留作者信息:1.cin1 ...

  6. Mysql,Oracle,Java数据类型对应

    Mysql Oracle Java BIGINT NUMBER(19,0) java.lang.Long BIT RAW byte[] BLOB BLOB RAW byte[] CHAR CHAR j ...

  7. android正在运行进程和后台缓存进程的区别

    正在运行的进程:需要占用一定的cpu资源和RAM(内存)空间,多少的话看是什么应用,要消耗一定的电量,影响手机速度等性能. 后台缓存的进程:不需要占用cpu资源,会在RAM中写入一部分数据,当下次打开 ...

  8. Android手势监听

    public class MainActivity extends Activity { /* * 要实现手指在屏幕上左右滑动的事件需要实例化对象GestureDetector,new * Gestu ...

  9. datanode无法连接到master

    初次在VM上配置Hadoop,开了三台虚拟机,一个作namenode,jobtracker 另外两台机子作datanode,tasktracker 配置好后,启动集群 通过http://localho ...

  10. [转载]C#读写配置文件(XML文件)

    .xml文件格式如下 [xhtml] view plaincopy <?xml version="1.0" encoding="utf-8"?> & ...