可视模式

可视模式是与正常模式、插入模式一起并列的模式。它的作用就像图形化编辑器下用鼠标来选择一个块。

在vim下,使用正常模式和ex命令,连搜带跳行的,未必就比用鼠标慢。

我们先做一个例子找找感觉,体验一下vim中可视模式的用法。

我们假设这样一段代码:

#include <stdlib.h>
int main(int argc, char* argv[])
{
    return 0;
}

假设我们想把这段代码全注释掉,该如何做?

1. 在第一行首先用Ctrl-v进入列选择模式

2. G跳到最后一行

3. I//<空格>

就变成了下面这样:

// #include <stdlib.h>
// int main(int argc, char* argv[])
// {
//     return 0;
// }

是对所有行统一起作效果。

我们尝试再把注释删掉。

1. 第一行行首,0Ctrl-v

2. G跳到最后一行

3. 2l,向右移动两次

4. x, 将这一块全删除

还有更神奇的,假如我们想在每句话后面添点东西如何做?

我们来看看vim的黑科技:

1. 2G

2. 0

3. Ctrl-V

4. G

5. $

6. A // test

于是这段代码变成了这样:

#include <stdlib.h>
int main(int argc, char* argv[]) // test
{ // test
    return 0; // test
} // test

$命令在列块模式下成为黑科技,虽然每行长短不一,但是它仍然是个块。

可视模式的三种模式

可视模式的三种子模式是:

* v: 字符模式

* V: 行模式

* Ctrl-v: 列块模式

另外,gv命令可以重做上次的选区,不分模式。

切换端点

在选择的时候,有时候会发现,移动到终点之后,起点选错了。这时我们可以用o命令切换端点,我们再回去移动到正确的起点就可以了。

可视模式下的a和i

在可视模式下,a和i已经失去了切换到插入模式的功能,主要被用于aw, iw, as, is之类的文本对象之中。

要切换到插入模式,I和A命令还是可以正常使用的。

Vim技能修炼教程(7) - 可视模式的更多相关文章

  1. Vim技能修炼教程(10) - 代码跳转

    程序员功能 前面我们用了5讲的篇幅来讲基本编辑的基本功:第4讲是基本操作,第5讲是操作符,第6讲行编辑ex命令,第7讲可视模式,第8讲多窗口,第9讲缓冲区和标签页. 从这一讲开始,我们从通用功能向程序 ...

  2. Vim技能修炼教程(2) - 语法高亮速成

    语法高亮速成 我们继续在人间修行Vim技能之旅.上一次我们学习了如何通过vundle安装插件,这次我们迅速向写插件的方向挺进. 我们先学习一个最简单的语法高亮插件的写法. 语法高亮基本上是由三部分组成 ...

  3. Vim技能修炼教程(4) - 基本功

    基本功 前面我们学会了插件管理器和如何实现语法高亮,相信大家已经从中体会到了vim插件的强大功能.现在,是时候回来补一补基本功了. Vi有三种主要模式,正常模式,插入模式和可视化模式.正常我们推荐的方 ...

  4. Vim技能修炼教程(8) - 多窗口

    多窗口 如果一个vim只能开一个窗口,那肯定是有点low.尤其是写代码的时候,打开多个文件是经常的需求. 速成教程 横着切成两个 :split 文件名 上下切换窗口 Ctrl-W加上上下键,可以实现上 ...

  5. Vim技能修炼教程(3) - 语法高亮进阶

    语法高亮进阶 首先我们复习一下上节学到的三个命令: * syntax match用于定义正则表达式和规则的对应 * highlight default定义配色方案 * highlight link将正 ...

  6. Vim技能修炼教程(12) - Vim的脚本语言支持

    Vim的脚本语言支持 本节开始,我们正式接触vimscript这门古老的脚本语言. 首先要说明,vim支持的扩展语言很多,比如python, python3, ruby, lua,tcl等常见脚本语言 ...

  7. Vim技能修炼教程(11) - 代码折叠

    上一讲我们是程序员篇的第一讲,关于代码跳转.代码跳转是一个付出很少收获很大的功能.这一节我们开始一个收获很多,但是付出也相对多一点功能:代码折叠. 代码折叠 折叠的类型 折叠有下面几种类型: * Ma ...

  8. Vim技能修炼教程(6) - 行编辑器

    在很久很久以前,计算机的运算能力还很弱,终端与主机的通信也不好.在没有显示器的时代,只能通过电传打字机跟主机通信.那时候只有行编辑器,编辑的时候只能在一行中进行.需要显示哪一行,就把哪一行或者哪几行打 ...

  9. Vim技能修炼教程(5) - 操作符实务

    操作符实务 操作符复习 上次我们讲了操作符与文本对象的组合这样一个vim的强大功能.但是上节的知识点过于密集,可读性可能差了一点.不过没关系,重要的知识点在后面用到的时候我们可以先复习一下. 我们还是 ...

随机推荐

  1. 20145331实验五 Java网络编程及安全

    20145331魏澍琛 实验五 Java网络编程 实验内容 1.用书上的TCP代码,实现服务器与客户端. 2.客户端与服务器连接 3.客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码 ...

  2. MR案例:路径过滤PathFilter

    问题描述:现有一批cookie日志,按照日期进行存放,如目录 “dir/2015-08-08” 下存放2015-08-08这一天的所有cookie.而目录 “/2015-08-08/” 下又根据数据文 ...

  3. struts2的refreshModelBeforeResult

    首先想介绍的是struts2的原型驱动ModelDriven机制. 所谓的ModelDriven,就是把一个实体类当成页面数据的收集对象.用法看起来像下面这个样子 <span style=&qu ...

  4. PHP 根据IP地址获取所在城市

    header('Content-Type:text/html;Charset=utf-8'); function GetIp(){ $realip = ''; $unknown = 'unknown' ...

  5. 一键安装 zabbix 2.0 版本 脚本

    原文地址: http://blog.csdn.net/u012449196/article/details/53859068 本文修改了原文中的部分错误,此脚本适用于zabbix 2.0 版本,以版本 ...

  6. git将本地已经存在的分支和一个指定的远端分支建立映射关系

    Make an existing Git branch track a remote branch? Given a branch foo and a remote upstream: As of G ...

  7. 问下大家,chorme里用开发者工具看headers,点network标签然后刷新网页并没有headers选项,怎么破?

    问下大家,chorme里用开发者工具看headers,点network标签然后刷新网页并没有headers选项,怎么破? 请教个问题 jmeter在Linux服务器压测,抛出很多错误率 但日志中没看到 ...

  8. jQuery 中$.ajax()方法参数详解

    $.ajax({ url:'test.do', data:{id:,name:'xiaoming'}, type:'post', dataType:'json', success:function(d ...

  9. 设计模式--享元模式C++实现

    1定义 使用共享对象可有效的支持大量细粒度的对象 2类图 角色分析 Flyweight抽象享元角色,一个产品的抽象,定义内部状态和外部状态的接口或者实现 ConcreteFlyweight具体享元角色 ...

  10. Node-Media-Server

    Node-Media-Server (相对稳定可用性高) 主要应用Node.js 实现的RTSP(结合ffmpeg)/RTMP/HTTP/WebSocket/HLS/DASH流媒体服务器 特性 跨平台 ...