zoukankan      html  css  js  c++  java
  • Linux 笔记

    博客地址:http://www.moonxy.com

    一、前言

    Vi 与 Vim 都是多模式编辑器,是 Linux 中必不可少的工具。不同的是 Vim 是 Vi 的升级版本,它不仅兼容 Vi 的所有命令,Vi 使用于文本编辑,但是 Vim 更适用于 Coding。不仅如此,Vim 还有一些新的特性在里面。
    Vim 的这些优势主要体现在以下几个方面:
    1、多级撤消:我们知道在 vi 里,按 u只能撤消上次命令,而在vim里可以无限制的撤消。
    2、易用性:Vi 只能运行于 Unix中,而 Vim 不仅可以运行于 Unix,Windows,Mac 等多操作平台。
    3、语法加亮:Vim 可以用不同的颜色来加亮你的代码。
    4、可视化操作:就是说 Vim 不仅可以在终端运行,也可以运行于 X Window、 Mac OS、 Windows。
    5、对 Vi 的完全兼容:某些情况下,你可以把 Vim 当成 Vi 来使用。

    二、三种模式

    Vi 和 Vim 都有 3 种模式,分别为:一般模式、编辑模式、命令模式。

    2.1 一般模式

    该模式可以移动光标、删除字符等。
    使用 vim filename 编辑一个文件时,默认进入该文件的一般模式,如果还没有安装 Vim,则可以使用 yum 先安装:[root@ryan ~]# yum install -y vim-enhanced

    一般模式 - 移动光标

    h 或向左方向键(←):光标"向左"移动一个字符;
    j 或向下方向键(↓):光标"向下"移动一个字符;
    k 或向上方向键(↑):光标"向上"移动一个字符;
    l 或向右方向键(→):光标"向右"移动一个字符;
    [Ctrl]+[f]或者[Page Down] 按键:屏幕"向下"移动一页;
    [Ctrl]+[b]或者[Page Up] 按键:屏幕"向上"移动一页;
    [Ctrl]+[d]:屏幕"向下"移动半页;
    [Ctrl]+[u]:屏幕"向上"移动半页;
    0 或者 Shift+6:数字"0",移动到本行的行首(常用);
    Shift+4:移动到本行行尾(常用);
    gg:移动到这个文件的首行,相当于 1G(常用);
    G:移动到这个文件的最后一行(常用,先按 Capse Lock 切换到大写,然后再按字母 G);
    nG:n 为任意数字。移动到这个文件的第 n 行。例如 20G 则会移动到这个文件的第 20 行(常用,可配合显示行号 :set nu);
    n<Enter>:n 为数字,然后按回车键,光标向下移动 n 行;

    一般模式 - 删除、复制与粘贴

    x,X:在一行字中,x 为向后删除一个字符(相当于 [Del] 按键),X 为向前删除一个字符(常用,相当于 [backspace] 即退格键);
    nx:n 为数字,连续向后删除n个字符。举例来说,要连续删除10个字符,则输入"10x";
    dd:删除/剪切光标所在的那一整行(常用);
    ndd:n 为数字。从光标位置开始,向下删除/剪切 n 行,例如 20dd 则是从光标行开始向下删除/剪切20行(常用);
    d1G:删除光标所在位置到第一行的所有数据;
    dG:删除光标所在位置到最后一行的所有数据;
    d$:删除光标所在位置到该行的最后一个字符;
    d0:d 的后面是数字0,删除光标所在处,到该行的最前面一个字符;
    yy:复制光标所在的那一行(常用);
    nyy:n为数字。复制光标所在的向下n行,例如 20yy 则是复制 20 行(常用);
    y1G;复制光标所在行到第一行的所有数据;
    yG;复制光标所在行到最后一行的所有数据;
    y0:复制光标所在的那个字符到该行行首的所有数据;
    y$:复制光标所在的那个字符到该行行尾的所有数据;
    p,P:p 为将已复制的数据粘贴到光标的下一行,P 则为贴在光标上一行。举例来说,当前光标在第20行,且已经复制了10行数据。则按下 p 后,那10行数据会贴在原来的20行之后,即由21行开始贴。但如果是按下 P,那么原来的第20行会被变成30行(常用);
    J:将光标所在行与下一行的数据结合成同一行;
    c:重复删除多个数据,例如向下删除10行,[10cj];
    v:按 v 后移动光标会选中指定字符,然后可以实现复制、粘贴等操作;
    y:复制选中的字符;
    .:这是小数点,意思是重复前一个动作。如果想重复删除、重复粘贴,按下小数点"."就可以;
    u:复原前一个操作(常用);
    [Ctrl]+r:重做上一个操作(常用);
    u 与 [Ctrl]+r 是很常用的命令。一个是复原,另一个则是重做一次。利用这两个功能按键,编辑起来就得心应手。

    2.2 编辑模式

    在此模式下可以输入字符,按 ESC 键将回到一般模式。 
    一般模式下不可以修改某一个字符,如果要修改字符,只能进入编辑模式,从一般模式进入编辑模式,只需按 i、I、a、A、o、O、r 或 R 中的任何一个键即可。进入编辑模式后,在屏幕左下方会显示"-- INSERT --"或"-- REPLACE --"提示,从编辑模式回到一般模式时,只需要按 Esc 键即可。
    i、I
    插入:在当前光标所在处插入输入文字,已存在的文字会向后退;其中,i 为"从当前光标所在处插入",I 为"在当前所在行的第一个非空格符处开始插入"(常用);
    a、A
    a 为"从当前光标所在的下一个字符处开始插入",A 为"从光标所在行的最后一个字符处开始插入"(常用);
    o、O
    这是英文字母 o 的大小写。o 为"在当前光标所在的下一行处插入新的一行";O 为"在当前光标所在处的上一行插入新的一行"(常用);
    r、R
    替换:r 会替换光标所在的那一个字符;R 会一直替换光标所在的文字,直到按下 ESC 键为止;
    使用上面这些按键时,在vi画面的左下角处会出现"--INSERT--"或"--REPLACE--"的字样。通过名称就知道是什么操作。特别注意,上面也提过了,想在文件中输入字符时,一定要在左下角处看到 INSERT/REPLACE 才能输入。

    2.3 命令模式

    该模式可以实现保存文件、退出 Vi、设置 Vi、查找、替换等操作。 
    在一般模式下,输入 ":" 或者 "/" 即可进入命令模式。在该模式下,我们可以搜索某个字符或者字符串,也可以实现保存、替换、退出、显示行号等操作。
    /word
    从光标位置开始,向下寻找一个名为 word 的字符串。例如要在文件内搜索 word 这个字符串,就输入 /word 即可(常用);
    ?word
    从光标位置开始,向上寻找一个名为 word 的字符串;
    n
    n 是小写英文字母。表示"重复前一个搜索的动作"。举例来说,如果刚刚执行 /word 去向下搜索 word 字符串,则按下 n 后,会向下继续搜索下一个名称为 word 的字符串。如果是执行 ?word 的话,那么按下 n,则会向上继续搜索名称为 word 的字符串;
    N
    N 是大写英文字母。与 n 刚好相反,为"反向"进行前一个搜索操作。例如 /word 后,按下N则表示"向上"搜索 word;
    :n1,n2s/word1/word2/g
    n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串替换为 word2。举例来说,在 100 到 200 行之间搜索 word1 并替换为 word2,如果不加 g 则只替换每行的第一个 word1,如:":100,200s/word1/word2/g"(常用);
    :1,$s/word1/word2/g
    从第一行到最后一行寻找 word1 字符串,并将该字符串替换为 word2(常用);
    :1,$s/word1/word2/gc
    从第一行到最后一行寻找 word1 字符串,并将该字符串替换为 word2。且在替换前显示提示符给用户确认(conform)是否需要替换(常用);
    :w
    将编辑的数据写入硬盘文件中保存,但不离开;
    :w!
    若文件属性为"只读"时,强制写入该文件。不过,到底能不能写入,与文件权限有关;
    :q
    离开 vi;
    :q!
    若曾修改过文件,又不想存储,使用 ! 为强制离开不存储文件;注意一下,那个感叹号(!)在 vi 当中,常常具有"强制"的意思(常用);
    :wq
    存储后离开,若为 :wq! 则为强制存储后离开(常用);
    :e!
    将文件还原到最原始的状态;
    ZZ
    若文件没有更改,则不存储离开,若文件已经更改,则存储后离开;
    :w [filename]
    将编辑的数据存储成另一个文件(类似另存新文件);
    :r [filename]
    在编辑的数据中,读入另一个文件的数据。即将"filename"这个文件内容加到光标所在行的后面;
    :n1,n2 w [filename]
    将 n1 到 n2 行的内容存储成 filename 文件;
    :! command
    暂时离开 vi 到命令行模式下执行 command 的显示结果。例如":! ls /home",即可在vi中查看 /home 中以 ls 输出的文件信息;
    :set nu
    显示行号,设置之后,会在每一行的前缀显示该行的行号;
    :set nonu
    与 set nu 相反,为不显示行号;
    注意,在 vi 中,"数字"是很有意义的。数字通常表示重复做几次的意思。也有可能表示要去哪里的意思。举例来说,要删除 50 行,则是用"50dd"。数字加在动作之前。要向下移动20行,使用"20j"或者"20↓"即可。

     

  • 相关阅读:
    BZOJ1001 BJOI2006 狼抓兔子
    NOI2015 程序自动分析
    高斯消元法
    [POJ] 3666 Making the Grade
    [CODEVS] 2185 最长公共上升子序列
    [模板] LIS
    [CF] 219D Choosing Capital for Treeland
    [POJ] 2823 Sliding Window
    [BZOJ] 1072 [SCOI2007]排列perm
    [POJ] 1094 Sorting It All Out
  • 原文地址:https://www.cnblogs.com/cnjavahome/p/8570721.html
Copyright © 2011-2022 走看看