zoukankan      html  css  js  c++  java
  • 谈谈Vim中实用又好记的一些命令


     
    本文的目的在于总结一些日常操作中比较实用、有规律的Vim命令,而不致于介绍一些基础的Vim知识,比如几种插入模式,hjkl移动命令,dd删除本行,p粘贴 等等,故对Vim基本知识不够熟悉的请参见其他教程。
     
    另外,给大家强烈推荐一款强大的Vim插件集“spf13-vim”,这是一款Vim插件集,它把常用的一些Vim插件结合起来了,满足大部分人的需求,开箱即用,而不用自己一个一个的去配置Vim插件,处理各种按键冲突等等,免去你花大量的时间用于配置Vim软件本身(比如博主最初学习Vim的时候),而不是利用Vim来更好地解决问题。
     
    最后,本博文会不定时更新。。。。
     


    命令1:   [vydc] [ia] [pair_char]
     
    上面命令指的是该命令由三部分组成,每部分可以是[ ]里面的任意一个字符
    第一部分指定“操作类型”
    第二部分和第三部分指定“操作范围”,是基于当前光标所在位置的,这个非常重要
     
    (1)
    v: visual select
    y: copy
    d: delete
    c: change,和delete的区别在于它会先delete,然后进入"insert mode";等价于先 d 然后按下 i 进入"insert mode"
     
    (2)
    pair_char 可以是一些成对的字符,比如 {  [  (  <  "  '  也可以使用它们的对应right close版本,比如} ] 等等
    pair_char 的特殊情况, 可以是w, 代表光标所在的单词(以空格分隔), 这时中间是使用i还是a, 区别在于操作结果包不包括单词右边的空格
     
    (3)
    i: exclude the pair_char
    a: include the pair_char
    i 和 a 的区别在于指定的“操作范围”包不包括由pair_char指定的这一对字符,即 {} 或 [] 或 () 或 "" 等等
     
    举个例子吧:
     
    假设有一文本行为  abcd "fgh ijk <lmn>";
    光标位于m处(下划线处)
    vi< 作用:选中了 lmn
    ya" 作用:复制了 "fgh ijk <lmn>"
    di"  作用:删除了 fgh ijk <lmn>
    ci<  作用: 删除了 lmn 并且进入了"insert mode",光标位于<>中间
     

     
    命令2:   [vydc] [tf] [a_char]
     
    (1)
    参见命令1的(1)
     
    (2)
    t: till, exclude the character 'a_char'
    f: find, include the character 'a_char'
     
    t和f 代表从左往右
    另外,还可以使用大写的T和F,代表从右往左
     
    (3)
    a_char: 代表某一个字符,特殊情况是0和$, 代表行首和行尾
     

     
    命令3:   大小写转换 gU, gu
     
    (1)
    [visual_select_something_by_someway]gU
    [visual_select_something_by_someway]gU
    先通过某种方式选择某个范围的内容(可以通过命令1,2中的v指令进行选择),然后将其转换成大写或小写
     
    (2)
    gU [ia] [pair_char]
    gu [ia] [pair_char]
    gU [tf] [a_char]
    gu [tf] [a_char]
    这种方式是先通过gU指定要转换成大写,然后通过后两部分指定“操作范围”
     
    [ia] [pair_char]  参见命令1的解释
    这里中间部分使用 i 或 a 好像是没有什么区别
     
    [tf] [a_char] 参见命令2的解释
     

     
    命令4:   宏命令
     
    录制命令  qa [do_some_routine_job_in_this_line_and_move_to_next_line] q
    执行上一步录制的命令 [n]@a
     
    qa中的a代表将录制的命令放置于哪个寄存器中,对应于[n]@a 中的a。所以,a也可以换成b,c,d...
    [n]@a中的n代表执行该录制命令的次数,省略n即执行1次
     
    宏命令非常适合执行一些针对每一行都执行有规律的的操作,重点在于,首先,按下qa进入录制模式,然后在第一行针对该行进行有规律的操作,最终移到下一行,按下a退出录制模式,使用[n]@a对余下的所有行进行批量处理
     
    例子:
    假设有如下的文本行,每一行代表一个用户名,现在需要对该用户名进行密码重置为123456,简单起见,假设只有5行:
    user1
    user2
    user3
    user4
    user5
    

    光标置于第一行某个位置处,在“Normal mode” 模式下按顺序按 qaIalter user_table set password='123456' where username='<Esc>A';<Esc>ja

    好了,录制命令完毕,执行命令4@a,即把剩下的4行处理为与第一行相同的结果了

    执行结果如下:
     
    alter user_table set password='123456' where username='user1';
    alter user_table set password='123456' where username='user2';
    alter user_table set password='123456' where username='user3';
    alter user_table set password='123456' where username='user4';
    alter user_table set password='123456' where username='user5';
    
     

     
    命令5:   代码自动缩进 =
     
    (1) 光标移到某个位置,然后,使用 vi{  选择要自动缩排的代码块{ code },最后,按=
    (2) 按下大写V进入行选择模式,使用 jk 上下移动选择要自动缩排的行集, 最后,按 =
    (3) 最懒的方式, gg到第一行, VG 选择该文件所有行,最后,按 =,格式化所有代码
     

     
    命令6: 倒置文本  :g/^/m0
     
    让第一行成为最后一行,第二行成为倒数第二行,最后一行成为第一行。



     原创文章,转载请注明出处:http://www.cnblogs.com/DayByDay/p/3921799.html
     
     
  • 相关阅读:
    leetcode 264: Ugly Number II
    leetcode 260: Single Number III
    leetcode 241: Different Ways to Add Parentheses
    清远市技术学院大学城网
    英德市职业技术学校大学城网
    清远市田家炳中学大学城网
    清远市清城区清城中学大学城网
    清远市第一中学大学城网
    当前最热的技术
    Python 学习视频
  • 原文地址:https://www.cnblogs.com/DayByDay/p/3921799.html
Copyright © 2011-2022 走看看