zoukankan      html  css  js  c++  java
  • vi指令详解

    ★ vi的模式(命令模式、插入模式、ex模式)

    1)命令模式:

      在我们刚刚通过vi新建或打开一个已经存在的文件时,首先默认被读取的模式就是“命令模式”,命令模式的特征就是,在编辑器窗口左下角的位置上没有任何的提示标语。

      在这个模式下,如果不通过相应的命令,我们无法输入新的文本到这个文件中。这里建议新接触刚刚接触vi的朋友在用vi打开一个文件时不要处于心切而乱 按键盘试图输入一些文本到文件中,因为命令模式所谓的“命令”,并不是我们在命令行提时下输入的过程诸如“ls -> 回车”等等形式的命令。确切说vi命令模式下的命令,只是计算机键盘上的某个按键或某些按键的组合,当我们在命令模式下敲下键盘一个按键的时候,相应命令就已经被执行。

       在这里,首先介绍移动光标的命令。通常光标的移动可以通过键盘右边的方向键,但是由于每次移动光标,手都要大幅度的移动到键盘右边,这样使用vi是体现不出效率的,所以建议使用vi固有的命令(键)来控制光标的移动。

      光标的移动命令如下所示:

      向右移动 --> l
      向左移动 --> h
      向下移动 --> j
      向上移动 --> k
      如上所示,例如要向右移动光标8个字符的距离,只要在键盘上敲 l 键8次即可;向下移动3行的距离,只要在键盘上敲 j 键3次即可……也就是说,在vi命令模式中通过这几个键(命令)来控制光标的移动。
      其次就是文本删除的命令。在Windows下大多数编辑器在删除文本时只要连续按[Backspace]键即可。但由于在vi中,插入模式和命令模式是分离开来的,所以在命令模式下需要通过命令(按键)来删除文本,而不是直接按[Backspace]键。

      文本删除的命令如下所示:

      删除光标所在位置的字符 --> x
      删除光标所在的行 --> dd(敲 d 两次)
      如上所示,例如要删除从光标位置起向右的3个字符,只要在键盘上敲 x 键3次即可;要删除光标所在的行,只要敲 dd (连续敲d键两次),光标所在行的所有字符以及行将会被删除。
      再次,当编辑完了一个文档,想要保存后退出的时候的命令为“ZZ”(大写、连续敲2次)。

      保存并退出文档:

      保存当前修改并退出 --> ZZ
      另外,vi还有一些编辑性质的命令,一并总结如下

      具有编辑性质的有用的命令:

      撤销上一步操作 --> u
      移动光标到行首 --> 0 (数字0)
      移动光标到行末 --> $
      移动光标到当前页最顶行 --> H
      移动光标到当前页最底行 --> L
      向前翻一页(Page Up) --> Ctrl + f
      向后翻一页(Page Down) --> Ctrl + b
      还有在服务器配置中使用vi时,频繁用到的就是vi的搜索功能。在vi命令行的状态下,键入“/”(斜 线)后,vi底部出现“/”,并处于输入等待状态,这时候输入要查找的文字或文字列,然后按回车就可以找到相应的文字或文字列。当有多个对象存在时,敲 “n”(小写)键为查找下一个目标,敲“N”为查找上一个目标。

    vi是所有UNIX系统都会提供的屏幕编辑器,它提供了一个视窗设备,通过它可以编辑文件。当然,对UNIX系统略有所知的人,或多或少都觉得vi超级难用,但vi是最基本的编辑器,学好了vi,以后在UNIX世界里必将畅行无阻、游刃有余,因为其他几种文本处理器并非UNIX标准配备。若其它的Linux机器里没有安装joe或pico,如果不会使用vi,那可能就真的没辄了。

    vi编辑器有3种模式:命令模式、输入模式、末行模式。掌握这三种模式十分重要:

    命令模式:vi启动后默认进入的是命令模式,从这个模式使用命令可以切换到另外两种模式,同时无论在任何模式下只要按一下[Esc]键都可以返回命令模式。在命令模式中输入字母i或o或a,就可以进入vi的输入模式编辑文件。

    输入模式:在这个模式中我们可以编辑、修改、输入等编辑工作,在编辑器最后一行显示一个“--INSERT--”标志着vi进入了输入模式。当我们完成修改输入等操作的时候我们需要保存文件,这时我们需要先返回命令模式,在进入末行模式保存。

    末行模式:在命令模式输入“:”即可进入该模式,在末行模式中有好多好用的命令。

    下面介绍vi常用的命令操作

    进入输入模式命令

    i 在光标 左侧输入正文[常用]
    a 在光标 右侧输入正文[常用]
    o 小写字符o, 在光标所在行的 下一行增添新行
    O 大写字符O, 在光标所在行的 上一行增添新行
    I 在光标 所在行的开头输入正文
    A 在光标 所在行的末尾输入正文
    上面介绍了几种切换到插入模式的简单方法。另外还有一些命令,它们允许在进入插入模式之前首先删去一段
    正文,从而实现正文的替换。这些命令包括:
    s 用输入的正文替换光标所指向的字符[常用]
    ns 用输入的正文替换光标右侧n 个字符
    cw 用输入的正文替换光标右侧的字 [常用]
    ncw 用输入的正文替换光标右侧的n 个字
    cb 用输入的正文替换光标左侧的字 [常用]
    ncb 用输入的正文替换光标左侧的 n 个字
    cd 用输入的正文替换光标的所在行[常用]
    ncd 用输入的正文替换光标下面的n 行
    c$ 用输入的正文替换从光标开始到本行末尾的所有字符[常用]
    c0 用输入的正文替换从本行开头到光标的所有字符[常用]

    r 取代光标所在处的字符, 比如c3 表示将光标所在处的字符替换为字符3 [常用]

    R 取代字符直至按【ESC】为止

    按【Esc】键或组合键【ctrl】+[ 退出输入模式

    末行模式

    w 保存文件 [常用]

    w file 将当前文件的内容保存到file文件

    wq 保存文件并退出vi编辑器[常用]

    wq file 将 当前文件的内容写入file 文件,并保持原有文件的内容不变,然后退出vi编辑器(假如当前文件内容有变动但未执行保存操作,那么执行该命令后不会退出vi编辑器)

    r file 读取file 文件的内容,插入当前光标所在行的后面
    e file 关闭当前文件,并打开新文件file (如果当前文件内容有变动但未保存,则该命令不会被执行)[常用]
    f file 将当前文件重命名为file [常用]
    f 打印当前文件名称和状态,如文件的行数、光标所在的行号等

    q 退出vi编辑器(如果当前文件有改动,则无法退出) [常用]

    q! 强制退出vi编辑器(不保存修改)[常用]

    # 将光标移到第#行[常用]

    PS: 关于行号使用的一些技巧:

    一般用数值来指定绝对行号;字符“.”表示光标所在行的行号;字符“$”表示文件最后一行的行号,例如:

    .+5 将光标从当前行往下移动5 行

    $ 将光标移到文件的最后一行

    1 将光标移到文件的第一行

    23w file 将文件的第23行写入file文件

    3,5w file 将第3 行至第5 行写入file 文件
    1,.w file 将第1 行至当前行写入file 文件
    .,$w file 将当前行至最后一行写入file 文件
    .,.+5w file 从当前行开始将6 行内容写入file 文件
    1,$w file 将所有内容写入file 文件,相当于:w file 命令

    移动光标的操作

    【Home】 光标到行首
    【End】 光标到行尾
    【Page Up】 向上翻页

    【Page Down】 向下翻页

    【Delect】 删除光标位置的字符
    【Ctrl】+ f 向前移动一页

    【Ctrl】+ b 向后移动一页

    h 光标向左移动一个字符 [常用]
    j 光标向下移动一个字符 [常用]
    k 光标向上移动一个字符 [常用]
    l 光标向右移动一个字符 [常用]
    数字0 把光标移到行尾 [ 常用]
    $ 把光标移到行首 [ 常用]
    G 把光标移到文件的末尾 [ 常用]
    gg 把光标移到文件的开头 [ 常用]
    w 把光标移到下一个单词的开头 [ 常用]
    e 把光标移到当前或下一个单词的字尾 [ 常用]
    b 把光标移到当前或下一个单词的开头 [ 常用]
    ^ 把光标移到该行的第一个非空白字符(tab,space) [ 常用]
    :# 把光标移到该行的第#个位置,例如:3, :10 [ 常用]
    ) 光标移到句尾
    ( 光标移到句首
    注: 句子用半角句号后加一个空格(. )分割
    } 光标移到段落结尾
    { 光标移到段落开头
    注: 段落以空行分割
    nG 将光标定位到第n行的开头 [ 常用]

    n+ 将光标下移n行

    n- 将光标上移n行

    n$ 将光标下移n行,并置于行尾

    H 将光标置于当前屏幕的顶行

    M 将光标置于当前屏幕的中间行

    L 将光标置于屏幕的最后行

    ~ 改变当前字符的大小写 [ 常用]

    >> 把当前行往右移动8个字符(相当于【tab】键) [ 常用]

    << 把当前行往左移动8个字符(相当于【Shift】+【tab】) [ 常用]

    nz: 将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

    撤销操作

    u 命令撤销最近一次的操作,可以使用多次来恢复原有的操作 [ 常用]
    U 撤销所有操作
    . 可以恢复对使用u命令的操作 [ 常用]

    复制/删除/粘贴操作

    x 删除光标处的单个字符,并把删除后的字符放到缓存区( 实际上删除相当于剪切 ) [ 常用]
    nx 删除三个字符。 例如, 3x删除光标处向右的三个字符
    "bnx 把删除的字符放到缓存区b

    dw 删除当前字符到单词尾(包括空格)的所有字符 [ 常用]

    dd 删除光标所在行 [常用] [ 常用]
    ndd 删除n行。 例如, 3dd从当前行开始向下删除三行文本 [ 常用]

    "bndd 把删除的内容放到缓存区b

    PS: 如果要删除第m至第n行的内容,可以在末行模式中输入m,nd。比如3,5d表示删除第3~5行 [ 常用]

    yy 复制当前光标所在行的内容到vi缓冲区 [ 常用]
    nyy 复制n行。例如:5yy就是从当前光标所处的行向下复制5行,把复制的内容放到vi缓存区 [常用]
    "bnyy 将复制的内容放到缓存区b . 比如,b3yy 将三行数据存入缓存区b [ 常用]

    PS: 如果要复制第m行到第n行之间的内容,可以在末行模式中输入m,ny例如:3,5y复制第三行到第五行内容到缓存区 [ 常用]

    yw 复制当前光标所在位置到单词尾字符 (不包括空格) 的内容到vi缓存区,相当于复制一个单词 [常用]
    nyw 复制n个单词例如:2yw就是复制两个单词
    "bnyw 例如, 复制n个单词到缓存区b

    y$ 复制光标所在位置到行尾内容到缓存区
    y^ 复制光标所在位置到行首内容到缓存区
    p 小写p, 将缓存区的内容粘贴到当前行的下方(与yy配合) ,或插入到当前光标的下一个位置(与dw, x, y$ , y^ 配合)[常用]

    P 大写P,与小写p的作用类似,但粘贴都方向相反

    查找与替换

    vi的查找与替换功能要再末行模式下完成。

    /关键字 自上而下查找,比如/work,表示从当前光标处往下查找关键字为work的内容[ 常用]

    ?关键字 自下而上查找 , 比如/work,表示从当前光标处往上查找关键字为work的内容 [ 常用]

    PS: 当找到匹配项时,光标会定位在关键词都字符开头。要继续查找下一个匹配项,只需敲入字符n; 要往回查找,敲入N. 可以输入2n往下查找下下一个匹配项

    s/old_string/new_string 用new_string替换光标所在行中首次出现的old_string

    s/old_string/new_string/g 用new_string替换光标所在行中的所有old_string

    m,ns/old_string/new_string/g 用new_string替换第m行至第n行的所有old_string [ 常用]

    %s/old_string/new_string/g 用new_string替换所有的old_string [ 常用]

    /pattern_address/s/old_string/new_string/g 从当前光标处往下查找与pattern_address匹配的行,然后在该行上用new_string替换掉所有的old_string(实际上,这个命令是由/pattern_address 和/s/old_string/new_string/g组合而成)

    g/pattern_address/s/old_string/new_string/g 找出所有与pattern_address匹配的行, 并用new_string替换掉每一行所有的old_string( 注意: 前后两个g的含义是不一样的,前面的g表示对整个文本搜索与pattern_address匹配的行, 后面的g表示针对每一个与pattern_address匹配的行都用new_string替换掉old_string)

    如果pattern_address和old_string一样,可以简写为g/pattern_address/s//new_string

    可以在所有的命令尾加一个c命令,强制每个替换需要用户进行确认,例如:s/old/new/c 或s/old/new/gc [ 常用]

    PS: 查找的一些技巧

    /str/w file 正向搜索,并将第一个包含字符串str 的行写入file 文件
    /str1/,/str2/w file 正向搜索,并将包含字符串str1 的行至包含字符串str2 的行写入file 文件

    恢复文件
    vi在编辑某一个文件时,会生成一个临时文件,这个文件以. 开头并以.swp结尾。正常退出该文件自动删除,如果意外退出例如忽然断电,该文件不会删除,我们在下次编辑时可以选择一下命令处理:

    O 只读打开,不改变文件内容
    E 继续编辑文件,不恢复.swp文件保存的内容
    R 将恢复上次编辑以后未保存文件内容
    Q 退出vi
    D 删除.swp文件

    或者使用vi -r 文件名来恢复未保存的内容

  • 相关阅读:
    C++学习9 this指针详解
    福建省第八届 Triangles
    UVA 11584 Partitioning by Palindromes
    POJ 2752 Seek the Name, Seek the Fame
    UVA 11437 Triangle Fun
    UVA 11488 Hyper Prefix Sets (字典树)
    HDU 2988 Dark roads(kruskal模板题)
    HDU 1385 Minimum Transport Cost
    HDU 2112 HDU Today
    HDU 1548 A strange lift(最短路&&bfs)
  • 原文地址:https://www.cnblogs.com/weiwei-python/p/9781217.html
Copyright © 2011-2022 走看看