• VIM的高级使用


    1)一些常用的Vim配置,在~/.vimrc中
    syntax on       支持语法高亮
    set nu          显示行号
    set nonu      不显示行号
    set ai          设置自动缩进
    set shiftwidth=4   设置自动缩进 4 个空格, 当然要设自动缩进先.
    set sts=4          即设置 softtabstop 为 4. 输入 tab 后就跳了 4 格.
    set tabstop=4      实际的 tab 即为 4 个空格, 而不是缺省的 8 个.
    set expandtab      在输入 tab 后, vim 用恰当的空格来填充这个 tab.
    :set hls 打开搜索高亮

    :set nohls 取消搜索高亮 

    :set list : 显示特殊字符
    :set nolist 
     
     
     
    2)多文件编辑
    :e filename  vim将在原窗口中打开新的文件, 若旧文件编辑过, 会要求保存.
    :sp filename vim将分割出一个横向窗口, 并在该窗口中打开新文件.
    :vsp filename vim将在右边分割出一个窗口, 并在该窗口中打开新文件.
    如果:sp 或 :vsp没有指定文件,则在新窗口中打开原文件。
    ctrl+w w来在vim打开的多个窗口中切换.
    ctrl+w q来关闭多个窗口中当前的窗口.
     
     打开的两个文件上下窗口分布 : vim -o file1 file2
     打开的两个文件左右窗口分布 : vim -O file1 file2           
     
    3) 查找
    /xxx(?xxx) 表示在整篇文档中搜索匹配xxx的字符串, / 表示向下查找, ? 表示向上查找.查找到以后, 再输入 n 查找下一个匹配处, 输入 N 反方向查找.
    *(#) 当光标停留在某个单词上时, 输入这条命令表示查找与该单词匹配的下(上)一个单词. 同样, 再输入 n 查找下一个匹配处, 输入 N 反方向查找. (可以使用shift+* 或 shift + #来查找当前光标所在单词)
    g*(g#) 此命令与上条命令相似, 只不过它不完全匹配光标所在处的单词, 而是匹配包含该单词的所有字符串.
    % 本命令查找与光标所在处相匹配的反括号, 包括 () [] { }.

    在vim中一般查找 :/str,如果有空格则需要:/str str2/ 
     
    4) 光标移动
    w(e) 移动光标到下一个单词. b 移动光标到上一个单词.
    0 移动光标到本行最开头. ^ 移动光标到本行最开头的字符处. $ 移动光标到本行结尾处.
    向前向后翻页 ctrl+f 和 ctrl+b. 
    % 跳转到相配对的括号. 
     
    G(shift+g)   - go to the last line in the vim editor (文件的末尾) 
    1G - goto line number 1(文件的开始)
    20G - goto line number 20
     
     
     
    5)拷贝, 删除与粘贴

    x表示删除当前字符。 

    在 vi 中 y 表示拷贝, d 表示删除, p 表示粘贴. 其中拷贝与删除是与光标移动命令结合的, 看几个例子就能够明白了.
    yw 表示拷贝从当前光标到光标所在单词结尾的内容. dw 表示删除从当前光标到光标所在单词结尾的内容. y0 表示拷贝从当前光标到光标所在行首的内容. d0 表示删除从当前光标到光标所在行首的内容. y$ 表示拷贝从当前光标到光标所在行尾的内容. d$ 表示删除从当前光标到光标所在行尾的内容. yfa 表示拷贝从当前光标到光标后面的第一个a字符之间的内容. dfa 表示删除从当前光标到光标后面的第一个a字符之间的内容.
    特殊地: yy 表示拷贝光标所在行. dd 表示删除光标所在行. D 表示删除从当前光标到光标所在行尾的内容.

    删除整个文档 :1,$d

    删除某行后面的换行符号:在命令状态下,在某一行上按"J"键将Join下一行,呵呵 

    u 撤销上次的操作,ctrl+r恢复上次的撤销。 

    删除所有空白行(^是行的开始,\s*是零个或者多个空白字符;$是行尾) :g/^\s*$/d

     
    6)替换
    单个字符替换用r,覆盖多个字符用R,用多个字符替换一个字符用s,整行替换用S.
    :s/vivian/sky/ 替换当前行第一个 vivian 为 sky
    :s/vivian/sky/g 替换当前行所有 vivian 为 sky
    :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
    :n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
    n 为数字,若 n 为 .,表示从当前行开始到最后一行
    :%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky
    :%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
    可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
    :s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/
    :%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/
    :2,50s/part1/part2      #用part2替换第2行到第50行中每行第1个part1
    :2,50s/part1/part2/g    #用part2替换第2行到第50行中所有的part1
    :.,+3s/part1/part2      #用part2替换当前行以及当前行后面的三行中每行第1个part1

    :.,+3s/part1/part2/g    #用part2替换当前行以及当前行后面的三行中所有的part1 

     

    例如将每行增加 xxx : :%s/\(.*\)/\1 xxx/g 

    7)visual block状态

    ctrl+v进入,列块选择,例如4l选中光标接下来的4列,7j光标开始的7行,执行4l和7j后选中7行4列的块, 也可以在ctrl+v后使用hjkl来控制选择的行和列,可以使用y,d等进行拷贝删除操作。例如删除多行前面的空格。

    (块编辑:编辑一行,效果被应用到所有选中的行)例如注释多行:ctrl+v选择块后,然后I进入编辑状态在第一行的开始输入#,然后两次esc退出后,刚才选中的所有行前面自动加#,从而达到注释所有行的目的。

    shift+v可以用来选中多行,然后:s/aaa/bbb/g, 对选中的行中进行替换。

    shift+v选中多行后,执行d直接删除选中的多行。


    http://man.chinaunix.net/newsoft/vi/doc/visual.html 
     

    8) 其他

    查看当前vim打开的文件:vim下:f

    vim中去除空行或行末的^M:dos2unix ufile

    VIM中sort不能用:只能在terminal下执行sort -u file > file_new
     
    vim中diff文件: 如果已经打开了一个文件,则 :vert diffsplit file2, 如果还没有打开文件,则直接执行vi -O test_vi.txt test_vi2.txt,此时两个文件左右排列,如果需要两个文件上下排列的话,执行vi -o test_vi.txt test_vi2.txt。 vimdiff最多可以同时比较4个文件。
     
    不退出vim,直接执行命令,例如在perl文件中,直接执行不退出,:!perl % 。 如果前面已经执行过了,则重复前面的命令时,只需要:!!
     

    完! 

  • 相关阅读:
    topcoder srm 320 div1
    topcoder srm 325 div1
    topcoder srm 330 div1
    topcoder srm 335 div1
    topcoder srm 340 div1
    topcoder srm 300 div1
    topcoder srm 305 div1
    topcoder srm 310 div1
    topcoder srm 315 div1
    如何统计iOS产品不同渠道的下载量?
  • 原文地址:https://www.cnblogs.com/itech/p/2363111.html
Copyright © 2020-2023  润新知