Vim使用总结

# [email protected]
# 如果文档中有错误的,请告诉我,发送到我的邮箱

移动光标
    左    h    5h表示向左移动5个字符,依此类推
    下    j
    上    k
    右    l
    移动到单词的结尾(符号与标点也算一个单词)    e
    移动到单词的结尾                            E
    移动到一行的开头    0(数字零)
    移动到一行的结尾    $
    移动一个单词(符号与标点也算一个单词)    w    前面可以加数字
    移动一个单词                            W
    后退一个单词(符号与标点也算一个单词)    b
    后退一个单词                            B
    移动到顶行        gg    
    移动到尾行        G    
    移动到指定的行    55g
    回到原来的位置,即上一次G命令所在的位置    ``
    回到原来的位置行的行首,即上一次G命令所在的位置的行首  ''    
    
保存/不保存/写入/读取/数据
    ZZ
    :w
    :w /path/to/file
    :wq
    :x
    :q
    :q!
    :r /path/to/file
    
大小写转换
    ~    小写的转换为大写,大写的转换为小写
    

编辑命令
    插入数据
        i    在当前光标前插入数据
        50iA    会插入50个A字符
        I    在当前行首插入数据
        a    在当前光标后插入数据
        A    在当前行尾插入数据
        o    在当前行的下一行插入数据
        O    在当前行的上一行插入数据
    
    更改数据
        cw    从光标到这个单词的结尾
        c2b    从光标往前两个单词
        c$    从光标到本行的结尾
        C    与c$的效果一样
        c0    从光标到本行的行首(数字零)
        cc    更改当前行的所有数据
        
        r    更改光标所在的一个字符
        R    更改光标所在行的所有字符
        
    替换文本
        s    替换光标所在的一个字符    
        S    替换光标所在行的所有字符
    
    删除数据
        dd    删除当前行的数据
        2dd    删除当前行和下一行的数据
        dw    删除光标后的一个单词(符号与标点都算一个单词)
        2dw    删除光标后的两个单词
        db    删除光标前的一个单词
        d2b    删除光标前的两个单词
        d$    删除光标到行尾的所有数据
        D    与d$一样的效果
        d0    删除光标到行首的所有数据(数字零)
        
        x    删除光标所在的一个字符
        2x    删除光标后的两个字符
        
    撤销操作
        u    撤销到上一次的操作
        U    撤销当前行的所有操作,还原到最原始的状态,只要光标还在这一行即可,一旦移动到别的行,就不可以使用了
        
    复制数据
        yy    复制当前行
        yw    复制一个单词(符号与标点都算)
        y$    复制光标到行尾的数据
        y0    复制光标到行首的数据(数字零)
        3yy    复制当前行和下两行
        
    粘贴数据
        p    在当前行的光标后面粘贴数据
        P    在当前行的光标前面粘贴数据
        
    重复命令
        .    重复上一次操作的命令
        
    查找命令
        /world    向下匹配所有的world单词
        ?woeld    向上匹配所有的world单词
        n        向上查找world单词
        N        向下查找world单词
        :set nowrapscan    禁止向上查找单词
        :/world/d    删除下一个匹配到world的行
        
        
        
快速移动位置
    Ctrl+f    往下滚动一整屏
    Crtl+b    往上滚动一整屏
    Crtl+d    往下滚动半屏
    Crtl+u    往上滚动半屏
    Crtl+e    往上滚动一行
    Crtl+y    往下滚动一行
    H        移动到屏幕顶端的行首
    M        移动到屏幕中央的行首
    L        移动到屏幕底端的行首     
    5H        移动到屏幕顶端往下的5行
    5L        移动到屏幕底端往上的5行
    回车    移动到下一行的第一个字符
    +        移动到下一行的第一个字符
    -        移动到上一行的第一个字符
    ^        移动到当前行的第一个非空格处
    5|        移动到当前行的第5列
    fx        光标会移动到下一个x字符的位置
    f2x        光标会移动到下两个x字符的位置
    dfx        删除光标到下一个x字符之间的所有内容
    Fx        光标会移动到上一个x字符的位置
    tx        光标会移动到下一个x字符的前一个字符
    Tx        光标会移动到上一个x字符的后一个字符
        
    cH        从光标到屏幕顶端
    cL        从光标到屏幕底端
    c+        从光标到下一行
    c5|        从行首到后面的第5个字符
    c/world    匹配到的world
    cn        从光标到下一个模式
    cG        从光标到文件结尾
    c13G    从光标到第13行,比如当前光标在第15行,会更改第13行到第15行的内容
    
    dH        从光标到屏幕顶端
    dL        从光标到屏幕底端
    d+      从光标到下一行
    d5|        从行首到后面的第5个
    d/world 匹配到的world
    dn      从光标到下一个模式
    dG        从光标到文件结尾
    d13G    从光标到第13行,比如当前光标在第15行,会删除第13行到第15行的内容
    
    yH        从光标到屏幕顶端
    yL      从光标到屏幕底端
    y+      从光标到下一行
    y5|     从行首到后面的第5个
    y/world 匹配到的world
    yn        从光标到下一个模式
    yG        从光标到文件结尾
    y13G    从光标到第13行,比如当前光标在第15行,会更改第13行到第15行的内容

缓冲区
    a-z        命名的缓冲区名称a-z,大写字母表示附加到缓冲区现有的内容后
    1-9        最近9次删除操作的内容,从最后一次到最先一次
    "b command    用缓冲区b执行命令
    "dyy    将当前行拖拽到缓冲区d中
    "Dyy    将当前行追加到缓冲区d中
    "a7yy    将后续七行拖拽到缓冲区a中
    "a5dd    将删除的五行拖拽到缓冲区a中
    "A5dd    将删除的五行追加到缓冲区a中
    "dp    将缓冲区d的内容放置到光标前
    "ap    将缓冲区a的内容放置到光标后
    
vim +5 1.txt 在第5行打开1.txt
vim + 1.txt     在最后以后打开1.txt
vim +/world 1.txt 在第一个出现world的地方打开1.txt
vim -R    1.txt    只读模式打开文件
view    1.txt    只读模式打开文件
vim -r        将得到系统保存下来的所有文件列表
vim -r    1.txt    可以恢复系统死机时1.txt文件的编辑缓冲区    
vim -c command 1.txt    在打开文件后执行命令;通常是行号或搜索模式(POSIX版的是+)
    
恢复删除
    p    把删除的内容粘贴至当前位置
    
mx    将当前位置标记成x
'x    将光标移到到标记x所在行的行首
`x    将光标移到以x标记的字符
``    在移动位置之后,回到上一个标记或上下文的确切位置
''    回到上一个标记或上下文所在行的开头    
    
ex命令
    :6        移动到第6行
    :1p        移动到第1行并将内容打印到屏幕上
    :1,3p    将第1行到第3行的内容打印到屏幕上
    :1 s/world/hello/        将第1行的world替换为hello
    :d        删除当前行
    :3,18d    删除第3行到第18行
    :m 1    移动当前行到第一行的后面
    :3,18m20    将第3行到第18行的内容移动到第20行之后
    :co    1    复制当前行到第一行的后面
    :3,18co20    将第3行到第18行的内容复制到第20行之后
    :t    1    复制行(与co同义)
    :set number    显示行号    :set nu
    :set nonumber    取消行号    :set nonu
    :1,10#    显示第1行到第10行的行号
    :=        显示总行数
    :.=        显示当前行的行号
    :/world/=        显示光标之后world第一次出现时的行号
    :.,$d    删除当前行到文件结尾的内容
    :2,.m$    将第2行到当前行这一行间的内容移动到文件结尾
    :%d        删除文件中所有的行
    :%t$    将所有的行复制到文件结尾
    :.,+20d    删除当前行到下面20行之间的文本
    :.,+20#        显示当前这一行及向下20行之间的行号
        如果后面没有接着数值,+与-分别等于+1与-1。同样地,++与--分别可将范围增加一行。
    :/world/d    删除下一个包含world的行
    :/world/+d    删除下一个包含world的行的下一行
    :/world1/,/world2/d        删除下一个包含world1的行到第一个包含world2的行
    :.,/world/m23        将当前行到第一个包含world的行之间的文本放置到第23行之后
    :100,+5 p        打印第100行与它下面的5行    :100;+5 p
    :/world/,+10 p     打印下一个包含world的行与它下面的10行
    :g/world    寻找到文件中最后一次出现world的地方,并显示文件中所有包含world的行        或:g/world/p
    :g!/world/nu    寻找并显示文件中所有不包含world的行,也显示所有找到的行号
    :60,100g/world/p    寻找并显示第60行到第100行之间包含world的行
    :1,3d | s/world/hello/        删除第1行到第3行,接着在当前行做替换
    :1,5 m 10 | g/world/nu        将第1行到第5行移动到第10行之后,接着显示所有包含world的行的行号
    :100,$w 1.txt    将第100行到文件结尾的内容保存到1.txt文件中
    :.,100w 1.txt    将当前行到第100行的内容保存到1.txt文件中
    :200,$w >>1.txt    将第200行到文件结尾的内容追加到1.txt的尾部
    :r 2.txt    将2.txt文件中的内容读入到当前文件的光标之后
    :100r 2.txt 在第100行之后读入2.txt文件的内容
    :$r 2.txt    在文件结尾读入2.txt文件的内容
    :0r 2.txt    在文件开头读入2.txt文件的内容
    :/world/r 2.txt    在第一个出现world的行之后读入2.txt文件

vim编辑器的命令模式输入Q会调用ex编辑器,输入vi即可回到vim编辑器

使用vim打开两个文件
    vim file1 file2

在vim中切换文件
    Crtl+^
    
将file1中的内容复制到file2中
    "f4yy    将4行内容复制到缓冲区f中
    :w        保存文件
    :e file2 进入file2文件
    "fp        从命名缓冲区f中粘贴内容到光标处
    
vim替换命令
    :s/old/new/        将第一个出现的old替换为new
    :s/old/new/2    将第二个出现的old替换为new
    :s/old/new/g    将所有的old替换为new
    :.,+5 s/old/new/    从当前行开始到下面的五行进行替换
    :100,200s/old/new/g        将第100行到第200行之间的old替换为new
    :1,$s/old/new/g            将第1行到最后一行的old替换为new
    :1,30s/old/new/gc        c表示是确认的意思confirm
    :%s/old/new/g            将文件中所有的old替换为new
    :g/world/s/old/new/g    将包含world的行并将old替换为new
    :g/world/s//new/g        将包含world的行的world替换为new        :%s/world/new/g
    
正则表达式
元字符
    .    匹配任何单个字符,换行符除外
    *    匹配前一个字符零到任意次
    ^    匹配一行的开头
    $    匹配一行的结尾
    \    转义符
    []    匹配方括号里面的任何一个字符
    [^] 跟[]正好相反
    \(\)    将括号内的的模式保存到特殊的空间(保留缓冲区),可以保存任意一行中的9个模式
    \<\>    精确匹配
    ~    匹配任何上一次搜索时所使用的正则表达式,例如,搜索过the,边可以使用/~n来搜索then

字符类型
    [:alnum:]    字母与数字字符
    还有很多,自己去查吧,我这里就不列出来了。
    .....
    
替换字符串
    \1        将\(\)匹配到的内容引用到此
    \.        将.进行转义
    &        会替换成搜索模式匹配到的完整文本    :s/world/hello,&/g:将world替换为hello,world
    \u或\l    使替换字符串中的下一个字符变成大写或小写    :s/world/\u&/g    将world替换为World
    \U或\L或\e或\E        将匹配到所有字符串变成大写或小写,一直到替换字符串结束,或出现\e或\E为止    :s/world/\U&/g    将world替换为WORLD
    
:s//~/    重复上一次替换
:%&g    在所有地方重复上一个替换
    &键可以被当成vi命令,:&命令(重复上一个替换)
:~命令与:&相似,只能用来搜索的模式是上一个出现的正则表达式,而不一定是上一个替换命令中的正则表达式
例子:    
    :s/old/new/g
    :/green
    :~    等于:s/green/new/g

你可能感兴趣的:(vim)