现在的位置: 首页 > 综合 > 正文

vi 常用命令

2014年02月26日 ⁄ 综合 ⁄ 共 3481字 ⁄ 字号 评论关闭

vi(Visual)是以视觉为导向的全屏幕编辑器、共分为三种方式(mode):

command方式:
任何输入都会作为编辑命令,而不会出现在屏幕上,若输入错误则有“岬”的声音;任何输入都引起立即反映

insert方式:
任何输入的数据都置于编辑寄存器。在command方式下输入(I,a,A等),可进入insert方式,insert方式下按ESC,可跳回command方式。

escape方式:
以“:”或者“/”为前导的指令,出现在屏幕的最下一行,任何输入都被当成特别指令。

进入vi(在系统提示符下面输入以下指令):

vi 进入vi而不读入任何文件

vi filename进入vi并读入指定名称的文件(新、旧文件均可)。

vi +n filename进入vi并且由文件的第几行开始。

vi +filename 进入vi并且由文件的最后一行开始。

vi + /word filename 进入vi并且由文件的word这个字开始。

vi filename(s) 进入vi并且将各指定文件列入名单内,第一个文件先读入。

vedit进入vi并且在输入方式时会在状态行显示“INSERT MODE"。


编辑数个文件(利用vi filename(s))进入vi后)

:args 显示编辑名单中的各个文件名

:n读入编辑名单中的下一个文件

:rew读入编辑名单中的第一个文件

:e# 读入编辑名单内的前一个文件

:e file 读入另一个文件进vi(此文件可不在编辑名单内),若原文件经修改还没有存档,则应先以: w 存档。

:e! file强迫读入另一个文件进入vi,原文件不作存档动作。


存储及退出vi

:w filename          存入指定文件,但未退出vi(若未指定文件名则为当前工作的文件名)。

:wq 或者 :x或者zz 存文件,并且退出vi.

:q不作任何修改并退出vi。

:q! 放弃任何修改并退出vi。

:!command暂时退出vi并执行shell指令,执行完毕后再回到vi。

:sh 暂时退出vi到系统下,结束时按Ctrl + d则回到vi。


加数据指令

i在关标位置开始插入字符,结束时候按ESC键。

I在光标所在行的最前面开始加字,结束时按ESC键。

a 在光标位置后开始加字,结束时按ESC键。

A在光标所在行的最后面开始加字,结束时按ESC键。

o在光标下加一空白行并开始加字,结束时按ESC键。

O在光标上加一空白行并开始加字,结束时按ESC键。

!command执行shell指令,并把结果加在光标所在行的下一行。


删除指令

nx删除由光标位置起始的n个字符(含光标位置,按一个x表示删除光标所在的字符)

nX 删除由光标位置起始的n个字符(不含光标位置)。

ndw 删除光标位置其实的n个字符组(word)。

d0 将行的开始到光标位置的字符全部删除。

d$ 或D 将光标位置起始到行尾的字符全部删除。

ndd 将光标位置起始的n行(整行)删除(dd表示删除光标所在行)。

:start,endd 删除文件的第start到end行。


光标移动

0 移到一行的开始

$ 移到一行的最后

[ 移到文件开始位置

] 移到文件结束位置

nh往左移n位

nl或者spacebar 往右移n位

nk向上移n行

n+向上移n行,光标在该行的起始

ni 向下移n行

n-向下移n行,光标在该行的起始

H 移到屏幕的左上角

M 移到屏幕的中间行开头

L 移到屏幕的最后一行

G 移到文件的最后一行

nG或者:n移到文件的第n行

nw右移n个字组,标点符号属于字组

nW右移n个字组,标点符号不属于字组

nb左移n个字组,标点符号属于字组

nB左移n个字组,标点符号不属于字组


Ctrl + u屏幕上卷半个菜单

Ctrl + d 屏幕下卷半个菜单

Ctrl + b 屏幕上卷一个菜单

Ctrl + F 屏幕下卷一个菜单


修改指令

r 修改光标文件的字符

R 从光标位置开始修改,结束时按ESC键

new 更改n组字符,结束时按ESC键

ncc从光标所在位置开始更改n行,结束时按ESC键


重排各行长度

i并按Enter将该行由光标所在处断开,并进入insert方式

J 把下一行的数据连接到本行之后


寻找指令

/text 从光标位置往下找字串text

?text 从光标位置往上找字串text

n继续找下一个字串(在输入上面的寻找指令之后使用)


寻找并且取代指令

:getxt1/s/ /text2/options 将各行的text1替换为text2

option=g  表示文件中所有的text1均被取代,若未输入任何option,则只有                                                     各行中的第一个出现的text1被取代

option=go 在屏幕显示各取代的行

option=gc  在每个字串取代之前要求确认

Start,endgtext1/s/ / text2/options 同上,只寻找并取代第start~end行。

或:Start,ends/text1/text2/options


复制及移动文件

:first,last co dest 将first 到last行的数据复制到目标行(dest)下面

:Start,endm dest将start 到 end行的数据移动到目标行(dest)下。

:r filename将指定文件的内容读入光标所在行下。

nY 将光标所在位置开始的n行数据暂存

p 复制暂存数据在光标的下一行

P 复制暂存数据在光标的上一行


其他命令

.     重复前一指令

u    取消前一指令

Ctrl + l    刷新屏幕显示

:set number 显示文件的行号,但不会存文件

:set nonumber 解除行号显示

:set ai     设置每行起始位置(以光标当前位置为起始)

:set noai     取消行起始位置设定

:f 或<Ctrl> + g      告诉用户有关现行编辑文件的数据。

  • ★命令模式

    • 移动光标

      • h
        或 向左方向键(←) → 光标向左移动一个字元
      • j
        或 向下方向鍵(↓) → 光标向下移动一个字元
      • k
        或 向上方向鍵(↑) → 光标向上移动一个字元
      • l
        或 向右方向鍵(→) → 光标向右移动一个字元
      • [Ctrl]
        + [f] → 屏幕『向下』移动一页,相当于 [Page Down]按键
      • [Ctrl]
        + [b] → 屏幕『向上』移动一页,相当于 [Page Up] 按键
      • n<space>
        → n 表示『数字』。按下数字后再按空白鍵,光标会向右移动这一行的 n 个字元
      • 0
        → 数字『 0 』:移动到这一行的最前面字元处
      • $
        → 移动到这一行的最后面字元处
      • G
        → 移动到这个文件的最后一行
      • nG
        → n 为数字。移动到这个文件的第 n 行(可配合 :set nu)
      • gg
        → 移动到这个文件的第一行,相当于 1G
      • n<Enter>
        → n 为数字。光标向下移动 n 行

    • 查找与替换

      • /word
        → 向光标之下查找一个名称为 word 的字符串。如想查找 eric4ever 字符串,输入 /eric4ever 即可
      • ?word
        → 向光标之上查找一个名称为 word 的字符串
      • n
        → 『重复前一个查找的动作』
      • N
        → 与 n 刚好相反,为『反向』进行前一个查找动作
      • :n1,n2s/word1/word2/g
        → n1 与 n2 均为数字。在第 n1 与 n2 行之间查找 word1 字符串,并将该字符串替换为 word2。如:在 1 到 9 行之间查找 eric4ever 并替换为 ERIC4EVER 则:『:1,9s/eric4ever/ERIC4EVER/g』
      • :1,$s/word1/word2/g
        → 从第一行到最后一行查找 word1 字符串,并将该字符串替换为 word2
      • :1,$s/word1/word2/gc
        → 从第一行到最后一行查找 word1 字符串,并将该字符窗替换为 word2,替换前显示提示对话框是否确认替换
    • 删除、复制与粘贴

      • x,
        X → 在一行字当中,x 为向后刪除一个字元 (相当于 [del] 按键), X 为向前刪除一个字元(相当于 [backspace] 按键)
      • dd
        → 刪除光标所在的那一整行
      • ndd
        → n 为数字。刪除光标所在的向下 n 列
      • yy
        → 复制光标所在的那一行
      • nyy
        → n 为数字。复制光标所在的向下 n 列
      • p,
        P → p 为将已复制的内容粘贴在光标下一行上,P 则为粘贴在光标的上一行
      • u
        → 还原前一个动作
      • [Ctrl]+r
        → 重做上一个动作
      • .
        → 小数点,意思是重复前一个动作
  • ★编辑模式

    • i,
      I → 插入:在目前的光标所在处插入输入的文字,已存在的文字会向后退; 其中, i 为『从目前光标所在处插入』, I 为『在目前所在行的第一個非空白字元处开始插入』
    • a,
      A → a 为『从目前光标所在的下一个字元处开始插入』, A 为『从光标所在行的最后一个字元处开始插入』
    • o,
      O → o 为『在目前光标所在的下一行处插入新的一行』, O 为『在目前光标所在处的上一行插入新的一行』
    • r,
      R → r 为『取代光标所在的那一个字元』, R 为『一直取代光标所在的文字,直到按下 ESC 为止』
    • Esc
      → 退出编辑模式,回到一般模式中

抱歉!评论已关闭.