zoukankan      html  css  js  c++  java
  • vim 编辑器常用命令

    vi 常用命令行

     

    1.vi 模式

       a) 一般模式: vi 处理文件时,一进入该文件,就是一般模式了.

       b) 编辑模式:在一般模式下可以进行删除,复制,粘贴等操作,却无法进行编辑操作。等按下‘i,I,o,O,a,A,r,R’等

              字母之后才能进入编辑模式.通常在linux中,按下上述字母时,左下方会出现'INSERT'或者‘REPLACE’字样,才可以

              输入任何文字到文件中.要回到一般模式,按下[ESC]键即可.

       c) 命令行模式:在一般模式中,输入“或者/或者?,即可将光标移动到最下面一行,在该模式下,您可以搜索数据,而且读取,

          存盘,大量删除字符,离开vi,显示行号等操作.

    2.vi 常用命令汇总:

     2.1 一般模式

        a) 移动光标: 

          --> 上下左右方向键 ↑↓← →

          --> 翻页 pagedown / pageup 按键

          --> 数字 0 : 将光标移动到当前行首

          --> $ :   将光标移动到当前行尾

          --> G :       移动到这个文件的最后一行  nG :  n 为数字,移动到这个文件的第n.

          --> gg:      移动到这个文件的第一行 相当于 1G

        

        b)  搜索与替换

          --> /word :  从光标开始,向下查询一个名为word的字符串。

          --> :n1n2s/word1/word2/g : n1 n2 为数字.在第n1n2行之间寻找word1这个字符串,

                  并将该字符串替换为word2

          --> :1$s/word1/word2/g : 从第一行到最后一行寻找word1字符串,并将该字符串替换为word2

          --> :1$s/word1/word2/gc: 从第一行到最后一行寻找word1字符串,并将该字符串替换为word2

                并且在替换之前显示提示符给用户确认(conform)是否需要替换。

        c) 删除,复制,粘贴

          --> x,X  : 在一行中,x为向后删除一个字符(相当于del键),X为向前删除一个字符(相当于backspace键)。

          --> dd   : 删除光标所在的那一整行。

          --> ndd  : n 为数字。从光标开始,删除向下n列。

          --> yy   : 复制光标所在的那一行。   

          --> nyy  : n为数字。复制光标所在的向下n行。

          --> p,P  : p 为将已复制的数据粘贴到光标的下一行,P则为贴在光标的上一行。

          --> u    : 复原前一个操作

          --> CTRL + r : 重做上一个操作。

          --> 小数点'.': 重复前一个动作。

     2.2  编辑模式:

        a) i, I : 在光标所在处插入输入文字,已存在的文字向后退。为‘从当前光标所在处插入’,为‘在当前所在行的一个非空格符处开始插入’。

        b) a, A : a 为‘从当前光标所在处的下一个字符开始插入’。为‘从光标所在行的最后一个字符处开始插入’。

        c) o,O  : 这是英文o的大小写。o为‘在当前光标所在行的下一行处插入新的一行’。O表示‘在当前光标所在行的上一行插入新的一行’。

        d) r,R  : 替换:会替换光标所在的那一个字符。 : 会一直替换光标所在的字符,直到按下esc 键为止。

        e) ESC  : 进入一般模式。

     2.3 命令模式:

        a) :w   : 将编辑的数据写入硬盘

        b) :q   : 离开vi

        c) :q!  : 强制离开,不存储

        d) :wq  : 存储后离开

        e) :wq! : 强制存储后离开

     

    3. vim 附加命令行

     3.1 块选择(visual block)

        v  字符选择,将光标经过的地方反白显示

        V  行选择,会将光标经过的行反白选择

        ctrl + v 块选择,可以用长方形的方式选择数据

        y  复制反白的地方

         d  将反白的地方删除掉

     3.2 多文件编辑

       :n  编辑下一个文件

         :N  编辑上一个文件

       :files  列出当前vim 打开的所有文件

     3.3 多窗口功能

         :sp filename】打开一个新窗口,如果加filename,表示在新窗口打开一个新文件

           否则表示两个窗口为同一个文件内容

         ctrl+wj  先按下ctrl ,再按下w后,放开所有按键,然后按下j,则光标可移动到下方的窗口

         ctrl+wk  同上,不过光标移动到上面的窗口

         ctrl+wq  其实就是:q结束离开。

     

     

     

     

    语法为 :[addr]s/源字符串/目的字符串/[option]
    全局替换命令为::%s/源字符串/目的字符串/g

     


    [addr] 表示检索范围,省略时表示当前行。
    如:“1,20” :表示从第1行到20行;
    “%” :表示整个文件,同“1,$”;
    “. ,$” :从当前行到文件尾;
    s : 表示替换操作

     


    [option] : 表示操作类型
    如:g 表示全局替换; 
    c 表示进行确认
    p 表示替代结果逐行显示(Ctrl + L恢复屏幕);
    省略option时仅对每行第一个匹配串进行替换;
    如果在源字符串和目的字符串中出现特殊字符,需要用””转义

     


    下面是一些例子:
    #将That or this 换成 This or that
    :%s/(That) or (this)/u2 or l1/
    —- 
    #将句尾的child换成children
    :%s/child([ ,.;!:?])/children1/g
    —-
    #将mgi/r/abox换成mgi/r/asquare
    :g/mg([ira])box/s//mg//my1square/g    <=>  :g/mg[ira]box/s/box/square/g
    —-
    #将多个空格换成一个空格
    :%s/  */ /g
    —-
    #使用空格替换句号或者冒号后面的一个或者多个空格
    :%s/([:.])  */1 /g
    —-
    #删除所有空行
    :g/^$/d
    —-
    #删除所有的空白行和空行
    :g/^[  ][  ]*$/d
    —-
    #在每行的开始插入两个空白
    :%s/^/>  /
    —-
    #在接下来的6行末尾加入.
    :.,5/$/./
    —-
    #颠倒文件的行序
    :g/.*/m0O  <=> :g/^/m0O
    —-
    #寻找不是数字的开始行,并将其移到文件尾部
    :g!/^[0-9]/m$ <=> g/^[^0-9]/m$
    —-
    #将文件的第12到17行内容复制10词放到当前文件的尾部
    :1,10g/^/12,17t$
    ~~~~重复次数的作用
    —-
    #将chapter开始行下面的第二行的内容写道begin文件中
    :g/^chapter/.+2w>>begin
    —-
    :/^part2/,/^part3/g/^chapter/.+2w>>begin
    —-
    :/^part2/,/^part3/g/^chapter/.+2w>>begin|+t$

     

     

     

    1. 基本替换

     

    :s/str1/str2/ 替换当前行第一个str1为str2

     

    :s/str1/str2/g 替换当前行所有str1为str2

     

    :n,$s/str1/str2/ 替换第 n 行开始到最后一行中每一行的第一个str1为str2

     

    :n,$s/str1/str2/g 替换第 n 行开始到最后一行中每一行所有str1为str2

     

    (n 为数字,若 n 为 .,表示从当前行开始到最后一行)

     

    :%s/str1/str2/(等同于 :g/str1/s//str2/) 替换每一行的第一个str1为str2

     

    :%s/str1/str2/g(等同于 :g/str1/s//str2/g) 替换每一行中所有str1为str2

     

    2. 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符

     

    :s#str1/#str2/# 替换当前行第一个str1/ 为str2/

     

    :%s+/str11/str12/+/str21/str22+ (使用+ 来 替换 / ): /str11/str12/替换成/str21/str22/

     

    3. 文件中删除^M

     

    问题描述:对于换行,Windows下用回车换行(0A0D)来表示,Linux下是回车(0A)来表示。这样,将window上的文件拷到Unix上用时,总会有个^M,请写个用在Unix下的过滤Windows文件的换行符(0D)的shell或c程序。有两种方法可以完成此目的:

     

    (1)使用命令:cat oldfilename | tr -d “^V^M” > newfilename

     

    (2)使用命令:sed -e “s/^V^M//” oldfilename > newfilename

     

    需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必须要手工进行输入,而不是粘贴。

     

    在vim中处理:首先使用vim打开文件,然后按ESC键,接着输入命令:

     

    :%s/^V^M// 
    :%s/^M$//g

     

    如果上述方法无用,则正确的解决办法是:

     

    (1) tr -d " " < old_file_name > new_file_name 或者 cat oldfilename | tr -d " " > new_file_name

     

    (2) tr -d "15" < old_file_name > new_file_name或者 cat oldfilename | tr -d "15" > new_file_name

     

    strings A>B

     

    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 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。

     

  • 相关阅读:
    [算法] 堆栈
    [刷题] PTA 02-线性结构3 Reversing Linked List
    java IO流 (八) RandomAccessFile的使用
    java IO流 (七) 对象流的使用
    java IO流 (六) 其它的流的使用
    java IO流 (五) 转换流的使用 以及编码集
    java IO流 (四) 缓冲流的使用
    java IO流 (三) 节点流(或文件流)
    java IO流 (二) IO流概述
    java IO流 (一) File类的使用
  • 原文地址:https://www.cnblogs.com/shengs/p/3701832.html
Copyright © 2011-2022 走看看