• Vim工作模式、Vim基础应用、高级应用


    收集了一些.由于不是急着用到,所以没有自己参考,还是先发上来.继续向下学习了 .
    万年编辑器: vi
    vi 的工作模式
    编辑模式
    插入模式
    命令模式
    shell 转换
    选项设置
    vim 和 gvim 的高级特色
    1.6.1 vi 的工作模式
    Vi 在初始启动后首先进入编辑模式,这时用户能利用一些预先定义的按键来移动光标、删除文字、 复制或粘贴文字等。这些按键均是普通
    的字符,例如 l 是向右移动光标,相当于向右箭头键,k 是 向下移动光标,相当于向下箭头键。在编辑模式下,用户还能利用一些特别按
    键选定文字,然后 再进行删除、或复制等操作。
    当用户在编辑模式下键入 i, a, o 等命令之后,可进入插入模式;键入 : 可进入命名模式。 在插入模式下,用户随后输入的,除 Esc 之外的所有
    字符均将被看成是插入到编辑缓冲区中 的字符。按 Esc 之后,从插入模式转换到编辑模式。
    在命令模式,Vi 将把光标挪到屏幕的最下方,并在第一个字符的位置显示一个 :(冒号)。这时, 用户就能键入一些命令。这些命令可用
    来保存文件、读取文件内容、执行 Shell 命令、设置 Vi 参数、以正则表达式的方式查找字符串或替换字符串等。
    1.6.2 编辑模式
    1. 移动光标
    要对正文内容进行修改,首先必须把光标移动到指定位置。移动光标的最简单的方式是按键盘的上、下、左、
    右箭头键。除了这种最原始的方法之外,用户还能利用 vi 提供的众多字符组合键,在正文中移动光标,迅
    速到达指定的行或列,实现定位。例如:
    k、j、h、l 功能分别等同于上、下、左、右箭头键
    Ctrl+b 在文件中向上移动一页(相当于 PageUp 键)
    Ctrl+f 在文件中向下移动一页(相当于 PageDown 键)
    H 将光标移到屏幕的最上行(Highest)
    nH 将光标移到屏幕的第 n 行
    2H 将光标移到屏幕的第 2 行
    M 将光标移到屏幕的中间(Middle)
    L 将光标移到屏幕的最下行(Lowest)
    nL 将光标移到屏幕的倒数第 n 行
    3L 将光标移到屏幕的倒数第 3 行
    w 在指定行内右移光标,到下一个字的开头
    e 在指定行内右移光标,到一个字的末尾
    b 在指定行内左移光标,到前一个字的开头
    0 数字0,左移光标,到本行的开头
    $ 右移光标,到本行的末尾
    ^ 移动光标,到本行的第一个非空字符
    2. 替换和删除
    将光标定位于文件内指定位置后,能用其他字符来替换光标所指向的字符,或从当前光标位置删除一个或多
    个字符。例如:
    rc 用 c 替换光标所指向的当前字符
    nrc 用 c 替换光标所指向的前 n 个字符
    5rc 用 c 替换光标所指向的前 5 个字符
    x 删除光标所指向的当前字符
    nx 删除光标所指向的前 n 个字符
    3x 删除光标所指向的前 3 个字符
    dw 删除光标右侧的字
    ndw 删除光标右侧的 n 个字
    3dw 删除光标右侧的 3 个字
    db 删除光标左侧的字
    ndb 删除光标左侧的 n 个字
    5db 删除光标左侧的 5 个字
    dd 删除光标所在行,并去除空隙
    ndd 删除 n 行内容,并去除空隙
    3dd 删除 3 行内容,并去除空隙
    3. 粘贴和复制
    从正文中删除的内容(如字符、字或行)并没有真正丢失,而是被剪切并复制到了一个内存缓冲区中。用户可
    将其粘贴到正文中的指定位置。完成这一操作的命令是:
    p 小写字母 p,将缓冲区的内容粘贴到光标的后面
    P 大写字母 P,将缓冲区的内容粘贴到光标的前面
    如果缓冲区的内容是字符或字,直接粘贴在光标的前面或后面;如果缓冲区的内容为整行正文,则粘贴在当前
    光标所在行的上一行或下一行。
    注意上述两个命令中字母的大小写。vi 编辑器经常以一对大、小写字母(如 p 和 P)来提供一对相似的功能
    。通常,小写命令在光标的后面进行操作,大写命令在光标的前面进行操作。
    有时需要复制一段正文到新位置,同时保留原有位置的内容。这种情况下,首先应当把指定内容复制(而不是
    剪切)到内存缓冲区。完成这一操作的命令是:
    yy 复制当前行到内存缓冲区
    nyy 复制 n 行内容到内存缓冲区
    5yy 复制 5 行内容到内存缓冲区
    4. 搜索字符串
    和许多先进的编辑器相同,vi 提供了强大的字符串搜索功能。要查找文件中指定字或短语出现的位置,能
    用 vi 直接进行搜索,而不必以手工方式进行。搜索方法是:键入字符 / ,后面跟以要搜索的字符串,然后
    按回车键。编辑程式执行正向搜索(即朝文件末尾方向),并在找到指定字符串后,将光标停到该字符串的
    开头;键入 n 命令能继续执行搜索,找出这一字符串下次出现的位置。用字符 ? 取代 / ,能实现反向
    搜索(朝文件开头方向)。例如:
    /str1 正向搜索字符串 str1
    n 继续搜索,找出 str1 字符串下次出现的位置
    ?str2 反向搜索字符串 str2
    无论搜索方向怎么,当到达文件末尾或开头时,搜索工作会循环到文件的另一端并继续执行。
    5. 撤销和重复
    在编辑文件的过程中,为消除某个错误的编辑命令造成的后果,能用撤消命令。另外,如果用户希望在新
    的光标位置重复前面执行过的编辑命令,可用重复命令。
    u 撤消前一条命令的结果
    . 重复最后一条修改正文的命令
    6. 文本选中
    vi 可进入到一种成为 Visual 的模式,在该模式下,用户能用光标移动命令可视地选择文本,然后再 执行其他编辑操作,例如删除、复制
    等。 v 字符选中命令 V 行选中命令
    #DEMO#
    1.6.3 插入模式
    1. 进入插入模式
    在编辑模式下正确定位光标之后,可用以下命令转换到插入模式:
    i 在光标左侧输入正文
    a 在光标右侧输入正文
    o 在光标所在行的下一行增添新行
    O 在光标所在行的上一行增添新行
    I 在光标所在行的开头输入正文
    A 在光标所在行的末尾输入正文
    上面介绍了几种转换到插入模式的简单方法。另外更有一些命令,他们允许在进入插入模式之前首先删去一段
    正文,从而实现正文的替换。这些命令包括:
    s 用输入的正文替换光标所指向的字符
    ns 用输入的正文替换光标右侧 n 个字符
    cw 用输入的正文替换光标右侧的字
    ncw 用输入的正文替换光标右侧的 n 个字
    cb 用输入的正文替换光标左侧的字
    ncb 用输入的正文替换光标左侧的 n 个字
    cd 用输入的正文替换光标的所在行
    ncd 用输入的正文替换光标下面的 n 行
    c$ 用输入的正文替换从光标开始到本行末尾的所有字符
    c0 用输入的正文替换从本行开头到光标的所有字符
    2. 退出插入模式
    退出插入模式的方法是,按 ESC 键或组合键Ctrl+[ 。
    #DEMO#
    1.6.4 命令模式
    在 vi 的命令模式下,能使用复杂的命令。在编辑模式下键入“:”,光标就跳到屏幕最后一行,并在 那里显示冒号,此时已进入命令模
    式。命令模式又称“末行模式”,用户输入的内容均显示在屏幕的最后 一行,按回车键,vi 执行命令。
    1. 退出命令
    在编辑模式下能用 ZZ 命令退出 vi 编辑程式,该命令保存对正文所作的修改,覆盖原始文件。如果只需要
    退出编辑程式,而不打算保存编辑的内容,可用下面的命令:
    : q 在未作修改的情况下退出
    : q! 放弃所有修改,退出编辑程式
    2. 行号和文件
    编辑中的每一行正文都有自己的行号,用下列命令能移动光标到指定行:
    : n 将光标移到第 n 行
    命令模式下,能规定命令操作的行号范围。数值用来指定绝对行号;字符“.”表示光标所在行的行号;字符
    符“$”表示正文最后一行的行号;简单的表达式,例如“.+5”表示当前行往下的第 5 行。例如:
    :345 将光标移到第 345 行
    :345w file 将第 345 行写入 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 命令
    在命令模式下,允许从文件中读取正文,或将正文写入文件。例如:
    :w 将编辑的内容写入原始文件,用来保存编辑的中间结果
    :wq 将编辑的内容写入原始文件并退出编辑程式(相当于 ZZ 命令)
    :w file 将编辑的内容写入 file 文件,保持原有文件的内容不变
    :a,bw file 将第 a 行至第 b 行的内容写入 file 文件
    :r file 读取 file 文件的内容,插入当前光标所在行的后面
    :e file 编辑新文件 file 代替原有内容
    :f file 将当前文件重命名为 file
    :f 打印当前文件名称和状态,如文件的行数、光标所在的行号等
    3. 字符串搜索
    给出一个字符串,能通过搜索该字符串到达指定行。如果希望进行正向搜索,将待搜索的字符串置于两个“
    /”之间;如果希望反向搜索,则将字符串放在两个“?”之间。例如:
    :/str/ 正向搜索,将光标移到下一个包含字符串 str 的行
    :?str? 反向搜索,将光标移到上一个包含字符串 str 的行
    :/str/w file 正向搜索,并将第一个包含字符串 str 的行写入 file 文件
    :/str1/,/str2/w file 正向搜索,并将包含字符串 str1 的行至包含字符串 str2 的行写
    入 file 文件
    4. 正文替换
    利用 :s 命令能实现字符串的替换。具体的用法包括:
    :s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1
    :s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1
    :.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1
    :1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1
    :g/str1/s//str2/g 功能同上
    从上述替换命令能看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索
    字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。
    5. 删除正文
    在命令模式下,同样能删除正文中的内容。例如:
    :d 删除光标所在行
    :3d 删除 3 行
    :.,$d 删除当前行至正文的末尾
    :/str1/,/str2/d 删除从字符串 str1 到 str2 的所有行
    6. 恢复文件
    vi 在编辑某个文件时,会另外生成一个临时文件,这个文件的名称通常以 . 开头,并以 .swp 结尾。vi 在
    正常退出时,该文件被删除,若意外退出,而没有保存文件的最新修改内容,则能使用恢复命令:
    :recover 恢复文件
    也能在启动 vi 时利用 -r 选项。
    #DEMO#
    #DEMO#
    1.6.5 选项设置
    为控制不同的编辑功能,vi 提供了非常多内部选项。利用 :set 命令能设置选项。基本语法为:
    :set option 设置选项 option
    常见的功能选项包括:
    autoindent 设置该选项,则正文自动缩进
    ignorecase 设置该选项,则忽略规则表达式中大小写字母的差别
    number 设置该选项,则显示正文行号
    ruler 设置该选项,则在屏幕底部显示光标所在行、列的位置
    tabstop 设置按 Tab 键跳过的空格数。例如 :set tabstop=n,n 默认值为 8
    mk 将选项保存在当前目录的 .exrc 文件中
    #DEMO#
    1.6.6 shell 转换
    在编辑正文时,利用 vi 命令模式下提供的 shell 转换命令,无须退出 vi 即可执行 Linux 命令,十分
    方便。语法格式为:
    :! command 执行完 shell 命令 command 后回到 vi
    另外,在编辑模式下,键入 K ,可命令 vi 查找光标所在单词的手册页,相当于运行 man命令。
    #DEMO#
    1.6.7 vim 和 gvim 的高级特色
    Vim 代表 Vi IMproved,如同其名称所暗示的那样,Vim 作为标准 UNIX 系统 vi 编辑器的提高版而存在。 Vim 除提供和 vi 编辑器相同强大的功
    能外,还提供有多级恢复、命令行历史及命令及文件名补全等 功能。
    gvim 是 vi 的 X Window 版本,该版本支持鼠标选中,一些高级光标移动功能,并且带有菜单和工具按钮。
    #DEMO#
    你能将设置写在.exrc文件里
    也能,设置完后,用mk保存
    vim支持make命令
    当你写好makefile时
    直接敲:make
    这时他将自动编译
    并且能在出错时自动转到出错的程式的出错行
    非常的好用
    vi入门-vi使用方法
    蓝森林 http://www.lslnet.com 2006年7月19日 20:29
    vi编辑器是所有Unix及Linux系统下标准的编辑器,他的强大不逊色于所有最新的文本编辑器,这里只是简单地介绍一下他的用法和一小部分指令。由于对Unix及Linux系统的所有版本,vi编辑器是完全相同的,因此你能在其他所有介绍vi的地方进一步了解他。Vi也是Linux中最基本的文本编辑器,学会他后,你将在Linux的世界里畅行无阻。
    1、vi的基本概念  基本上vi能分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:
    1) 命令行模式command mode)
      控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或到 last line mode。
    2) 插入模式(Insert mode)
      只有在Insert mode下,才能做文字输入,按「ESC」键可回到命令行模式。
    3) 底行模式(last line mode)
      将文件保存或退出vi,也能设置编辑环境,如寻找字符串、列出行号……等。
    不过一般我们在使用时把vi简化成两个模式,就是将底行模式(last line mode)也算入命令行模式command mode)。
    2、vi的基本操作 a) 进入vi
      在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面:
       $ vi myfile
      不过有一点要特别注意,就是你进入vi之后,是处于「命令行模式(command mode)」,你要转换到「插入模式(Insert mode)」才能够输入文字。初次使用vi的人都会想先用上下左右键移动光标,结果计算机一直哔哔叫,把自己气个半死,所以进入vi后,先不要乱动,转换到「插入模式(Insert mode)」再说吧!
    b) 转换至插入模式(Insert mode)编辑文件
      在「命令行模式(command mode)」下按一下字母「i」就能进入「插入模式(Insert mode)」,这时候你就能开始输入文字了。
    c) Insert 的转换
      你目前处于「插入模式(Insert mode)」,你就只能一直输入文字,如果你发现输错了字!想用光标键往回移动,将该字删除,就要先按一下「ESC」键转到「命令行模式(command mode)」再删除文字。
    d) 退出vi及保存文件
      在「命令行模式(command mode)」下,按一下「:」冒号键进入「Last line mode」,例如:
    : w filename (输入 「w filename」将文章以指定的文件名filename保存)
    : wq (输入「wq」,存盘并退出vi)
    : q! (输入q!, 不存盘强制退出vi)
    3、命令行模式(command mode)功能键 1). 插入模式
      按「i」转换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件;
      按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
      按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。
    2). 从插入模式转换为命令行模式
      按「ESC」键。
    3). 移动光标
      vi能直接用键盘上的光标来上下左右移动,但正规的vi是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格。
      按「ctrl」+「b」:屏幕往“后”移动一页。
      按「ctrl」+「f」:屏幕往“前”移动一页。
      按「ctrl」+「u」:屏幕往“后”移动半页。
      按「ctrl」+「d」:屏幕往“前”移动半页。
      按数字「0」:移到文章的开头。
      按「G」:移动到文章的最后。
      按「$」:移动到光标所在行的“行尾”。
      按「^」:移动到光标所在行的“行首”
      按「w」:光标跳到下个字的开头
      按「e」:光标跳到下个字的字尾
      按「b」:光标回到上个字的开头
      按「#l」:光标移到该行的第#个位置,如:5l,56l。
    4). 删除文字
      「x」:每按一次,删除光标所在位置的“后面”一个字符。
      「#x」:例如,「6x」表示删除光标所在位置的“后面”6个字符。
      「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符。
      「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符。
      「dd」:删除光标所在行。
      「#dd」:从光标所在行开始删除#行
    5). 复制
      「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
      「#yw」:复制#个字到缓冲区
      「yy」:复制光标所在行到缓冲区。
      「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
      「p」:将缓冲区内的字符贴到光标所在位置。注意:所有和“y”有关的复制命令都必须和“p”配合才能完成复制和粘贴功能。
    6). 替换
      「r」:替换光标所在处的字符。
      「R」:替换光标所到之处的字符,直到按下「ESC」键为止。
    7). 回复上一次操作
      「u」:如果你误执行一个命令,能马上按下「u」,回到上一个操作。按多次“u”能执行多次回复。
    8). 更改
      「cw」:更改光标所在处的字到字尾处
      「c#w」:例如,「c3w」表示更改3个字
    9). 跳至指定的行
      「ctrl」+「g」列出光标所在行的行号。
      「#G」:例如,「15G」,表示移动光标至文章的第15行行首。
    4、Last line mode下命令简介  在使用「last line mode」之前,请记住先按「ESC」键确定你已处于「command mode」下后,再按「:」冒号即可进入「last line mode」。
    A) 列出行号
     「set nu」:输入「set nu」后,会在文件中的每一行前面列出行号。
    B) 跳到文件中的某一行
     「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行。
    C) 查找字符
     「/关键字」:先按「/」键,再输入你想寻找的字符,如果第一次找的关键字不是你想要的,能一直按「n」会往后寻找到你要的关键字为止。
     「?关键字」:先按「?」键,再输入你想寻找的字符,如果第一次找的关键字不是你想要的,能一直按「n」会往前寻找到你要的关键字为止。
    D) 保存文件
     「w」:在冒号输入字母「w」就能将文件保存起来。
    E) 离开vi
     「q」:按「q」就是退出,如果无法离开vi,能在「q」后跟一个「!」强制离开vi。
     「qw」:一般建议离开时,搭配「w」一起使用,这样在退出的时候还能保存文件。
    5、vi命令列表
    1、下表列出命令模式下的一些键的功能:
    h 左移光标一个字符
    l 右移光标一个字符
    k 光标上移一行
    j 光标下移一行
    ^ 光标移动至行首
    0 数字“0”,光标移至文章的开头
    G 光标移至文章的最后
    $ 光标移动至行尾
    Ctrl+f 向前翻屏
    Ctrl+b 向后翻屏
    Ctrl+d 向前翻半屏
    Ctrl+u 向后翻半屏
    i 在光标位置前插入字符
    a 在光标所在位置的后一个字符开始增加
    o 插入新的一行,从行首开始输入
    ESC 从输入状态退至命令状态
    x 删除光标后面的字符
    #x 删除光标后的#个字符
    X (大写X),删除光标前面的字符
    #X 删除光标前面的#个字符
    dd 删除光标所在的行
    #dd 删除从光标所在行数的#行
    yw 复制光标所在位置的一个字
    #yw 复制光标所在位置的#个字
    yy 复制光标所在位置的一行
    #yy 复制从光标所在行数的#行
    p 粘贴
    u 取消操作
    cw 更改光标所在位置的一个字
    #cw 更改光标所在位置的#个字
    2、下表列出行命令模式下的一些指令 w filename 储存正在编辑的文件为filename
    wq filename 储存正在编辑的文件为filename,并退出vi
    q! 放弃所有修改,退出vi
    set nu 显示行号
    /或? 查找,在/后输入要查找的内容
    n 和/或?一起使用,如果查找的内容不是想要找的关键字,按n或向后(和/联用)或向前(和?联用)继续查找,直到找到为止。
    对于第一次用vi,有几点注意要提醒一下: 1、用vi打开文件后,是处于「命令行模式(command mode)」,你要转换到「插入模式(Insert mode)」才能够输入文字。转换方法:在「命令行模式(command mode)」下按一下字母「i」就能进入「插入模式(Insert mode)」,这时候你就能开始输入文字了。 2、编辑好后,需从插入模式转换为命令行模式才能对文件进行保存,转换方法:按「ESC」键。 3、保存并退出文件:在命令模式下输入:wq即可!(别忘了wq前面的:)
    VI高级命令集锦及VIM应用实例
    VI高级命令集锦及VIM应用实例
    1.交换两个字符位置
    xp
    2.上下两行调换
    ddp
    3.把文件内容反转
    :g/^/m0
    4.上下两行合并
    J
    5.删除所有行
    dG
    6.从当前位置删除到行尾
    d$
    7.从当前位置复制到行尾
    y$ 如果要粘贴到其他地方 p 就能了
    由于vi 是建立在 EX 上的 所以 当键入 : 时就来到了 EX 命令状态
    8.
    :ab string strings
    例如 ":ab usa United States of America" ,
    当你在文见里插入 usa 时
    United States of America 就蹦出来了
    9.
    :map keys new_seq
    定义你当前 键盘命令
    10.
    :set [all]
    vi or ex 的编辑状态
    如 显示每行 :set nu
    11.
    在命令状态下,nyy表示拷贝从光标行起的下n行内容,p表示paste,可刚复制的内容粘贴在光标处的下面。
    12.
    单个字符替换用r,覆盖多个字符用R,用多个字符替换一个字符用s,整行替换用S
    13.
    :%s/old_word/new_word/g
    这个指令是于在整个文件中替换特定字符串
    14.光标控制
    k:上移 nk 上移n行
    j:下移 nj 下移n行
    将光标移到第n行,按下 mk
    将光标移到第m行,按下 "ay’k
    即将第n到m的行存到a寄存器,以此类推,b,c........寄存器等
    这样就能将你常用的需要复用的内容粘贴到不同的寄存器中以备用
    想粘贴到某处,直接将光标移到某地,按下 ’ap 即可,以此类推,b,c........寄存器等
    在当前屏幕中
    H 跳到第一行
    M 跳到中间一行
    L 跳到最后一行
    15.
    表8-2 删除命令
    删除命令操作
    d l 删除当前字符(和x命令功能相同)
    d 0 删除到某一行的开始位置
    d ^ 删除到某一行的第一个字符位置(不包括空格或TA B字符)
    d w 删除到某个单词的结尾位置
    d 3 w 删除到第三个单词的结尾位置
    d b 删除到某个单词的开始位置
    d W 删除到某个以空格作为分隔符的单词的结尾位置
    d B 删除到某个以空格作为分隔符的单词的开始位置
    d 7 B 删除到前面7个以空格作为分隔符的单词的开始位置
    d) 删除到某个语句的结尾位置
    d 4) 删除到第四个语句的结尾位置
    d( 删除到某个语句的开始位置
    d } 删除到某个段落的结尾位置
    d { 删除到某个段落的开始位置
    d 7 { 删除到当前段落起始位置之前的第7个段落位置
    d d 删除当前行
    d /t e x t 删除从文本中出现" t e x t"中所指定字样的位置,一直向前直到下一个该字样所出现的
    位置(但不包括该字样)之间的内容
    d fc 删除从文本中出现字符"c"的位置,一直向前直到下一个该字符所出现的位置(包括
    该字符)之间的内容
    d tc 删除当前行直到下一个字符" c"所出现位置之间的内容
    D 删除到某一行的结尾
    d $ 删除到某一行的结尾
    5 d d 删除从当前行所开始的5行内容
    d L 删除直到屏幕上最后一行的内容
    d H 删除直到屏幕上第一行的内容
    d G 删除直到工作缓存区结尾的内容
    d 1 G 删除直到工作缓存区开始的内容
    修改命令操作
    c l 更改当前字符
    c w 修改到某个单词的结尾位置
    c 3 w 修改到第三个单词的结尾位置
    c b 修改到某个单词的开始位置
    c W 修改到某个以空格作为分隔符的单词的结尾位置
    c B 修改到某个以空格作为分隔符的单词的开始位置
    c 7 B 修改到前面7个以空格作为分隔符的单词的开始位置
    c 0 修改到某行的结尾位置
    c) 修改到某个语句的结尾位置
    c 4) 修改到第四个语句的结尾位置
    c( 修改到某个语句的开始位置
    c } 修改到某个段落的结尾位置
    c { 修改到某个段落的开始位置
    c 7 { 修改到当前段落起始位置之前的第7个段落位置
    c tc 修改当前行直到下一个字符c所出现位置之间的内容
    C 修改到某一行的结尾
    c c 修改当前行
    5 c c 修改从当前行所开始的5行内容
    .重复上一次修改!
    表8-4 替换命令
    替换命令操作
    s 将当前字符替换为一个或多个字符
    S 将当前行替换为一个或多个字符
    5 s 将从当前字符开始的5个字符替换为一个或多个字符
    vi替换使用规则:
    :g/s1/s/s2/s3/g
    第一个g表示对每一个包括s1的行都进行替换,第二个g表示对每一行包括s1的行所有的s2都用s3替换
    s表示替换,s2是要被替换的字符串,他能和s1相同(如果相同的话用//代替),s3是替换字符串
    16.
    fx
    往右移动到 x 字符上
    Fx
    往左移动到 x 字符上
    tx
    往右移动到 x 字符前
    Tx
    往左移动到 x 字符后
    (注意:以上四个命令中,其中x是键入的字符)
    ;
    分号,配合 f 和 t 使用,重复一次
    ,
    逗号,配合 f 和 t 使用,反方向重复一次
    17. vi 环境选项 Solaris ksh
    noautoindent nomodelines noshowmode
    autoprint nonumber noslowopen
    noautowrite nonovice tabstop=8
    nobeautify nooptimize taglength=0
    directory=/var/tmp paragraphs=IPLPPPQPP LIpplpipnpbtags=tags /usr/lib/tags
    noedcompatible prompt tagstack
    noerrorbells noreadonly term=vt100
    noexrc redraw noterse
    flash remap timeout
    hardtabs=8 report=5 ttytype=vt100
    noignorecase scroll=11 warn
    nolisp sections=NHSHH HUuhsh+c window=23
    nolist shell=/bin/ksh wrapscan
    magic shiftwidth=8 wrapmargin=0
    mesg noshowmatch nowriteany
    For C-Shell:
    setenv EXINIT "set nu"
    For Bourne or Korn Shell:
    EXINIT="set nu"; export EXINIT
    For Korn Shell Only (alternate method):
    typeset -x EXINIT="set nu"
    在 .profile 里设置 vi 的环境选项 , 以上均测试过
    18.标记文本
      mchar   用字母char标记当前光标的位置
      `char   移至char所标记处
      ’char   移至char标记所在行的开头处
      "     移至当前行上一次所在位置(在光标移动之后)――一个双引号
      ’’    移至当前行上第一次所在位置的行的开头处(在光标移动之后)――两个单引号
    19.
    同时vi多个文件时,CTRL-SHIFT-6回到上一个文件,在本次vi的文件和上次vi的文件之间转换。
    不过我发现一个BUG:在用CTRL-SHIFT-6转换到上一个文件后,用:args查看多文件vi状态时,
    屏幕底部仍然显示目前vi的是刚才的文件。
    (在HP-UX,Solaris,AIX上通过)
    也能使用:
    :e#
    进行转换
    20.
    sco 下VI 要在文本前同样的字符加用
    %s/^/要加的内容/g 要在文本后同样的字符加
    %s/$/要加的内容/g
    21.
    怎么去掉文本中的 ^M 硬回车?不必用binary传回去再ascii传回来的方式,用shell或unix语句实现。
    cat filename |tr -d ’\\015’ >newfile
    不同的unix系统还存在一些其他不同的命令,如:doscp
    sed 也能实现这个功能.
    dos2unix filename filename2
    反之
    unix2dos filename filename2
    在vi 中用:$s/^M//g
    ^是crtl-V crtl-M
    22.怎么在"unix命令行"下将一个文件的某字符串用另一个串换掉
    sed ’s/string1/string2/gp’ file1 > file2
    23.将/etc/hosts下所有的地址都ping 2次
    1 #/usr/bin/sh
    2 #grad /etc/hosts and ping each address
    3 cat /etc/hosts|grep -v ’^#’ | while read LINE
    4 do
    5 ADDR=`awk ’{print $1}’`
    6 for MACHINE in $ADDR
    7 do
    8 ping $MACHINE -n 2
    9 done
    10 done
    24
    到前一个函数[[ ,到下一个函数]] ,括号配对% ,交叉参考Ctrl_] (事先用ctags做索引),回来用e# ` 编辑一个函数:vi -t 函数名 ,编辑加密文本vi -X
    25
    在插入模式下ctrl+p,自动补齐剩余单词,以赖规则:tags,以有的单词等等
    当今世界,文本编辑器种类繁多,大有"乱花渐欲迷人眼"之势。中国有句古语:手巧不如家什妙,作为IT业的专业人士,选择一款优秀的编辑软件至关重要。笔者认为:LINUX下的VIM※以其强大的功能和无穷的魅力将使你终生受益。
    作者:闫石 (iloveibm@163.com)
    来自:http://www-900.ibm.com/developerWorks/cn/linux/l-tip-prompt/tip15/index.shtml
    由于被广泛移植,无论是PC机的DOS和WINDOWS,还是RISC/6000的AIX,乃至于IBM的大型机S/390,都能见到VIM的身影。然而,对于初学者,VIM的用户界面和使用方法非常不符合常规,甚至认为他比较混乱,无所适从。事实上,VIM编辑器是专门为经验丰富的用户设计的,他的界面和使用方法提供了更快的速度和更强的功能。对于熟知他的用户,VIM的许多特性节省了时间和击键次数,并能完成一些其他编辑器无法完成的功能。
    学习的最佳方法是实践,唯有如此,才能真正掌控其中的精髓。文中列举的实例,都是笔者在实际工作中遇见的,具有一定的代表性,请大家在阅读的过程中仔细体会。
    好了,目前让我们一起畅游神奇的VIM的世界!
    例一、两个常用的指令序列
    xp 左右交换光标处两字符的位置。
    ddp 上下交换光标处两行的位置。
    例二、重复输入同一字符
    有时,我们可能想多次输入同一字符,VIM的插入功能能非常好的完成这项工作
    命令 80i=^ESC 一次能输入80个字符= ,当然,80a=^ESC 也能完成上述功能。
    请注意:此处的^ESC表示键盘左上方上的ESC键。
    例三、将两个文本数据文件按行逐条合并,并给出标尺
    数据文件1内容如下:
    1-----
    2-----
    3-----
    数据文件2内容如下:
    1=====
    2=====
    3=====
    需求的结果如下:
    |--------1---------2---------3---------4---------5
    1-----
    1=====
    |--------1---------2---------3---------4---------5
    2-----
    2=====
    |--------1---------2---------3---------4---------5
    3-----
    3=====
    也许你会说,这还不简单,无非是反复拷贝、粘贴,所有一款文本编辑器都能完成上述功能。可是,如果这两个文件都非常大,每个文件都成千上万行,恐怕简单的拷贝、粘贴就难以胜任了。因此,我们所关心的,是找到一种行之有效的方法,把枯燥乏味的工作留给计算机,我们只需发布指令。为达到此目的,请按以下步骤执行:
    ㈠、将两文件合并,结果如下
    1-----
    2-----
    3-----
    1=====
    2=====
    3=====
    ㈡、在两文件头尾相接的地方插入标志行,用以区分两个文件,本文采用的是一整行!字符
    1-----
    2-----
    3-----
    !!!!!!!!!!!!!!!!!!!!!!!!
    1=====
    2=====
    3=====
    ㈢、在标志行的下方输入标尺
    1-----
    2-----
    3-----
    !!!!!!!!!!!!!!!!!!!!!!!!
    |--------1---------2---------3---------4---------5
    1=====
    2=====
    3=====
    ㈣、执行宏命令脚本merge_2r.vim,即在VIM编辑器中按如下键 :so merge_2r.vim 回车
    ㈤、按下键盘上的=键,执行的结果如下
    |--------1---------2---------3---------4---------5
    1-----
    1=====
    |--------1---------2---------3---------4---------5
    2-----
    2=====
    |--------1---------2---------3---------4---------5
    3-----
    3=====
    |--------1---------2---------3---------4---------5
    !!!!!!!!!!!!!!!!!!!!!!!!
    |--------1---------2---------3---------4---------5
    ㈥、将最后三行删除,即可得到我们需要的结果
    |--------1---------2---------3---------4---------5
    1-----
    1=====
    |--------1---------2---------3---------4---------5
    2-----
    2=====
    |--------1---------2---------3---------4---------5
    3-----
    3=====
    怎么样,简单吗?请大家自己实际尝试一下。下面,我来周详讲解宏命令脚本merge_2r.vim 。
    该脚本内容如下:
    "--------------------------------------------------------------------
    "Macro Function : Merge File1 And File2,Have Ruler in every record
    " Date : 2001/12/01
    " Author : Yan Shi
    "--------------------------------------------------------------------
    "1-----
    "2----- } Sample File1
    "3-----
    "!!!!!!!!!!!!!!!!!!!!!!!! Flag Row
    "|--------1---------2---------3---------4---------5 Ruler
    "1=====
    "2===== } Sample File2
    "3=====
    "--------------------------------------------------------------------
    :1
    :map = ma/!!!!!^M+:.co ’a-1^M/!!!!!^M2+:.m’a^M+=
    前14行每行都以"开始,表明该行是注释行,实际并不执行,只是方便读者阅读,只有最后两行才是真正的代码行。请注意:本例中的^M表示键盘上的回车键,并非^和M两个字符。为了讲述清晰,我把命令行分解开,逐一说明。
    首先将第一行置为当前行,然后执行map命令,将一大串VIM指令映像给字符=。这一大串VIM指令共分9步执行:
    ma 将数据文件一的第一行标记为a
    1-----
    2-----
    3-----
    !!!!!!!!!!!!!!!!!!!!!!!!
    |--------1---------2---------3---------4---------5
    1=====
    2=====
    3=====
    /!!!!!^M 找到标志行,置为当前行
    1-----
    2-----
    3-----
    !!!!!!!!!!!!!!!!!!!!!!!!
    |--------1---------2---------3---------4---------5
    1=====
    2=====
    3=====
    + 光标下移一行,即把标尺行置为当前行
    1-----
    2-----
    3-----
    !!!!!!!!!!!!!!!!!!!!!!!!
    |--------1---------2---------3---------4---------5
    1=====
    2=====
    3=====
    :.co ’a-1^M 把标尺行复制到标记行(数据文件一的第一行)的上方
    |--------1---------2---------3---------4---------5
    1-----
    2-----
    3-----
    !!!!!!!!!!!!!!!!!!!!!!!!
    |--------1---------2---------3---------4---------5
    1=====
    2=====
    3=====
    /!!!!!^M 再次找到标志行,置为当前行
    |--------1---------2---------3---------4---------5
    1-----
    2-----
    3-----
    !!!!!!!!!!!!!!!!!!!!!!!!
    |--------1---------2---------3---------4---------5
    1=====
    2=====
    3=====
    2+ 光标下移2行,即数据文件二的第一行置为当前行
    |--------1---------2---------3---------4---------5
    1-----
    2-----
    3-----
    !!!!!!!!!!!!!!!!!!!!!!!!
    |--------1---------2---------3---------4---------5
    1=====
    2=====
    3=====
    :.m’a^M 把数据文件二的第一行移至标记行的下方
    |--------1---------2---------3---------4---------5
    1-----
    1=====
    2-----
    3-----
    !!!!!!!!!!!!!!!!!!!!!!!!
    |--------1---------2---------3---------4---------5
    2=====
    3=====
    + 光标下移一行,即数据文件一的第二行置为当前行
    |--------1---------2---------3---------4---------5
    1-----
    1=====
    2-----
    3-----
    !!!!!!!!!!!!!!!!!!!!!!!!
    |--------1---------2---------3---------4---------5
    2=====
    3=====
    = 这一步非常关键,是典型的递归调用,重复完成以上步骤
    例四、在文件中置入行号
    工作中,我们有时希望把行号置入文件中,而VIM提供的功能 :set nu 只能显示行号,不能编辑或将其置入文件当中,下面的宏命令脚本row_num.vim能完成此项功能。
    "------------------------------------------
    "Macro Function : Source File Add Row_Num
    " Date : 2001/12/01
    " Author : Yan Shi
    "------------------------------------------
    :%s/^/^I/
    :$
    :let end=line(".")
    :1
    "------------------------------------------
    :let num=1
    :while num 4 5 6
    " 0 0 0
    " Date : 2001/12/01
    " Author : Yan Shi
    "----------------------------------------------------
    :s/.*/&^M/
    :1
    :map = malx+$p-`al=
    说明如下:
    ⑴ :s/.*/&^M/ 在数据行下方添加一空行。
    ⑵ :1 回到文件的首行的首字符。
    ⑶ :map = malx+$p-`al= 将一大串VIM命令映像给字符=
    ① ma 将首字符标记为a
    ② l 光标右移一个字符
    ③ x 删除光标处字符
    ④ + 移至下一行
    ⑤ $ 到行尾
    ⑥ p 将删除的字符粘贴
    ⑦ - 回至上一行
    ⑧ `a 返回到标记字符处
    ⑨ l 光标右移一个字符
    ⑩ = 递归调用,重复以上步骤,直到将该行所有的数据处理完。
    上面的这几个实例,展示了VIM强大的文本处理功能,但这远不能覆盖其全貌。VIM的命令非常多,而且使用灵活,需要狠下一番气力才能熟练掌控。笔者年龄尚小,经验还非常欠缺,希望本文能够起到抛砖引玉的作用。由于时间的原因,上述实例仅在DOS和WINDOWS环境下测试,没有在其他系统下进行进一步的测试,希望各位同行、前辈不吝赐教,谢谢!
    ※ VIM 意为 VI Improved ,和VI99%向下兼容。而且,VIM提供了许多VI不具有的功能,内置了诸多函数,因此,建议有经验的VI用户对VIM有所了解,你会发现,转向VIM 是明智之举。欲查询有关VIM的资料,请参考 http://www.vim.org
    注:本文使用 VIM 6.0 版本
    作者简介
    闫石,工程师。你能通过电子邮件:iloveibm@163.com 或 yan-shi@sino-com.com 和他联系。
    附录A:一个用vi作表单的在线教程
    http://www-900.ibm.com/developerWorks/cn/cnedu.nsf/linux-onlinecourse-bytitle/9F896668D7EB5CA948256A710030E157?OpenDocument
    附录B:vi 命令常见问题解答
    http://www.linuxsir.com/bbs/showthread.php?s=&threadid=23957
    附录C:命令行下在线教程:
    运行vimtutor即可学习!

    http://www.sudu.cn/info/html/edu/20080424/298964.html

  • 相关阅读:
    HDU 1203 01背包变形题,(新思路)
    HDU 2955 变形较大的01背包(有意思,新思路)
    HDU 2191(多重背包转换为01背包来做)
    HDU 1114(没有变形的完全背包)
    HDU2546(01背包加一点点变形)
    HDU 1950(LIS)
    c模拟 页式管理页面置换算法之FIFO
    HDU 1257 最少拦截系统(贪心 or LIS)
    路由选择(codevs 1062)
    钓鱼(洛谷 P1717)
  • 原文地址:https://www.cnblogs.com/lmule/p/1829362.html
Copyright © 2020-2023  润新知