本文的目的在于总结一些日常操作中比较实用、有规律的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
 
 

谈谈Vim中实用又好记的一些命令的更多相关文章

  1. Vim 中截取部分内容保存到其他文件

    最近无聊,突然想跟着玩玩天池数据挖掘,发现数据好大,想转换到mysql数据库,phpmyadmin import 导入时抱错! 数据文件大大! 于是乎,准备截取一小段到另外一个文件测试先,然后,发现了 ...

  2. [原]总结VIM的实用技巧

    VIM真是一个神奇而又复杂的编辑器,让我这样的Linux编程新手茫然不已啊.每次到真正动手编程的时候才发现完全不知道该怎么操作VIM,一点都没感觉到VIM的强大,哈哈--正好今天学习了一点VIM操作技 ...

  3. VIM中的寄存器简介

    原来在vim粘贴从其他地方复制过来的文本的时候,一直用的shift + inert,那时就想,能不能够直接就像p那样粘贴,不必非得进入插入模式再来粘贴.后来看了<vim实用技巧>上关于vi ...

  4. Vim/Vi实用技巧(第二版)

    Vim/Vi实用技巧 1.导入文件 :r [文件名] #导入到当前编辑的文件中 如 :r /etc/inittab 文件上部为/etc/services文件,下部为/etc/inittab文件 2.执 ...

  5. VIM中的特殊字符

    0.简介 在linux中vim查看一个windows下的文本文件, 经常在行尾有一个 ^M. 这其实是windows/linux/mac系统中文本换行不一致的原因导致的, 系统类别 文本换行符 转义字 ...

  6. 谈谈CSS中一些比较"偏门"的小知识

    前面我写了:谈谈html中一些比较"偏门"的知识,现在这篇(主要)想谈谈个人所见的CSS一些小知识点,加深印象:同时也希望有需要的人能有收获! 1.常见的浏览器内核: 以IE为代表 ...

  7. vim中使用正則表達式

    一.使用正則表達式的命令 使用正則表達式的命令最常见的就是 / (搜索)命令. 其格式例如以下: /正則表達式 还有一个非常实用的命令就是 :s(替换)命令,将第一个//之间的正則表達式替换成第二个/ ...

  8. 谈谈MySQL中的锁

    谈谈MySQL中的锁 锁的定义 ​ 在生活中锁的例子就非常多了,所以应该很容易理解锁的含义.在计算机领域,可以这样来概述,锁是计算机协调多个进行进程并发访问某一资源的机制. ​ 在数据库中,锁也是一个 ...

  9. Vim中的基本操作

    Vim中的基本操作 vim介绍.实验知识点.Vim中的六种基本模式 2.1 vim 6种模式介绍 从vi衍生出来的Vim具有多种模式,这种独特的设计容易使初学者产生混淆.几乎所有的编辑器都会有插入和执 ...

随机推荐

  1. bzoj3173: [Tjoi2013]最长上升子序列(树状数组+二分倒推)

    3173: [Tjoi2013]最长上升子序列 题目:传送门 题解:  好题! 怎么说吧...是应该扇死自己...看错了两次题: 每次加一个数的时候,如果当前位置有数了,是要加到那个数的前面,而不是直 ...

  2. JAVA设计模式之【迭代器模式】

    迭代器模式 聚合类,聚合对象 电视机遥控器,迭代器,遍历局和对象中的成员 灵活新增遍历方法 将负责遍历数据的方法提取出来,封装到专门的类中,实现数据存储和数据遍历分离.这就是迭代器模式. 灵活性,可扩 ...

  3. 什么是域名的TTL值? ——一条域名解析记录在DNS缓存服务器中的存留时间

    什么是域名的TTL值? 转自:http://hizip.net/index.php/archives/20/TTL(Time-To-Live),就是一条域名解析记录在DNS服务器中的存留时间.当各地的 ...

  4. [jzoj 5930] [NOIP2018模拟10.26】山花 解题报告 (质因数分类)

    题目链接: http://172.16.0.132/senior/#contest/show/2538/2 题目: 小S决定从某一个节点$u$开始对其子树中与$u$距离小于$K$的节点代表的花树进行采 ...

  5. 关于javascript 与iOS交互的简单使用

    关于导入 JavaScriptCore 这个就不说了 js交互我们首先用到webView与webView的代理 基本上是很简单,,不过后台10分的坑 以下是代码 在webView的加载完成里面 fun ...

  6. jquery的clone()引发的问题,下拉框点击没有反应

    此段代码是对某块元素的移位:上移.下移.对比修改前后的两段代码: 修改前: //点击移位 function move(obj,posi){ var al=$(obj).parent('li').par ...

  7. html5学习之第一步:认识标签,了解布局

    图1. Acme United的网页的规划 Header区的例子包含了页面标题和副标题,< header>标签被用来创建页面的Header区的内容.除了网页本身之外,< header ...

  8. malloc 和free例程

    #include <stdio.h>#include <stdlib.h>int main(){int a;scanf("%d",&a);int * ...

  9. 【BZOJ 1588】 [HNOI2002]营业额统计

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每天的最小波动值指的是和之前所有天的差值的绝对值中的最小值. 用set.的lower_bound函数. 每次找和他差值最小的数字就好 ...

  10. 过Hard题目.周末

      # Title Editorial Acceptance Difficulty Frequency   . 65 Valid Number     12.6% Hard    . 126 Word ...